Каратэ - Наличие нескольких 'Когда в одном - PullRequest
0 голосов
/ 06 января 2019

У меня есть сценарий, в котором есть несколько шагов / необходимо выполнить операции REST для завершения одного процесса.

Каждая операция REST должна иметь авторизационные имя пользователя и пароль. Я предоставил это в Background сессии. Вот так выглядит моя нынешняя особенность.

Feature: Adding to cart

  Background: 
    * url 'https://soa-mp-rmsk-someurl.com'
    * header agent_uid = 'AUTO_TST'
    * configure ssl = true
    * header Authorization = call read('classpath:Project/JSFiles/auth.js') { username: 'ABC', password: '123' }
    * configure logPrettyResponse = true
    * configure logPrettyRequest = true

  Scenario: Find available mobiles
    Given path '/v1/available-mobiles'
    When method get
    Then status 200
    * def mobile = response.iPhoneXSMax

  # Add a mobile to cart
    Given path '/v1/mobiles/'+mobile+'/add
    And request {name: 'iPhoneXSMax'}
    When method put
    Then status 200

Теперь выдается ошибка, говорящая, что "faultstring": "Authentication challenge issued".

Я могу сгруппировать их в разные сценарии, чтобы они вызывали header authorization каждый раз, что приводит к успешному запуску; Я тоже это попробовал. Работает для меня. Но я не считаю хорошей практикой группировать эти шаги в разных сценариях, поскольку они буквально составляют один сценарий. Как я могу преодолеть эту ошибку? Или я должен пойти и распространять их в разных сценариях?

https://automationpanda.com/2018/02/03/are-gherkin-scenarios-with-multiple-when-then-pairs-okay/

EDIT-1 Вот как я пытался добавить заголовки конфигурации для деталей авторизации; Я не смог полностью понять это, не могли бы вы помочь?

headers.js

function fn() {
      var username = karate.get('username');
      var password = karate.get('password');
      if (username && password) {
        return { 
            Authorization: username + password
        };
      } else {
        return {};
      }
    }

И я назвал это в фоновом режиме вот так; но не сработало.

* configure headers = read('classpath:headers.js')
* def username = 'ABC'
* def password = '123'

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Сразу хочу сказать, что для EDIT-1 мне удалось получить решение. Вот как я написал свой файл headers.js, который имеет преобразование формата BASE64.

Пожалуйста, дайте мне знать, ребята, если я смогу улучшить его.

function fn() {
      var username = karate.get('username');
      var password = karate.get('password');

      if (username && password) {
      var temp = username + ':' + password;
      var Base64 = Java.type('java.util.Base64');
      var encoded = Base64.getEncoder().encodeToString(temp.bytes)
        return { 
            Authorization: 'Basic ' + encoded
        };
      } else {
        return {};
      }
    }
0 голосов
/ 06 января 2019

Я думаю, что вы полностью упустили тот факт, что для аутентификации на основе заголовков у каратэ есть глобальный вид хука - это то, что используют большинство команд. См. Документы для configure headers.

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