Переопределяющая переменная в вызываемой функции - PullRequest
1 голос
/ 13 мая 2019

Я использую каратэ для написания интеграционных тестов для REST API.Во всех тестовых сценариях я должен входить в систему, чтобы пользователи получали токен аутентификации для всех вызовов, связанных с REST API.Поэтому я хочу поместить логику входа в систему в отдельную функцию каратэ, чтобы мне не пришлось копировать и вставлять вызов API входа в систему для всех других сценариев.

Из доку я смог выяснить, каквызовите мой login.feature в другой функции (выход из системы, когда необходимо войти в систему).Я также могу передать имя пользователя и пароль вызываемому login.feature из моего вызывающего logout.feature.Но я также хочу, чтобы мой login.feature выполнялся сам по себе, поэтому я должен определить имя пользователя и пароль в login.feature.Но если я это сделаю, я не смогу переопределить эти переменные из вызывающей функции.

Если я запускаю logout.feature, как показано ниже, то login.feature не использует параметр электронной почты, который я предоставляюв logout.feature Если я удаляю переменную электронной почты из login.feature, она использует параметр из logout.feature, но тогда я не могу запустить login.feature самостоятельно.

Вызов выхода из системы.особенность:

Feature: Login/Logout Test

  Background:
    * url urlBase http://localhost:5000
    * def login = call read('classpath:ires/session/login.feature') {email: "user1@test.com", password: "test"}
    * def authToken = login.authToken

  Scenario: Testing logout via PUT

    Given path '/sessions/logout'
    Given param TOKEN = authToken
    And request {}
    When method PUT
    Then status 202

Вызывается login.feature:

Feature: Logs in the given user

  Background:
    * url urlBase http://localhost:5000
    * def email = "user2@test.com"
    * def password = "test"

  Scenario: Test login via POST

    Given path '/sessions/login'
    And request {email: '#(email)', password: '#(password)'}
    And print email
    When method post
    Then status 200
    And def authToken = response

1 Ответ

1 голос
/ 13 мая 2019

Мое предложение заключается в том, что вы можете создать login-caller.feature, который будет вызывать login.feature с соответствующим аргументом.Другим вариантом является глобальное определение email и password в karate-config.js.

. Я не рекомендую полагаться на неопределенные переменные, так как это приводит к проблемам с поддержкой в ​​долгосрочной перспективе, но вы можете сделать этовид условной проверки:

* def email = typeof email == 'undefined' ? 'user2@test.com' : email
...