Как менять xml каждый раз, когда запускаются тесты Taurus?
У меня есть следующие yaml для тестов Тельца:
- 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']"
Поэтому, когда я запускаю эти тесты, возвращаются некоторые идентификаторы. Идентификатор возвращается в соответствии с данными в some.xml. В последнее время наше требование было возвращать someIds в соответствии с тем, если данные будут видны в предыдущих запросах, то некоторые идентификаторы будут изменены, что мне не нужно. Я хочу, чтобы всякий раз, когда тесты запускали одно поле в xml, менялось так, как не было раньше, есть ли что-то в Тельце, чтобы выполнить это требование.
1 ответ
Если вам нужно извлечь данные из файла до запуска запроса, вы можете добавить дополнительный сэмплер HTTP-запроса и использовать файловый протокол, чтобы XPath Extractor мог извлекать "интересное" значение из XML, чтобы вы могли использовать его позже Пример плана испытаний Тельца, демонстрирующий подход, будет выглядеть примерно так:
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