Как извлечь значение из полезной нагрузки XML с помощью сценария Shell - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть исполняемый XML-файл, который имеет предопределенный формат и создается в рабочей области Jenkins.Я просто хочу проанализировать полезную нагрузку 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>

Приведенная выше полезная нагрузка, я должен прочитать состояние test-method, если это «FAIL», тоМне нужно получить значение "testId" из этого конкретного метода тестирования.Приведенная выше полезная нагрузка У меня есть 3 метода тестирования, только два из которых имеют статус Сбой. Мне нужно получить оба идентификатора теста и назначить переменную, как показано ниже

Ожидаемый результат:

  fetchResult = AS1-TC2,AS1-TC3

Мне просто нужно выбрать «testId» неудачных методов тестирования и присвоить его переменной с запятой, разделенной с помощью сценария оболочки.

Я пробовал строки ниже, но он не возвращает целые теги метода тестирования

   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">

Я хочу вернуть все <test-method> ... </test-method> для статуса = "FAIL"

Любые выводы ....

1 Ответ

0 голосов
/ 13 ноября 2018

Вы можете использовать следующую команду xmlstarlet и sed:

xmlstarlet sel -T -t -c "test-results/test-method[@status='FAIL']/params/param/value[contains(.,'testId')]" file | sed -n 's/.*testId=\([^,]\+\),.*/\1/p'

-T: необработанный тест (без узла XML).
-t: шаблон
-c: Xpathвыражение

[@status='FAIL'] является проверкой атрибута status.

value[contains(.,'testId')] проверяет, содержит ли узел value эту конкретную строку.

sed Команда извлекает искомую строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...