创建启动脚本

测试用例通常都是通过持续集成系统或者其他系统来自动化地执行. 这时通常需要有一个脚本来启动测试执行, 有可能还需要通过某种手段在结束后执行结果处理. 并且这些脚本在手动执行时也会非常有用, 特别是当有大量的命令行选项要设置或者准备整个测试环境的过程很复杂的时候.

在类UNIX系统中, shell脚本提供简单而强大的机制来创建自定义的启动脚本. Windows环境下的批处理文件也可以胜任, 不过功能限制较多且往往更加难懂. 一个平台无关的选择是使用Python或者其他高层次的编程语言. 不管选择何种语言, 都推荐使用长选项名称, 因为它们相对短选项名更加清晰易懂.

下面第一个例子中, 相同的web测试用例针对不同的浏览器分别执行, 并且在执行后将输出文件合并在一起. 使用shell脚本很容易实现, 实际上只要把所需的命令逐个列出即可:

  1. #!/bin/bash
  2. robot --variable BROWSER:Firefox --name Firefox --log none --report none --output out/fx.xml login
  3. robot --variable BROWSER:IE --name IE --log none --report none --output out/ie.xml login
  4. rebot --name Login --outputdir out --output login.xml out/fx.xml out/ie.xml

使用Windows批处理文件来实现上面相同的功能也不会很复杂. 重要的是记住在Windows系统中, robotrebot 命令都是通过批处理文件来实现的, 所以在另一个批处理文件中必须使用 call 来调用. 否则整个执行会在第一个批处理文件结束的时候终止.

  1. @echo offcall robot variable BROWSER:Firefox name Firefox log none report none output out\fx.xml logincall robot variable BROWSER:IE name IE log none report none output out\ie.xml logincall rebot name Login outputdir out output login.xml out\fx.xml out\ie.xml

下面的例子, 测试执行前要把 lib 目录下的jar文件放到 CLASSPATH 环境变量中. 在这些例子中, 启动脚本要求测试数据的路径以参数的形式提供. 同时, 虽然脚本中已经设置了不少选项, 仍然还可以自由地使用命令行选项. 所有这一切通过bash脚本实现起来都很直接:

  1. #!/bin/bash
  2.  
  3. cp=.
  4. for jar in lib/*.jar; do
  5. cp=$cp:$jar
  6. done
  7. export CLASSPATH=$cp
  8.  
  9. robot --ouputdir /tmp/logs --suitestatlevel 2 $*

而使用Windows批处理文件来实现则相对要麻烦一点. 困难的地方在于在For循环中设置包含JAR包的变量, 除非使用一个辅助函数, 否则无法完成.

  1. @echo off

  2. set CP=.for %%jar in (lib*.jar) do ( call :set_cp %%jar)set CLASSPATH=%CP%

  3. robot ouputdir c:\temp\logs suitestatlevel 2 %*

  4. goto :eof

  5. :: Helper for setting variables inside a for loop:set_cp set CP=%CP%;%1goto :eof

修改Java启动参数

使用Jython的时候有时需要修改Java的启动参数. 最常见的场景就是增大JVM最大内存数. 有两个简单的方法来配置JVM选项:

  • 设置 JYTHON_OPTS 环境变量. 可以是在操作系统层面修改以使其永久生效,也可以是在自定义启动脚本中设定, 则只在当次执行时有效.

  • 通过选项 -J 把所需的Java参数传递给Jython, 进而传给Java.这在直接 执行安装的 robot 模块 时特别简单:

  1. jython -J-Xmx1024m -m robot tests.robot