2014-07-02 30 views
0

我有一个文件rapport.xml这样的:蚂蚁的JavaScript的getProperty XML

<?xml version="1.0"?> 
<testsuites name="COMPTES" tests="8" time="7" timestamp="2014-07-01T17-20-07" failures="8" errors="0"> 
    <testsuite name="100" tests="4" failures="4" errors="0" time="7"> 
     <testcase classname="Script.COMPTES.100" name="TEST1" time="1"> 
      <failure message="Not exist file or used" type="fileNotExist"> 
       File No matches 
      </failure> 
     </testcase> 
     <testcase classname="Script.COMPTES.100" name="TEST2" time="2"> 
      <failure message="Not exist file or used" type="fileUsed"> 
       Data set in use 
      </failure> 
     </testcase> 
     <testcase classname="Script.COMPTES.100" name="TEST3" time="3"> 
      <failure message="Not exist file or used" type="fileNotExist"> 
       File No matches 
      </failure> 
     </testcase> 
     <testcase classname="Script.COMPTES.100" name="TEST4" time="3"> 
      <failure message="File abended" type="abended"> 
       File abended 
      </failure> 
     </testcase> 
    </testsuite> 
    <testsuite name="120" tests="4" failures="4" errors="0" time="7"> 
     <testcase classname="Script.COMPTES.120" name="TEST1" time="1"> 
      <failure message="Not exist file or used" type="fileUsed"> 
       Data set in use 
      </failure> 
     </testcase> 
     <testcase classname="Script.COMPTES.120" name="TEST2" time="2"> 
      <failure message="Not exist file or used" type="fileNotExist"> 
       File No matches 
      </failure> 
     </testcase> 
     <testcase classname="Script.COMPTES.120" name="TEST3" time="3"> 
      <failure message="File abended" type="abended"> 
       File abended 
      </failure> 
     </testcase> 
     <testcase classname="Script.COMPTES.120" name="TEST4" time="3"> 
      <failure message="Not exist file or used" type="fileUsed"> 
       Data set in use 
      </failure> 
     </testcase>  
    </testsuite> 
</testsuites> 

在build.xml文件我用JavaScript代码,但我不能用“测试套件”访问“测试用例”的数量

<script language="javascript"> 
    <![CDATA[ 
    var testsuites = project.getProperty('testsuites.name'); 

     var testsuite = project.getProperty('testsuites.testsuite').split(','); 
     var testcase = testsuite[0].getProperty('testsuites.testsuite.testcase').split(','); 
     println('testcase ' + testcase.length); 

    project.setProperty('testsuites ', testsuites); 
    ]]> 
</script> 

我想检索失败不存在的“testcase”文件的数量,或每个“testsuite”使用的abended文件的数量。

我想显示:

[script] testsuite : 100 
[script] count file used : 1 
[script] count file no matches : 2 
[script] count file abended : 1 
[script] testsuite : 120 
[script] count file used : 2 
[script] count file no matches : 1 
[script] count file abended : 1 

你能帮我请,谢谢

+0

造成这种情况的最合适的工具很可能会[xmltask(HTTP:// www.oopsconsultancy.com/software/xmltask/)。 – CAustin

+0

@Rebse你有解决这个问题的办法吗? – stella06700

+0

@CAustin在build.xml中我使用javascript标记,但是我无法通过“testsuite”访问“testcase”的数量我不使用Xmltask – stella06700

回答

0

- 编辑,与xmltask直接的解决方案 -

当使用xmltask它是一块蛋糕:

<project> 

    <!-- Import XMLTask --> 
    <taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/> 

<xmltask source="rapport.xml"> 
    <call path="//testsuite"> 
    <param name="testsuite" path="@name"/> 
    <param name="fileused" path="count(testcase/failure[@type='fileUsed'])"/> 
    <param name="filenomatch" path="count(testcase/failure[@type='fileNotExist'])"/> 
    <param name="fileabended" path="count(testcase/failure[@type='abended'])"/> 
    <actions> 
    <echo> 
    testsuite : @{testsuite} 
    count file used : @{fileused} 
    count file no matches : @{filenomatch} 
    count file abended : @{fileabended}</echo> 
    </actions> 
    </call> 
</xmltask> 

</project> 

输出:

[echo]  testsuite : 100 
[echo]  count file used : 1 
[echo]  count file no matches : 2 
[echo]  count file abended : 1 
[echo]  testsuite : 120 
[echo]  count file used : 2 
[echo]  count file no matches : 1 
[echo]  count file abended : 1 

否则得到的复杂,使用脚本任务使用JavaScript快速射击:

<project> 

<xmlproperty file="rapport.xml" collapseattributes="true"/> 

<!-- 
<xmlproperty file="rapport.xml" collapseattributes="true"/> 
<echoproperties prefix="testsuites"/> 

[echoproperties] testsuites.errors=0 
[echoproperties] testsuites.failures=6 
[echoproperties] testsuites.name=COMPTES 
[echoproperties] testsuites.tests=6 
[echoproperties] testsuites.testsuite.errors=0,0 
[echoproperties] testsuites.testsuite.failures=6,6 
[echoproperties] testsuites.testsuite.name=100,120 
[echoproperties] testsuites.testsuite.testcase.classname=Script.COMPTES.100,Script.COMPTES.100,Script.COMPTES.100,Script.COMPTES.100,Script.COMPTES.120,Script.COMPTES.120,Script.COMPTES.120,Script.COMPTES.120 
[echoproperties] testsuites.testsuite.testcase.failure=File No matches,Data set in use,File No matches,File abended,Data set in use,File No matches,File abended,Data set in use 
[echoproperties] testsuites.testsuite.testcase.failure.message=Not exist file or used,Not exist file or used,Not exist file or used,File abended,Not exist file or used,Not exist file or used,File abended,Not exist file or used 
[echoproperties] testsuites.testsuite.testcase.failure.type=fileNotExist,fileUsed,fileNotExist,abended,fileUsed,fileNotExist,abended,fileUsed 
[echoproperties] testsuites.testsuite.testcase.name=TEST1,TEST2,TEST3,TEST4,TEST1,TEST2,TEST3,TEST4 
[echoproperties] testsuites.testsuite.testcase.time=1,2,3,3,1,2,3,3 
[echoproperties] testsuites.testsuite.tests=6,6 
[echoproperties] testsuites.testsuite.time=7,7 
[echoproperties] testsuites.time=7 
[echoproperties] testsuites.timestamp=2014-07-01T17-20-07 

--> 

<script language="javascript"> 
importPackage(java.util); 

var testsuites = project.getProperty('testsuites.testsuite.name').split(','); 

var testcases = project.getProperty('testsuites.testsuite.testcase.classname'); 
var testcaseclasses = new ArrayList(Arrays.asList(testcases.split(','))); 
// determine how many different TestClasses 
var testsunique = new ArrayList(new HashSet(testcaseclasses)); 
Collections.sort(testsunique); 

var failures = project.getProperty('testsuites.testsuite.testcase.failure.type'); 
var failuretypes = new ArrayList(Arrays.asList(failures.split(','))); 
// determine how many different Failuretypes 
var failuresunique = new ArrayList(new HashSet(failuretypes)); 
Collections.sort(failuresunique); 


for (var i=0; i &lt; testsuites.length; i++) { 
println('testsuite : ' + testsuites[i]); 
for (var j=0; j &lt; failuresunique.size(); j++) { 
    println ('count ' + failuresunique.get(j) + ' : ' + Collections.frequency(failuretypes.subList(0,Collections.frequency(testcaseclasses, testsunique.get(i))), failuresunique.get(j))); 
} 
failuretypes.remove(failuretypes.subList(0,Collections.frequency(testcaseclasses, testsunique.get(i))).clear()); 
} 
</script> 

</project> 

输出:

[script] testsuite : 100 
[script] count abended : 1 
[script] count fileNotExist : 2 
[script] count fileUsed : 1 
[script] testsuite : 120 
[script] count abended : 1 
[script] count fileNotExist : 1 
[script] count fileUsed : 2 
+0

谢谢@Rebse非常感谢你帮助我,并且我感谢你:) 现在我会尝试了解机制,因为我必须写我的实习报告,并解释它是如何工作 为了解决这个问题,我试图使用“开关案件”在循环“为”,但它没有工作 再次感谢你带我一个刺在脚下。 – stella06700

+0

你好@Rebse,我想知道我们可以在param标签的path属性中使用哪些方法。在这个例子中你使用count: stella06700

+0

XPath表达式=>类似于'SQL for xml',xmltask路径属性了解XPath 1.0,一些很好的xpath教程:http://www.zvon.org/xxl/XPathTutorial/General_ger/examples.html,http://www.w3schools.com/Xpath/ – Rebse

0

它看起来像有一个在你的JavaScript中的错误。 它应该是:

var testcase = testsuite[0].getProperty('testcase').split(','); 
+0

是的我在我的代码的表达中犯了一个错误 – stella06700