将@BeforeAll的结果传递给@Test中执行的所有功能文件或包含在执行上下文中

问题描述 投票:0回答:1

我们在测试运行器中设置了一个 @BeforeAll 方法,该方法在运行测试之前完成各种前置条件步骤,例如设置枚举变量、响应模式、登录身份验证等。这一切都运行良好,没有问题。

但是,当它移动到执行测试时,在 testParallel、Runner.path(feature list) 下,这些测试总是会被跳过。

19:22:56.411 [main] INFO  com.intuit.karate.Runner - karate.env is: 'dev'
19:22:56.744 [main] DEBUG com.intuit.karate.Suite - [config] classpath:karate-config.js
19:22:56.755 [main] INFO  com.intuit.karate.Suite - backed up existing 'target/karate-reports' dir to: target/karate-reports_1699060976753
19:22:56.756 [main] DEBUG com.intuit.karate.Suite - waiting for 2 features to complete
Karate version: 1.4.1 | env: dev
======================================================
elapsed:   0.35 | threads:   16 | thread time: 0.00 
features:     0 | skipped:    2 | efficiency: 0.00
scenarios:    0 | passed:     0 | failed: 0
======================================================
  1. 是否可以不在运行器中调用配置,因为它在 @BeforeAll 的
    Runner.runFeature("classpath:net/charter/" + serviceName + "/constants.feature", args, true);
    行中设置为 true?这不是问题,只是一个请求。
  2. 是否可以将结果从 @BeforeAll 方法传递到 @Test 方法,而无需单独编码每个值,因为这些值在服务之间发生变化?
  3. 是否也可以将这些值(例如身份验证令牌、env 和 baseurl 值)传递给 @AfterAll 调用
  4. 这是在 @BeforeAll 中运行的任何功能中获取输出的唯一方法,以使用 print 语句而不是
    karate.logger.debug('enumList is:  ', enumList);
    ,因为记录器似乎不提供任何输出。

背景:

  • 我们的配置对所有服务执行以下操作 - 确定环境、设置数据库连接、设置 url、设置标头中使用的全局变量
  • 我们的 @BeforeAll 调用完成服务执行所需的调用,例如基于发送的用户值进行身份验证,设置用于比较的枚举(在许多地方使用),为每个端点设置响应模式(用于比较结果)使用端点),进行其他可能需要的预先请求调用,例如获取用户列表、地址、账单信息等
karate
1个回答
0
投票

您关于

@BeforeAll
@Test
之间共享状态的问题是 Java / JUnit 特定问题,与空手道无关。一种可能的选择是使用 Java 单例,在
@BeforeAll
中初始化它,然后在您的空手道测试(或 karate-config.js)中您可以访问此单例,例如

* def Utils = Java.type('my.Utils`)
# the java getConfig() returns a Map
* def myConfig = Utils.getInstance().getConfig()

Runner.runFeature()
不建议用于运行空手道测试。我本以为
karate.callSingle()
自然地解决了你似乎想要在这里做的事情。任何其他要求都需要对空手道进行更改,并且可能此功能请求(似乎很少有团队想要)会产生影响:https://github.com/karatelabs/karate/issues/2235

© www.soinside.com 2019 - 2024. All rights reserved.