Повтор API-вызовов по каратэ - PullRequest
1 голос
/ 27 июня 2019

Мы используем каратэ для внутреннего тестирования микросервиса.Я хотел бы иметь возможность делать N обращений к бэкэнд-API, где N настраивается как число без необходимости делать некрасивые вещи.

Это был мой первый подход:

    Given url baseUrl
    And headers HEADERS
    When method get
    Then status 200

    Given url baseUrl
    And headers HEADERS
    When method get
    Then status 200

    Given url baseUrl
    And headers HEADERS
    When method get
    Then status 200

(Просто повторение вызова) Это работает, но, очевидно, не масштабируется (представьте 1000 из них).

Следующий подход был немного лучше - я поместил вызов в отдельную функцию и использовал https://github.com/intuit/karate#data-driven-features подход:

    * table jwts
      | headers |
      | HEADERS |
      | HEADERS |
      | HEADERS |
      | HEADERS |
      | HEADERS |

    * def result = call read('call-once.feature') jwts

Чуть лучше, но все еще не масштабируется.Мы также попробовали варианты karate.repeat(), которые кажутся наиболее естественным подходом, но имели проблемы с синтаксисом.Ни в одном из примеров, которые я смог найти, не было вызова API внутри for-each.

* def callFunction = function (HEADERS) { read('call-putaway-once.feature'); { HEADERS: '#(HEADERS)'} }
* def result = karate.repeat(5, callFunction)

Но я не смог получить ни одного варианта этой работы.

Может кто-нибудь привести примеркак повторить одинаковые точные линии каратэ N раз?Я действительно ищу что-то вроде:

for (int i = 0; i < numTimes; i++) {
    Given url baseUrl
    And headers HEADERS
    When method get
    Then status 200
}

(или функционально эквивалентный).

Спасибо!

Ответы [ 2 ]

1 голос
/ 28 июня 2019

Вот, пожалуйста.Во-первых, второй called.feature:

@ignore
Feature:

Scenario:
Given url 'http://httpbin.org'
And path 'headers'
And header X-Karate = count
When method get
Then status 200

А теперь вы можете сделать это в своей первой функции:

* def fun = function(x){ return { count: x } }
* def data = karate.repeat(5, fun)
* call read('called.feature') data

PS, кстати, найдите в readme «опрос», тампример вызова API в цикле: polling.feature

0 голосов
/ 28 июня 2019

Карате почти есть возможность сделать это: retry until.

Эта функция не повторяет "n" раз, но повторяется до тех пор, пока условие не будет проверено Пример здесь: polling.feature

Для простого запроса это выглядит так:

Given url baseUrl
And headers HEADERS
And retry until responseStatus == 200
When method get
...