Karate 重写被调用功能中的变量

Karate 重写被调用功能中的变量,karate,Karate,我正在使用空手道为RESTAPI编写集成测试。在所有测试场景中,我都必须登录用户才能为所有与RESTAPI相关的调用获取身份验证令牌。因此,我想将登录逻辑放入一个单独的空手道功能中,这样我就不必将登录API调用复制并粘贴到所有其他场景中 从doku中,我可以知道如何在另一个功能中调用我的login.feature(注销,需要登录用户)。我还可以将用户名和密码从调用logout.feature传递给被调用的login.feature。但是我也希望我的login.feature可以自己执行,所以我必

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

从doku中,我可以知道如何在另一个功能中调用我的login.feature(注销,需要登录用户)。我还可以将用户名和密码从调用logout.feature传递给被调用的login.feature。但是我也希望我的login.feature可以自己执行,所以我必须在login.feature中定义用户名和密码。但是如果我这样做,我就不能从调用特性中重写这个变量

如果我像下面这样运行logout.feature,则login.feature不会使用我在logout.feature中提供的电子邮件参数。如果我从login.feature中删除电子邮件变量,则它会使用logout.feature中的参数,但我无法单独运行login.feature

正在调用logout.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

我的建议是,您可以创建一个
login caller.feature
,它将调用
login.feature
,并传递适当的参数。另一个选项是在
karate config.js
中全局定义
email
password

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

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

谢谢我现在有点喜欢条件检查变量;)但我看到它可能会在将来导致可维护性问题。