要收集 WSH 执行的结果,WSH 脚本必须在 WSH 测试的当前工作目录中生成称作 output.xml 的文件。 此目录中的所有文件都存储在数据库中,并可通过文件列表下载来执行测试。 当文件的扩展名在文件扩展名下定义以在项目区域的结果属性中忽略时,将从存储中排除文件。
脚本写入 WSH 标准输出的任何信息都将进入当前工作目录中的 log.txt 文本文件。 此文件存储在数据库中并且可以查看,因为它包括在测试执行的文件列表中。
以下示例显示如何从脚本打印日志信息:
WScript.Echo "This info will be written to the log.txt file"
output.xml 的 XML 结构以定义名为 TestItem 属性的元素 ResultElement 开头,此 TestItem 指定了 ResultElement 的名称。
ResultElement 必须包含名为 ErrorCount 的元素或名为 WarningCount 的元素,以及事件元素的列表。
ErrorCount 和 WarningCount 元素必须包含正数或零。 顶级 ResultElement 的 ErrorCount 和 WarningCount 用于评估成功条件,以确定测试是否成功或失败。 XML 文件可能包含 Silk Central GUI 中不可见的其他元素。 但是,output.xml 文件存储在数据库中并且可查看,因为它包括在执行测试的文件列表中。
事件元素表示 WSH 测试执行期间发生的事件。 消息和严重性显示在 Silk Central GUI 中测试执行的消息列表中。 事件元素必须包含消息和严重性元素。
严重性元素必须具有以下值之一:
您可以在结果文件中存储其他信息。 ResultElement 可能包含任何数量的子 ResultElement,因此可以轻松对信息分组。 子 ResultElement 使结果文件更易于读取。 由于与单元测试、JUnit 和 NUnit 有关的兼容性原因,ResultElement 可以命名为 TestSuite 或 Test。
ResultElement 可能包含以下其他元素:
事件元素可能包含详细信息元素的列表。
详细信息元素表示有关事件的详细信息。 它必须定义 TestName 元素和信息元素。 TestName 用于提供事件发生位置的详细信息。 信息元素保留有关事件的详细信息,例如堆栈跟踪。
<ResultElement TestItem="WshOutputTest">
  <ErrorCount>1</ErrorCount> 
  <WarningCount>1</WarningCount>
  <Incident>
    <Message>some unexpected result</Message>
    <Severity>Error</Severity>
    <Detail>
      <TestName>function main()</TestName>
      <Info>some additional info; eg. stacktrace</Info>
    </Detail>
  </Incident>
  <Incident>
    <Message>some warning message</Message>
    <Severity>Warning</Severity>
    <Detail>
      <TestName>function main()</TestName>
      <Info>some additional info; eg. stacktrace</Info>
    </Detail>
  </Incident>
</ResultElement> 以下脚本用于生成示例结果文件。 要尝试此脚本,请以 .js 扩展名保存。
function dumpOutput(dumpFile)
{
  dumpFile.WriteLine("<ResultElement TestItem=\"WshOutputTest\">");
  dumpFile.WriteLine("  <ErrorCount>1</ErrorCount>");
  dumpFile.WriteLine("  <WarningCount>1</WarningCount>");
	dumpFile.WriteLine("  <Incident>");
	dumpFile.WriteLine("    <Message>some unexpected result</Message>");
	dumpFile.WriteLine("    <Severity>Error</Severity>");
	dumpFile.WriteLine("    <Detail>");
	dumpFile.WriteLine("      <TestName>function main()</TestName>");
	dumpFile.WriteLine("      <Info>some additional info; eg. stacktrace</Info>");
	dumpFile.WriteLine("    </Detail>");
	dumpFile.WriteLine("  </Incident>");
	dumpFile.WriteLine("  <Incident>");
	dumpFile.WriteLine("    <Message>some warning message</Message>");
	dumpFile.WriteLine("    <Severity>Warning</Severity>");
	dumpFile.WriteLine("    <Detail>");
	dumpFile.WriteLine("      <TestName>function main()</TestName>");
	dumpFile.WriteLine("      <Info>some additional info; eg. stacktrace</Info>");
	dumpFile.WriteLine("    </Detail>");
	dumpFile.WriteLine("  </Incident>");
  dumpFile.WriteLine("</ResultElement>");
}
function main()
{
  var outFile;
  var fso;
  fso = WScript.CreateObject("Scripting.FileSystemObject");
  outFile = fso.CreateTextFile("output.xml", true, true); 
  outFile.WriteLine("<?xml version=\"1.0\" encoding=\"UTF-16\"?>");
  
  dumpOutput(outFile);
  outFile.Close();
  WScript.Echo("Test is completed");	
}
main();
WScript.Quit(0); 以下 Visual Basic 脚本也会生成示例结果文件,并将其另存为 Output.xml。 要尝试此脚本,请以 .vbs 扩展名保存。
WScript.Echo "starting"
Dim outFile
Dim errCnt
Dim warningCnt
outFile = "output.xml"
errCnt = 1 ' retrieve that from your test results
warningCnt = 1 ' retrieve that from your test results
Set FSO = CreateObject("Scripting.FileSystemObject")
Set oTX = FSO.OpenTextFile(outFile, 2, True, -1) ' args: file, 8=append/2=overwrite, create, ASCII
oTX.WriteLine("<?xml version=""1.0"" encoding=""UTF-16""?>") 
oTX.WriteLine("<ResultElement TestItem=""PerlTest"">")
oTX.WriteLine("  <ErrorCount>" & errCnt & "</ErrorCount>")
oTX.WriteLine("  <WarningCount>" & warningCnt & "</WarningCount>")
oTX.WriteLine("  <Incident>")
oTX.WriteLine("    <Message>some unexpected result</Message>")
oTX.WriteLine("    <Severity>Error</Severity>")
oTX.WriteLine("    <Detail>")
oTX.WriteLine("      <TestName>function main()</TestName>")
oTX.WriteLine("      <Info>some additional info; eg. stacktrace</Info>")
oTX.WriteLine("    </Detail>")
oTX.WriteLine("  </Incident>")
oTX.WriteLine("  <Incident>")
oTX.WriteLine("    <Message>some warning message</Message>")
oTX.WriteLine("    <Severity>Warning</Severity>")
oTX.WriteLine("    <Detail>")
oTX.WriteLine("      <TestName>function main()</TestName>")
oTX.WriteLine("      <Info>some additional info; eg. stacktrace</Info>")
oTX.WriteLine("    </Detail>")
oTX.WriteLine("  </Incident>")
oTX.WriteLine("</ResultElement>")