【发布时间】:2018-11-13 05:27:09
【问题描述】:
我有运行时 XML 文件,它具有预定义的格式,并且它是在 Jenkins 工作区中创建的。我只想使用 shell 脚本解析 XML 有效负载。
样本负载:
<test-results>
<test-method status="FAIL" name="flowVISA" duration-ms="843329" data-provider="533w43werwer" finished-at="2018-11-01T23:30:48Z">
<params>
<param index="0">
<value>
<![CDATA[ account_number:22988419 ]]>
</value>
</param>
<param index="1">
<value>
<![CDATA[ txn_id:6wdadfsad2134330L ]]>
</value>
</param>
<param index="2">
<value>
<![CDATA[ amount:1100 ]]>
</value>
</param>
<param index="3">
<value>
<![CDATA[ currency:USD ]]>
</value>
</param>
<param index="4">
<value>
<![CDATA[Id:11a09 ]]>
</value>
</param>
<param index="5">
<value>
<![CDATA[Name:Consumer [testId=AS1-TC2, description=Txn amount; wallet -Bal, BA,CC,VISA Credit; Consumer - CC;No other preference set]]]>
</value>
</param>
</params>
</test-method>
<test-method status="PASS" name="flowVISA" duration-ms="843329" data-provider="533w43werwer" finished-at="2018-11-01T23:30:48Z">
<params>
<param index="0">
<value>
<![CDATA[ account_number:22988419 ]]>
</value>
</param>
<param index="1">
<value>
<![CDATA[ txn_id:6wdadfsad2134330L ]]>
</value>
</param>
</params>
</test-method>
<test-method status="FAIL" name="flowVISA" duration-ms="843329" data-provider="533w43werwer" finished-at="2018-11-01T23:30:48Z">
<params>
<param index="0">
<value>
<![CDATA[ account_number:22988419 ]]>
</value>
</param>
<param index="1">
<value>
<![CDATA[Name:Consumer [testId=AS1-TC3, description=Txn amount; wallet -Bal, BA,CC,VISA Credit; Consumer - CC;No other preference set]]]>
</value>
</param>
</params>
</test-method>
</test-results>
上面的有效载荷我必须读取测试方法的状态,如果它是“FAIL”,那么我需要从那个特定的测试方法中获取“testId”值。上面的有效负载我有 3 个测试方法只有两个有状态失败我需要同时获取测试 ID 并分配给变量,如下所示
预期输出:
fetchResult = AS1-TC2,AS1-TC3
我只需要获取失败的测试方法的“testId”并将其分配给使用 shell 脚本以逗号分隔的变量。
我尝试了以下几行,但它没有返回整个测试方法标签
failedTC=`grep "test-method.*FAIL" results.xml | sed -e 's/^.*test-instance-name="(.*)-----.*/\1/'
输出:
<test-method status="FAIL" name="flowVISA" duration-ms="843329" data-provider="533w43werwer" finished-at="2018-11-01T23:30:48Z">
我想为 status="FAIL" 返回整个 <test-method> ... </test-method>
任何线索....
【问题讨论】:
-
您的文件不是有效的 XML。
-
这是一个很大的有效载荷。我不能在这里上传整个有效载荷。所以我只是在需要提取值的地方剪掉了。
-
我建议在您的示例中添加一个根节点。
-
当然。我也是这样做的。
-
我建议使用 XML/HTML 解析器(例如 xmlstarlet)。