2014-07-02 2 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 я использую яваскрипт тег, но я не могу получить доступ количества «TestCase» с «TestSuite»

<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», чей отказ не существует, или файл с исправлением, используемый для каждого «testuite».

Я хотел бы показать:

[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/) для Ant. – CAustin

+0

@Rebse у вас есть решение этой проблемы? – stella06700

+0

@CAustin In build.xml Я использую тег javascript, но я не могу получить доступ к номеру «testcase» с «testsuite». Я не использую Xmltask. – stella06700

ответ

0

- EDIT, простое решение с 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, что вы мне помогли, и я благодарю вас :) Теперь я попробую чтобы понять механизм, потому что я должен написать свой отчет о стажировке и объяснить, как это работает. Чтобы решить эту проблему, я пытался использовать «switch case» on loop «for», но это не сработало Еще раз спасибо, шип в ноге. – stella06700

+0

Здравствуйте @Rebse, я хотел бы знать, какие методы мы можем использовать в атрибуте path тега param. В этом примере вы используете 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

Смежные вопросы