当我的web service可以部署到IIS之后,想用Selenium写自动化测试,ruby语言。
写好测试文件后,希望在nant build脚本里写一个task让所有测试自动运行。
nant脚本如下:
<target name="all" description="run all automation tests"> <foreach item="File" in="${automation.tests.dir}" property="rbfile"> <echo message="${rbfile}"/> <exec program="${ruby.exe}" workingdir="${automation.tests.dir}" commandline="${rbfile}"/> </foreach> </target>
${automation.tests.dir}是存放test文件的地方;
${ruby.exe} 是ruby.exe的文件全路经,但如果已经注册了环境变量,文件名也可以;
但是问题就来了,运行这个task之前,需要先启动selenium-server,运行后需要关闭它。
运行selenium-server,不能在nant build脚本运行的控制台内,否则会hung住控制台不能继续运行。
那么,利用console的start启动独立的控制台来运行selenium-server。
<target name="all" description="run all automation tests"> <exec program="${automation.dir}start_selenuim_server.bat"/> <foreach item="File" in="${automation.tests.dir}" property="rbfile"> <echo message="${rbfile}"/> <exec program="ruby.exe" workingdir="${automation.tests.dir}" commandline="${rbfile}"/> </foreach> </target>
在start_selenuim_server.bat里写入:
start java -jar <fullpath>/selenium-server.jar
这样,启动selenium-server的问题解决了。
那么如何在nant build脚本里关闭这个由独立console进程运行的selenium-server?
在selenium.rb文件中,有shut_down_selenium_server函数。
该函数提供在client端请求server关闭的功能。
<target name="all" description="run all automation tests"> <exec program="${automation.dir}start_selenuim_server.bat"/> <foreach item="File" in="${automation.tests.dir}" property="rbfile"> <echo message="${rbfile}"/> <exec program="ruby.exe" workingdir="${automation.tests.dir}" commandline="${rbfile}"/> </foreach> <exec program="ruby.exe" workingdir="${automation.dir}" commandline="ShutDownServer.rb"/> </target>
在ShutDownServer.rb中,调用shut_down_selenium_server函数。
或者也可以利用Console直接kill process。
无论采取那种方式,在所有测试都通过的情况下,selenium-server可以正常关闭,但是当有测试失败,则server不能退出。