Как менять xml каждый раз при запуске тестов Taurus?

У меня есть следующий yaml для тестов Taurus:

- url: 'someURL'
    method: POST
    label: 'SomeLabel'
    headers:
     Content-Type: "application/xml"
     Authorization: "auth"
     remote_user: "someUser"
    body-file: './requests/some.xml'
    assert:
      - contains:
        - 200
        subject: http-code
        regexp: true
    assert-xpath:
      - xpath: "//response//someId[.='00001']"

Поэтому, когда я запускаю этот тест, возвращается someId. Идентификатор возвращается в соответствии с данными в файле some.xml. Недавно наше требование заключалось в том, чтобы некоторые идентификаторы возвращались в соответствии с тем, если данные видны в предыдущих запросах, тогда некоторые идентификаторы изменятся, чего я не хочу. Я хочу, чтобы каждый раз, когда тесты запускают одно поле в xml, оно менялось так, как раньше не было, есть ли что-то в Taurus для выполнения этого требования.


person Saurabh Prajapati    schedule 02.01.2018    source источник


Ответы (1)


Если вам нужно извлечь данные из файла до выполнения запроса, вы можете добавить дополнительный запрос HTTP и используйте файловый протокол, чтобы разрешить Extractor XPath для извлечения "интересного" значения из XML, поэтому вы сможете повторно использовать его позже, например, план тестирования Taurus, демонстрирующий подход, будет выглядеть примерно так:

scenarios:
  get-value-from-xml:
    requests:
    - url: file:///path/to/requests/some.xml
      extract-xpath:
        someid: //response//someId

execution:
- scenario: get-value-from-xml

Вы сможете ссылаться на извлеченное значение как ${someid}, где это необходимо.

Дополнительные сведения см. в разделе Taurus JMeter Executor: запросы.


Если вам нужно изменить файл, вы можете сделать это с помощью блока JSR223, см. ниже пример для деталей:

scenarios:
  replace-value-in-xml:
    requests:
    - url: http://example.com
      jsr223:
      - language: groovy
        script-text: 'new File("/path/to/requests/some.xml").text = new File("/path/to/requests/some.xml").text.replace("oldId","newId")'
        execute: before
execution:
  - scenario: replace-value-in-xml
person Dmitri T    schedule 02.01.2018
comment
Я хотел изменить поле someID в xml каждый раз, когда выполняются тесты, но мне это больше не нужно из-за некоторых изменений требований. - person Saurabh Prajapati; 02.01.2018
comment
Вы можете сделать это с помощью блоков JSR223 и Язык Groovy, подробности см. в обновлении под горизонтальной линией. - person Dmitri T; 02.01.2018