被调用要素中的覆盖变量

时间:2019-05-13 11:37:30

标签: karate

我正在使用空手道为REST API编写集成测试。在所有测试方案中,我必须登录用户才能获得与REST API相关的所有调用的身份验证令牌。因此,我想将登录逻辑放入单独的空手道功能中,因此不必将登录API调用复制并粘贴到所有其他方案中。

从doku​​中,我能够弄清楚如何使用另一种功能(注销,需要登录用户)调用我的login.feature。我还可以将用户名和密码从我的调用logout.feature传递给被调用的login.feature。但是我也希望我的login.feature本身可以执行,因此我必须在login.feature中定义用户名和密码。但是,如果这样做,我将无法从调用功能中覆盖此变量。

如果我按如下所示运行logout.feature,则login.feature不使用我在logout.feature中提供的email参数。如果我从login.feature中删除email变量,则它使用了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 个答案:

答案 0 :(得分:1)

我的建议是,您可以创建一个login-caller.feature,并通过适当的参数调用login.feature。另一种选择是在email中全局定义passwordkarate-config.js

我不建议依赖未定义的变量,因为从长远来看,它会导致可维护性问题,但是您可以执行这种条件检查:

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