利用Selenium集成TestLink做自动化测试

再牛逼的CI环境,都不能测试出逻辑上的问题(连CI环境都没有的,这边就不说了)。最终的问题还是反映在浏览器上。

作为一个程序员,最让我不能接受的是,程序员要争取一些时间是那么的困难,而测试要时间是那么容易。我们把大量的时间花费在毫无意义的回归测试上,而且每次迭代都要回归。

吐槽一下,程序员是创造性的人员,而测试是检查错误的。各位有没有发现开发的时间和测试的时间是差不多的???甚至测试的时间远大于开发的时间。。。什么狗屁,明显是测试没能力。

 

 

我们希望的样子

selenium来操作浏览器,然后把测试结果报告给testlink,在testlink上查看测试结果。

执行一条命令,执行所有的testcase,然后可以去testLink上查看报告。

 

Selenium是浏览器模拟器,可以通过脚本来实现对浏览器的操作。

Testlink是测试管理软件,可以负责test case的管理和report的管理。

 

 

当然,seleniumtestlink也都有自己的弱点。

Selenium的弱点在于,啥都要自己做,除了做操作浏览器的,还要testcase的管理,每次test执行的配置,居然还要做测试报告。实在是娘西皮。。。。

Testlink的弱点在于,testlink虽然有testcase的管理,但是这里的testcase都是文档,而不是自动化执行的脚本。虽然按照testlinkroadmap来看,2.0以后的testlink会越来越多的支持自动化测试,testlink官方也并没有说要怎么来支持自动化测试。

 

两者的结合可以很好的弥补各自的短处,很完美的配合。

 

下面介绍一下,我的实现思路

利用testlink的导出功能,导出test plan所有的test case,当然,这些test case都是文本,是不能执行的。但是导出的xml里面包含了所希望被执行的testcase,可以通过testlink导出的xml,来指导测试引擎,最后由测试引擎来调用selenium,调用浏览器来执行操作。当测试结束的时候,调用testlinkxml-rpc接口,把绑定运行的测试结果输入到testlink,然后就能在testlinkreport界面上,看到执行结果了。

 

看上去很不错的解决方法。。。。

但是xml和测试引擎需要数据绑定,把testlink管理的testcase和测试引擎管理的testcase绑定起来。在我的实现里面,是使用的testcasename来作为绑定依据的,所以一定要让testlink中的testcase的名称和测试引擎管理的testcase一致。

 

附件为我写的一个简单的测试执行引擎。

就是按照上面的思路实现的。

 

 

如何使用我的程序

1.打开testlink的远程调用

2.新建一个远程访问用户,在数据库中手动修改script_key字段,该字段是远程调用testlink的时候,用户的识别字段,对应到程序中的配置为dev_key

 

testlink中存在一个testcasetestcase的命名请用“googletest”,大小写区分。。。。

testlink中,导出test plan,得到一个xml

把这个xml放到classpath路径下面

 

修改Main类的静态变量PLAN_FILE设置为xml的路径,运行Main类,就开始自动执行xml中的testcase了。

 

可执行testcase的管理是在application.xml里面,testCaseFactory管理的所有的可执行testcase,通过testcase的名称关联。

 

程序认为执行失败的标识是执行过程抛出异常,并且会把异常的message作为note上传到testlink,同时上传已经打开页面的数据截图。方便让用户看到这个失败的testcase到底出了什么错。

 

程序中testlink.propertiestestlink的配置

Remote_server

Testlink远程调用的地址,一般只要换ip和端口就可以

Dev_key

远程调用testlink的时候,被testlink所识别的用户字段,需要手动修改User表中的script_key字段

browserType

Selenium使用的浏览器类型,如果不能识别,就是用HtmlUnit无界面的方式来做测试,这个模式下面不能截图

结果分析

这样只是一个临时性的方法,实现了selenium和testlink的集成,可以做自动化测试

但是有一些硬伤是不能解决的,在正式引入项目前,必须要考虑到

1.testlink的testcase执行状态,不能被赋予NOT RUN,也就是说,一个testcase开是绑定到testplan以后,并且被执行,当解除绑定后,这个testcase应该不被执行,由于testlink的执行状态不能设置NOT RUN,所以这个状态不能设置到testlink上,在report页面上看到的结果都是先前执行的结果

2.测试数据的绑定。脚本化的testcase所用到的数据,应该和sql绑定。在每次执行testcase的时候,应该对数据库进行初始化。但是在我的测试引擎里面,怎么做都是不合适的。。。这边有考虑欠妥的地方

最后,大家要是有时间,访问一下我的产品www.groob.net

帮我增加点人气

目前,产品开放试用版下载,请访问http://www.iteye.com/topic/1122520

由于iteye不能看到我上传的附件,可以使用我的网盘下载

http://163.fm/DpvF9mW 提取码:grOBiDGU

或者

http://www.rayfile.com/zh-cn/files/dba18c30-8445-11e1-ab55-0015c55db73d/

http://www.kuaipan.com.cn/file/id_48764891175059459.htm

猜你喜欢

转载自senvon.iteye.com/blog/1484051