自动化与Selenium、JUnit、Ant
如果您已经了解上述技术或可以从上面的链接中阅读到相关信息,那么大部分技术都不需要或不需要介绍。而且今天的文章更多是关于我们如何使用所有这三个工具——selenium、ant和junit——来提出一个用于回归测试的自动化解决方案。
请参考上面的文档链接以获取有关任何使用工具的基本知识。我假设您知道如何在selenium中录制测试,如果不知道,请前往这里。
既然您知道如何录制和保存测试,只需将它们保存在您喜欢的任何目录结构中,只要它们遵循正确的包约定。例如com.foo.bar,这意味着文件应该在像com/foo/bar这样的目录中。按照惯例和逻辑,今天这就是TestCase通过ant脚本编译的方式。如果包不是正确的路径,则会发生编译时错误。
我运行整个过程的调用目标应该如下所示:
1
|
<target name="build_tests" depends="clean, compile, start-server, tests, stop-server" />
|
依赖目标的详细信息如下:
- clean:将清理整个构建目录等,以确保我们过去的任何内容都不会延续到未来。
- compile:应该编译
- start-server:应该启动selenium服务器。
- tests:应该运行selenium测试。
- stop-server:一旦所有测试执行完毕,应该停止selenium服务器。
如何从Ant启动selenium服务器?
1
2
3
4
5
6
7
|
<target name="start-server">
<java jar="lib/selenium-server.jar" fork="true" spawn="true">
<arg line="-timeout 30" />
<jvmarg value="-Dhttp.proxyHost=proxy.proxyhost.com" />
<jvmarg value="-Dhttp.proxyPort=44444" />
</java>
</target>
|
上面的目标只是获取类路径中的selenium-server.jar并从中运行主类。代理参数是可选的。
如何从Ant停止服务器?
1
2
3
4
5
6
|
<target name="stop-server">
<get taskname="selenium-shutdown"
src="http://localhost:4444/selenium-server/driver/?cmd=shutDown"
dest="result.txt" ignoreerrors="true" />
<echo taskname="selenium-shutdown" message="DGF Errors during shutdown are expected" />
</target>
|
selenium服务器默认在端口4444上启动,告诉它关闭很简单,src中的命令传递给它的cmd=shutDown,这应该只是关闭服务器。
执行测试用例?
Selenium测试用例是Junit测试用例,这就是它们在本教程中的处理方式。因此,你们中的一些人会非常熟悉ant目标Junit和junitreport。
然而,我将描述以下内容是如何工作的。以下目标将运行selenium测试并将摘要报告打印到${dir}。includes和excludes只是告诉目标在运行测试用例时要包含或排除哪些文件。这通常在您不希望包含某些测试用例或您的测试源和应用程序在同一目录中并且您只想包含像Test*.class这样的内容时完成。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<target name="tests" depends="compileonly" description="runs JUnit tests">
<echo message="running JUnit tests" />
<junit printsummary="on" dir=".." haltonfailure="off" haltonerror="off" timeout="${junit.timeout}" fork="on" maxmemory="512m" showoutput="true">
<formatter type="plain" usefile="false" />
<formatter type="xml" usefile="true" />
<batchtest todir="${testoutput}" filtertrace="on">
<fileset dir="${src}">
<includesfile name="${tests.include}" />
<excludesfile name="${tests.exclude}" />
</fileset>
</batchtest>
<classpath>
<pathelement path="${classes}" />
<pathelement path="${build.classpath}" />
</classpath>
</junit>
|
以下将获取上面行的格式化输出,并从中生成xml和html格式的报告,并将结果放在${reports}/index.html中。
一个示例Junit测试报告可能如下所示:
1
2
3
4
5
6
7
8
9
|
<echo message="running JUnit Reports" />
<junitreport todir="${reports}">
<fileset dir="${reportdir}">
<include name="Test*.xml" />
</fileset>
<report format="frames" todir="${reports}" />
</junitreport>
<echo message="To see your Junit results, please open ${reports}/index.html}" />
</target>
|
通常,您可以通过任何CI服务器(如Cruise Control)将所有这些添加到您的夜间构建中。此外,作为一般实践,您需要做的不仅仅是每晚执行此目标,具体取决于您的应用程序。例如清理资源中心,如数据库等。