存档在 ‘工具开发’ 分类

存档在 ‘工具开发’ 分类

实现Unitils对多数据源的支持

2009年7月20日

    目前淘宝共享中心测试的数据准备主要使用Unitils + DBunit来完成,具体实现请参阅:

    http://rdc.taobao.com/blog/qa/?p=686

    文中已经提及和如何实现Uitils对Execl文件的 支持,并指出Unitils暂时无法支持多数据源的不足。在TC读写分离项目的测试中,需要同时往不同的数据   库插入测试数据,为此该问题的存在已经大大的影响了测试效率,因此决定对Unitils进行再次改造,使其能够对多数据源提供良好支持;

·How Unitils works with DBUnit

    我们首先来看下Unitls是如何将数据传递给DBunit的,org.dbunit.operation.DatabaseOperation提供的接口如下:

    public abstract void execute(IDatabaseConnection connection, IDataSet dataSet) throws DatabaseUnitException, SQLException;

   可以看出,Unitils只需要dataSet和相应的connection参数就可以完成数据库的操作,这样我们只需将一个Excel中的内容根据不同的数据源拆分成几个dataSet并配给不同数据源就可以实现对多数据源的需求了。

unitils1

·Excel 文件的拆分

为了把Excel拆分成几个DataSet,我们就得先看下DataSet的结构,DataSet其实只有一个成员变量:ITable[] _tables,因此我们只需将_tables按不同的数据源拆分为几个ITable的数组即可。而为了能将不同的表单按数据源进行,本次做法是在 Excel的各个表单加上标签,即表单名由原来的TableName改为 DatasourceLable.TableName,DatasourceLable与数据源配置一一对应,为了可以兼容以前的用例,也可没有 DatasourceLable,此时使用默认数据源(详见数据源配置)。

unitils2

如上标注中,sheet1中的数据将插入默认数据源的TC_BIZ_ORDER表中,sheet2中的数据将插入test标注的数据源的user表中。

·数据源配置

上例中,数据源配置如下:

默认数据源:

         #default datasource
database.driverClassName=oracle.jdbc.driver.OracleDriver
database.url=jdbc:oracle:oci:@dev-unittest
database.userName=tbcenter
database.password=tbcenter
database.schemaNames=tbcenter

标注为test的数据源

         test.database.driverClassName=org.gjt.mm.mysql.Driver
test.database.url=jdbc:mysql://127.0.0.1:3306/test
test.database.userName=test
test.database.password=

我们将根据数据源配置文件的配置将所用到的数据源放到一个Datasource Map中,以标注为Key。

接下来只需把DataSet和Datasource一一对应起来传递给DBunit即可实现多数据源的支持了。

一个很土却有效方法,欢迎拍砖。

eclipse中文化

2009年7月6日

eclipse 文件夹下,建立两个文件夹:一个language文件夹,另一个是links文件夹。language文件夹里放的是你汉化程序,如F:/ eclipse/language/eclipse/(程序)。在links文件夹里新建一个language.link的文件,它的内容为 path=F://eclipse//language注:无分号结束。
下面重要的一步是,间eclipse的快捷方式发送到桌面上,选中快捷方式,打开属性对话框

启动 eclipse ,这时默认启动为中文界面,如果想启动英文 eclipse ,只要新建一 eclipse.exe 快捷方式,快捷方式 属性 ”==>“ 目标 中输入 D:/eclipse/eclipse.exe -nl ”en_US” 即可(中文界面可以设置 -nl ”zh_CN” ,繁体中文为 -nl ”zh_TW”

重新启动eclipse就OK!

如果有人要安装myeclipse插件的话只要把links下的language.link文件考到我的是“F:/eclipse /eclipse”找到其下面的links文件夹,把language.link文件放进去,让系统启动时加载 path=F://eclipse//language下的语言包
下来所要做的就是把myeclipse快捷方式发送到桌面右键单击选择属性把目标下的文件改为是我的机子“F:/eclipse/eclipse /eclipse.exe -nl “zh_CN” -vm “F:/eclipse/jre/bin/javaw.exe””也就是在原文件下后加入了-nl ”zh_CN”如它默认加载中文包

几种java转exe的工具

2009年7月6日

1. 从www.towerj.com 获得一个TowerJ编译器,该编译器可以将你的CLASS文件编译成EXE文件。
注:现在已经找不到,不提供了,被人家收购了。

2. 利用微软的SDK-Java 4.0所提供的jexegen.exe创建EXE文件,这个软件可以从微软的网站免费下载,地址如下:
http://www.microsoft.com/java/download/dl_sdk40.htm

jexegen的语法如下:

jexegen /OUT:exe_file_name
/MAIN:main_class_name main_class_file_name.class
[and other classes]

注:没有试过

3. Visual Cafe提供了一个能够创建EXE文件的本地编译器。你需要安装该光盘上提供的EXE组件。
注:没有试过

4. 使用InstallAnywhere创建安装盘。
注:很不错的工具。
但就是要>8M(带jre),还有一种是>1M的(不带jre)。
但是它可以编译成各种平台上可以使用的exe程序。

5. 使用IBM AlphaWorks提供的一个高性能Java编译器,该编译器可以从下面的地址获得:
http://www.alphaworks.ibm.com/tech/hpc

注:没有试过

6. JET是一个优秀的Java语言本地编译器。该编译器可以从这个网站获得一个测试版本:
http://www.excelsior-usa.com/jet.html

注:不喜欢。
编译好的程序还是jre的,听说正版的可以不能jre。安装好还要编译,我用了30分钟。

7. Instantiations公司的JOVE
http://www.instantiations.com/jove/…ejovesystem.htm
JOVE公司合并了以前的SuperCede,一个优秀的本地编译器,现在SuperCede已经不复存在了。

注:太烦了,老是出来一个对话框
用过,会出来一个对话框,表示这是jove公司的产品。

8. JToEXE
Bravo Zulu Consulting, Inc开发的一款本地编译器,本来可以从该公司的网页上免费下载的,不过目前在该公司的主页上找不到了。
公司主页:http://www.bravozulu.com/
下面这个FTP上曾经有过这个软件,不知道现在是不是还在:
ftp://race.dlut.edu.cn/pub/java/tools/jet

注:很烦了,老是出来一个对话框,但是没有想到我找到了crack,在google上找到。
现在去掉了那个对话框后,我很喜欢这个工具,虽然它需要jre,但是文件只有100多K,很好哦。

9.Exe4j
很不错

10.jbuilder
这个工具不用多讲了,在jbuilder6.0以前的(包括6.0),是不能生成exe文件的,所以可以用如下的方法实现。这可以人家高手想出来的,我只是帮着宣传一下。
还有jbuilder7.0开始都可以生成exe文件。

这个是Borland不公开的使用技巧,能够通过JBuilder来制作exe文件来启动Java文件。
JBuilder并不支持本地编译机制。但是有一个隐藏的技巧可以让你从可执行文件来启动Java程序,可以出现或者不出现console窗口。想做到这些,需要JBuilder的bin目录下的这些文件:
JBuilder.exe
JBuilderW.exe (可选)
JBuilder.config
jdk.config
JavaLauncher.dll
“JBuilder.exe” 是一个通用的可执行外壳文件,用以启动Java程序,”JBuilderW.exe“好像是javaw.exe一样,它把”JBuilder.exe”包 装起来,但是运行时候不显示那个console的窗口。使用这些文件的关键是文件名。“JBuilder.exe”查找一个文件叫” JBuilder.config”的配置文件,里面包含了运行Java程序的必须信息。同样的”JBuilderW.exe”查找” JBuilder.exe”来启动不带Console窗口的Java程序。如果把JBuilder.exe重命名为”foo
.exe”,那”foo.exe”将去寻找”foo.config”配置文件,同样”JBuilderW.exe”被重命名为”fooW.exe”,它会去寻找”foo.exe”文件。
说到这里,聪明的读者应该猜到怎样利用JBuilder.exe来启动应用程序了。只要把JBuilder.exe,JBuilerW.exe, JBuilder.config改名成相应的文件名,在JBuilder.config里面指定主类和类路径,就能够通过执行JBuilder.exe (或者被改名后的exe文件)来启动Java应用程序了。下面是用本机为例。
Borland JBuilder 5被安装在E:jbuilder5目录下,在E:jbuilder5bin下建立一个temp目录,然后把JBuilder.exe, JBuilder.config,JavaLauncher.dll,jdk.config四个文件拷贝到E:jbuilder5bintemp 目录下,然后在这个目录下建立一个hello目录,在这个目录下生成一个hello.java文件,即E:jbuilder5bintemp hellohello.java文件,
//hello.java/
package hello;
public class hello{
public static void main(String s[]){
System.out.println(”Hello, Exe file!”);
}
}
编译成class文件,然后打开Jbuilder.config文件,作相应的修改:
在JBuilder.config里面找到下面两行
# Start JBuilder using the its main class
mainclass com.borland.jbuilder.JBuilder
修改为
# Start JBuilder using the its main class
mainclass hello.hello
addpath E:/jbuilder5/bin/temp/
addpath命令是把目录加入类路径中,这个命令和其它config里面可以识别的命令可以在JBuilder/bin目录下的config_readme.txt里面找到详细说明。
然后将jdk.config里面的javapath修改成相对的路径,例如原来是
javapath ../jdk1.3/bin/java
修改成
javapath ../../jdk1.3/bin/java
最后
将JBuilder.exe,JBuilder.config修改成所需要的文件名,例如foo.exe和foo.config文件。
现在执行foo.exe文件
至此,通过修改JBuilder来使用exe文件启动自己的Java应用程序已经完成了。
但是好玩的地方并不在这个地方,下面的小技巧可能更有趣,将Jar文件打包进入exe文件!
假设利用上面的文件,生成hello.jar包,
jar cvf hello.jar hello*.class
然后将jar包附加到JBuilder.exe后面去,
copy /b ..JBuilder.exe+hello.jar foo.exe
在foo.config(JBuilder.config)文件里面把前面加入的类路径去掉,并加入下面的路径:
addpath E:/jbuilder5/bin/temp/foo.exe
然后执行,foo.exe
看到了么?一个含jar包的exe文件被执行了!
这个过程的大致原理是:exe文件的重要信息都在文件头部,所以把乱七八糟的东西放exe文件尾部是不要紧的;而jar/zip文件的重要信息是在文件尾部的,这样它们两不相干,能够容易的被执行。
请注意:读者如果使用这个功能,得自己承担可能带来的风险,因为Borland对这个功能不提供官方的支持!

还可以去看看http://www-900.ibm.com/developerWor…ive/index.shtml 这是一篇分析的文章,但它提供了很多有用的资料。

TDSL工具开发的感想

2009年7月5日

参与 TDSL 工具开发让我收获不少。从前期的需求分析到最后的测试通过发布都参与其中,看着它一步一步成长起来,有无到有的过程,很欣喜。

       初期,我们先分工,我负责的部分主要是备份文件的管理。天彤跟我们开会讨论明确了这个工具要实现哪些功能,接下去的活就要自己去规划了。刚开始真是比较茫然,不知道如何下手。我负责的这部分基本上是属于 windows 编程,而我以前也没怎么接触过。只能边学边做了,还好如今网络发达,想知道什么信息都能查到。

       按照功能我先划分为五个小功能点, 1.save2.load3.update4. 搜索 5. 文件展示,需要编写五个 UC ,平时都是评审其他人的 UC ,这次轮到自己编写 UC ,编写 UC 的时候一定要把正常流和异常流都考虑清楚,如果没有考虑清楚,遗漏了某些可能路径,用户在操作的过程就会出现抛异常或者没有任何提示导致用户以为死机了。

接着就是系统设计,通过用户昵称 Save 用户的宝贝及其相关信息,选中展示框内的文件 load 用户的宝贝信息。文件展示需要使用 TreeView 控件,需要展示“我的文档”下 Auction 文件夹的文件和子文件夹。文件的搜索需要使用 ListView , 可通过关键字模糊搜索需要的文件。通过几天的查阅资料和编程,基本功能实现了,可是当我让其他同事使用的时候,发现他们面对界面,有种不知所措,无从下手 的感觉,很明显,用户体验非常不好。工具是给人使用了,仅仅实现了基本功能而用户体验很差明显是很失败的。页面上的控件很多,单单看界面无法引导用户进行 下一步的操作。首先要简化界面,而且用户进行一步操作之后,要引导用户下一步的操作,让一切顺理成章进行下去从而到达 save&load 的效果。简化界面,操作按钮只剩下 Save/Load 两个按钮,点击 Save 之后跳出子窗口,引导用户去填写信息,而在 Save 过程中可能某个用户下的宝贝数量很多, Save 时 间过长,如果界面上没有任何反应,用户很可能认为死机的情况,所以加上一个进度条是必要的。在每一个操作过程中都需要让用户自己自己目前的操作的状况是怎 么样的,千万不能让用户很茫然,不知道自己的操作会得到什么呀的结果。如果这样的话,用户很可能会一把关掉工具的窗口,以后再也没有使用该工具的欲望了。

工具开发有感

2009年7月5日

        前段时间参加了天彤的的工具开发组的部分工作,虽然从分析需求到开发完整的工具出来时间并不长,但是期间所经历的也完全是一个项目所必须的所有步骤,在这个期间也体会到了工具开发在测试中所起的作用。

        由于开发所用到的是C#语言,因此作为准备工作,必须先熟悉这个语言的基本语法和特点。C#是一种安全的、稳定的、简单的,由C和C++衍生出来的面向对 象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏和模版,不允许多重继承)。C#综合了VB简单的可视化操作和 C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。

         看来要到达较好的目的,所选用的工具是比较重要的因素。正是由于C#语言所具有的以上特性,才使得工具开发组选用了这样的语言来达到开发出更强大的测试工具的目的。工具开发组所选用的这些技术,何尝又不是工具组本身所需要的工具呢。

        工具的好坏完全取决于是否能起到实际的作用,而起始需求的提出以及对需求的分析无疑就是核心。只要开发出的工具有应用的前景,那么这个工具才是有生命力 的,在这个过程中,coding甚至都只是占了很小的一部分。因为对于怎么做,方法是千差万别的,但是真正达到了目的,那才是最重要的。

如何解决sharepoint中无法查看文件的问题

2009年7月1日

有很长一段时间,sharePoint中上传的文档,其他人无法查看。这个问题搞了很久,今天终于水落石出,找到原因了。

问题原因:
  sharepoint在新建的文档管理部件中,默认是有版本控制的,所以,用户在不知情的情况下,对上传的文档进行修改,就会自动签出文档,而这一点 sharpoint并没有给予提示的。所以,其他人无法查看到这些被签出的文档。(为什么签出状态的文档,其他人看不到,就有些怪异,待有续再研究)

解决方法:
        对文档管理有完全控制权限的用户可以

设置方法
1.选择管理功能中的”设置”功能。
2.”版本控制设置”如下图:

  • 选择”提交的项目是否需求内容审核”  这里选择”否”
  • 每次编辑此文档库中的文件时是否创建版本。这里选择”无版本控制”。因为有版本控制,每次要对文档进行签入签出,不利于大家查询。
  • 是否要求先签出文档然后对其进行编辑。这里选择”否”   这一点很重要,按照常规思维,已经设置了无版本控制,应该不存在对文档的签出签入。但是实际上,对于原来已经存在的文档,是被创建的作者签出的,所有其他 人无法查看到。关于这一点也有奇怪的,为什么不是立即生效的。我们需要手工签入原来已经签出的文档。

p3

 对于已经签出的文档,打开文档列表,如果文档图标上有个绿色的小箭头,表示该文档已经被别人签出

如图:p4

 选择文档列表的下拉签头,选择签入,录入签入备注,签入成功的文档如下图:

p5

CruiseControl与EMMA集成的方法与步骤

2009年5月24日

 

      CruiseControl 是一个很好用的单元测试持续集成工具, EMMA 是一个开源的代码覆盖率分析工具。如果能将这两个强大的免费工具集成起来,对于单元测试持续集成来说,产生的威力那是相当的大,后果很“严重”。经过研究,终于实现了这个貌似相当复杂其实十分简单的任务,下面将具体的集成方法与步骤介绍给大家(由于目前平台架构这边主要用 maven 来构建项目,因此主要介绍利用 maven 的实现方法和步骤),希望对大家能有所帮助。

    第一步,在主项目包的 pom 文件中增加以下内容:

<reporting>

   <plugins>

      <plugin>

        <groupId>org.codehaus.mojo</groupId>

        <artifactId>emma-maven-plugin</artifactId>

        <version>1.0-alpha-1</version>

        <inherited>true</inherited>

      </plugin>

      <plugin>

        <groupId>org.codehaus.mojo</groupId>

        <artifactId>surefire-report-maven-plugin</artifactId>

        <inherited>true</inherited>

      </plugin>

   </plugins>

</reporting>

    第二步:在 CruiseControl 的配置文件中按以下示例配置工程:

  <project name=”mc” buildafterfailed=”true”>

    <listeners>

      <currentbuildstatuslistener file=”logs/${project.name}/status.txt” />

    </listeners>

    <bootstrappers>

      <svnbootstrapper localWorkingCopy=”projects/${project.name}” username=”wenlang” password=”********”/>

    </bootstrappers>

    <modificationset quietperiod=”300″>

      <svn localWorkingCopy=”projects/${project.name}” username=”wenlang” password=”********”/>

    </modificationset>

    <schedule interval=”5400″>

      <maven2 mvnhome=”/usr/maven” pomfile=”projects/${project.name}/pom.xml” goal=”-U clean package -Dmaven.test.skip=true|emma:emma” />

    </schedule>

    <log>

      <merge dir=”projects/${project.name}/target/surefire-reports” />

      <merge dir=”projects/${project.name}/messenger-client/target/surefire-reports” />

      <merge dir=”projects/${project.name}/messenger-common/target/surefire-reports” />

      <merge dir=”projects/${project.name}/messenger-console/target/surefire-reports” />

      <merge dir=”projects/${project.name}/messenger-manager-common/target/surefire-reports” />

      <merge dir=”projects/${project.name}/messenger-server/target/surefire-reports” />

      <merge dir=”projects/${project.name}/messenger-servlet/target/surefire-reports” />

    </log>

    <publishers>

      <artifactspublisher dir=”projects/${project.name}/messenger-server/target/site/emma” dest=”artifacts/mc” subdirectory=”emma” />

      <wangwangCCPlugin>

        <user nickname=” 文朗 ” />

        <user nickname=” 见田 ” />

        <user nickname=” 宝妮 ” />

        <user nickname=” 子柳 ” />

      </wangwangCCPlugin>

    </publishers>

  </project>

    第三步:修改 CruiseControl jsp 文件,将 EMMA 报告集成到 CruiseControl 的页面中。集成后的效果如下:

 

EMMA与CC集成  

    全部集成过程到此结束~~~

简易扫描工具快速开发

2009年4月10日

win grep:
简介摘自:http://gnuwin32.sourceforge.net/packages/grep.htm
Description
Grep searches one or more input files for lines containing a match to a specified pattern. By default, grep prints the matching lines.
感谢luoluo同学介绍的工具。

ps:直接下载的binary文件缺少好几个DLL下面这个是已经补充好直接能用的
grep-2.5.4-bin.rar

使用方法:

打开cmd进入grep工具所在目录

1

输入grep命令例如:grep -i -R -E “document/.write|innerHTML” D:/Work/javaprojests/et > et-dom.txt

grep就会去找D:/Work/javaprojests/et 下扫描所有文件中是否有包含document.write或者innerHTML的并生成结果et-dom.txt

至此我们知道了如何利用grep进行扫描,但是每次都这么敲命令有点累,我们用C#Win App包装下。

Win App包装

设计win App界面如下:

2

添加代码实现扫描:

1.新增Class scanJS添加调用Grep进行扫描的代码

private string CheckAll(string folderName, string fileName)
{
Process cmd = new Process();
cmd.StartInfo.FileName = “cmd.exe”;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.CreateNoWindow = false;
cmd.Start();
cmd.StandardInput.WriteLine(”grep -i -R -E -n –include=’*.vm|*.js’ /”document//.write|innerHTML /” ” + folderName + ” > ” + fileName);
cmd.StandardInput.WriteLine(”exit”);
string info = cmd.StandardOutput.ReadToEnd();
cmd.WaitForExit();
cmd.Close();
return info;
}

2. 在界面Check按钮Click事件中调用scanJS

if (!String.IsNullOrEmpty(this.textBoxFile.Text) && !String.IsNullOrEmpty(this.textBoxFolder.Text))
{
if (this.checkBoxDom.Checked)
{
this.richTextBox.Text = “Start to check:/r/n”;
scanJS sj = new scanJS();
this.richTextBox.AppendText(sj.check(this.textBoxFolder.Text, this.textBoxFile.Text));
this.richTextBox.Text += “/r/ncheck Finished!”;

}
}

至此我们完成了一个简易的扫描JS的工具。

3. 后期改进和缺陷

1)  如果对生成的txt文件报告不满意可再对txt进行解析整理成html文件。

2) grep虽然快但是也有缺陷,不能组合多种查询条件排除。(适合查询大量文件时使用效率高)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值