并行测试支持
在 Web UI 自动化测试中,执行效率是非常重要的,尤其是在测试脚本比较多的情况下。所以我们有必要支持并行化测试,并行化测试需要两个条件:
- 在运行测试用例端,需要支持并行运行。例如,写一个多线程来支持同时运行多个测试用例
- 测试用例之间,需要减除在并行运行时的依赖关系。例如,使用不同的用户,以免发生测试冲突
- 在 Selenium Server 端,要能够同时打开多个浏览器窗口,并使得各个浏览器窗口之间的测试不受干扰,各自运行
对于条件 1,我们可以自己写一个多线程来支持并行运行,支持并行的自动化测试,或者使用 JUnit 或者 TestNG;
对于条件 2,我们在编测试用户脚本的时候,需要考虑到在在并行测试的时候可能存在的测试冲突,比如写日志,测试用户等等,可以参考文章(用 STAF+Selenium 实现并行的测试化框架,来源: );
而对于条件 3,我们需要借助 Selenium Grid。利用 Selenium Grid,我们可以很方便的同时在多台测试机器上和异构环境中并行地运行多个测试实例以加快 Web-app 的测试。
Selenium RC 的并行测试支持
在 Selenium 时代,我们使用的 Selenium Grid 是一个单独的项目( )。Selenium Grid 的机制是启动一个 hub,然后启动多个 Selenium RC 注册到 hub 上,当测试请求到 hub 时,hub 会将测试分发给 Selenium RC, Selenium RC 会实际的启动一个浏览器完成测试。在这笔者们对它的使用不再做过多的描述,只是想分享一个之前在测试项目中遇到的问题。我们知道,有些情况下一些软件缺陷可能发生在同一个浏览器的不同操作系统环境上,或者是测试需要在特定的浏览器版本上进行,那我们在使用 Selenium Grid 的情况下,如何能够确认测试是运行在什么指定的环境上呢?在我们的项目里面是通过更改配置文件 grid_configuration.xml 来实现的,例如我们有 Win7、WinXP 以及 Linux,上面分别装有 Firefox17 或者 Firefox18,那我们可以使用下面的配置信息:
清单 6. 自定制的 Selenium Grid 配置文件1
2
3
4
5
6
7
8
9
10
11
| hub:
port: 4444
remoteControlPollingIntervalInSeconds: 180
sessionMaxIdleTimeInSeconds: 300
environments:
- name: "Firefox 17 on Win7"
browser: "*firefox"
- name: "Firefox 17 on WinXP"
browser: "*firefox"
- name: "Firefox 18 on Linux"
browser: "*firefox"
|
这样我们在三台需要注册 Selenium RC 的机器上运行下列命令并指定相应的参数:
1
2
| ant -Dport=<port> -Dhost=<hostname> -DhubURL=<hub url>\
-Denvironment="Firefox 17 on Win7" launch-remote-control
|
其中,-Dport 是指定 Selenium RC 的端口号,-DHost 指定 Selenium RC 所在的机器的主机名,-DhubURL 指定 hub 的 URL,-Denvironment 表示注册的 Selenium RC 的浏览器,在这里我们可以替换成相应的浏览器、版本已经操作系统类型。完成注册之后,在 Selenium Grid 的控制台中可以看到可用的 Selenium RC:
图 3. 使用自定制配置文件的 Selenium Grid 控制台最后,我们在代码中指定要测试的环境,hub 就可以将测试转发到相应的环境上去运行,这样我们就可以灵活的按照测试需要在预期的环境上面完成测试。 |