【JTharness4_4_0】【8.如何定义自己的Test Scripts】
2012-04-20 23:10
183 查看
test script的作用是执行一个test,将执行的详细信息记录到一个TestResult对象中,将测试结果Status(pass,fail,error)返回给JavaTest harness。test script必须能理解testfinder中生成的test description信息,必须能剖析configuration interview中Command字符串。testscript可以自己就执行脚本,也可以将执行脚本的工作下放到具体的Command(如ActiveAgentCommand、ExecStdTestSameJVMCmd、ExecStdTestOtherJVMCmd、JavaCompileCommand、PassiveAgentCommand、ProcessCommand、SerialAgentCommand)中。源码中的com.sun.javatest.lib.StdTestScript就是一个很好的示例。
通过执行test的exit code来包装Status,返回给harness。
然后我们可以编写一个自己的TestScript,继承自Script,并使用invokeCommand()方法来执行命令。代码如下:
定义了自己的test script后,也可以定义自己的Commands,只要继承抽象类com.sun.javatest.Command,实现run方法就可以了。
1. 一些简单的Test Scripts
1.1. test script中自己执行脚本
大部分的脚本都可以用java中的RunTime.exec来执行。代码如下:Runtime r = Runtime.getRuntime(); String[] cmd = {"java", "MyTest"}; String[] env = {"CLASSPATH", testsDir + "/classes"}; Process p = r.exec(cmd, env); // read output from test using // p.getInputStream() and p.getErrorStream() // (best done with a separate thread for each stream) int rc = p.waitFor(); Status s = (rc == 0 ? Status.passed("OK") : Status.failed("process exited with return code " + rc); // s contains result status from executing command |
1.2. 下放到Command中执行脚本
在harness源码中有个类com.sun.javatest.lib.ProcessCommand.它在同一台机器上新开一个Process执行脚本。所以在testscript中也可以new一个ProcessCommand。让ProcessCommand新开完成执行脚本的工作。在test script中调用的代码如下所示:String[] args = {"CLASSPATH=" + testsDir + "/classes", "java", "MyTest"}; PrintWriter out1 = ... // create error message stream PrintWriter out2 = ... // create output message stream Command cmd = new ProcessCommand(); Status s = cmd.run(args, out1, out2); // output from command will be written automatically to // the out1 and out2 streams // s contains result status from executing command |
2. 编写自己的Test Script
通过command templates可以创建自定义的命令。例如我们在自定义的interview中创建了下面一个command:command.testExecute=com.sun.javatest.lib.ProcessCommand C:\JDK\bin\java.exe CLASSPATH=$testSuiteRootDir\classes $testExecuteClass $testExecuteArgs |
import com.sun.javatest.*; class MyScript extends Script { public Status run(String[] args, TestDescription td, TestEnvironment env) { ... // Extract values from the test description String executeClass = td.getParameter("executeClass"); String executeArgs = td.getParameter("executeArgs"); ... // Set variables in the template env.put("testExecuteClass", executeClass); env.put("testExecuteArgs", executeArgs); // Invoke the command Status s = invokeCommand("testExecute"); ... return s; } } |
相关文章推荐
- 【JTharness4_4_0】【6.如何定义自己的Interview】
- 【JTharness4_4_0】【5.如何定义自己的Finder】
- android如何使用自己定义JNI接口,以及NDK环境建设和使用的工具。
- [MSSQL] 如何自己定义函数(返回多变量)
- rcp(插件开发) 如何查找自己定义的扩展点
- 请教:MTK android 如何定义自己的模块宏
- LQ-300K在Windows 2000和Windows XP操作系统中如何自定义纸张?为何有时看不到自己定义的纸张?
- Android 如何自己定义控件的样式 Shape
- 如何将自己的实体类封装到一个list中,定义自己一系列的方法
- 如何在应用中发送自己定义的广播Broadcast
- 自定义View如何定义和使用自己的属性
- 在xml中如何引用自己定义的schema文件?
- 如何定义自己的异常类
- 【cocos2dx】如何创建自己定义的精灵类Sprite
- 如何定义自己的线程函数与第三方系统兼容
- VC++中ID是如何分配的,如果自己定义一个ID号,系统还会不会再分配与此相同的ID
- rcp(插件开发) 如何查找自己定义的扩展点
- 如何定义一个自己的可复用的JS文件
- 如何定义自己的EL表达式
- 如何制定tomcat部署时自己定义的docBase路径