您的位置:首页 > 其它

【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就是一个很好的示例。

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

通过执行test的exit code来包装Status,返回给harness。

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

然后我们可以编写一个自己的TestScript,继承自Script,并使用invokeCommand()方法来执行命令。代码如下:

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;

}

}

定义了自己的test script后,也可以定义自己的Commands,只要继承抽象类com.sun.javatest.Command,实现run方法就可以了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: