空手道 - 模拟服务器功能使用背景

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

我正在测试一个困难的微服务,它与 10 多个下游服务交互。存在很多逻辑和排列,因此尝试提出自动化解决方案是很棘手的。我正在尝试摆脱当前的黄瓜/java和模板wiremock解决方案,因为我觉得它过于复杂,限制了黑盒覆盖范围。

我之前使用过模拟服务器,我发现我无法在后台设置常量变量,这些常量变量可以用于每个功能,或者在使用场景本身写入该常量时被覆盖。我知道模拟服务器中不允许场景大纲,我希望在后台设置常量以节省空间,在不同的场景中一遍又一遍地复制相同的常量。

我做错了什么吗?这样的事情可能吗? 我正在使用空手道1.4.0

mocking netty karate
2个回答
0
投票

“我希望在后台设置常量,以节省空间,在不同的场景中一遍又一遍地重复相同的常量。”

您可以在 karate.config.js 中设置所有常量,然后这些常量可在测试套件中全局使用。请参阅此处的文档:https://github.com/intuit/karate#configuration

另一个选项是在单独的功能文件中设置所有常量,然后从需要使用常量的功能中调用/读取常量功能文件。

创建一个名为

constants.feature

的常量特征文件
def constValue = "constant"

现在您可以在后台调用该功能

* call read(constants.feature)

并像这样访问它们

* match constValue == "constant"

需要注意的几件事是

  • 如果在后台调用,这些值将在每个场景中重新初始化 - 您可以使用 callonce 挂钩来避免这种行为 - callonce

或者在用场景本身写入该常量时被覆盖。

  • 如果需要,您可以使用 karate.set 覆盖常量值,但请注意,您不应该期望从一个场景到下一个场景都有相同的变量。每个场景都应该可以单独执行,而不依赖于任何其他场景。

0
投票

我应该更仔细地看一下笔记 它清楚地说明了背景(这在逻辑上是有意义的)在测试前设置了执行,但在每个场景之前都没有执行。

我为解决问题所做的只是创建一个标准模拟响应,用于公共数据返回。为了进行一些细微的调整,我创建了一个可配置的模拟响应,然后用该特定模拟场景中定义的值覆盖该响应。

我还没有研究 js(空手道)模拟功能

有兴趣的请看下文

`Scenario: karate.request.header('uuid') == '9a19-b4f4871f5289'
* def NAME1_NBR = "122979"
* def NAME2_NBR = ""
* def response = read('./mockResponses/response_configurable.json')
* print response`

`Scenario: pathMatches('/cypress/x/link')
* def response = read('./mockResponses/response_standard.json')
* print response`

`Scenario: pathMatches('/xpress/r/servicelink/v1.0.0/30/uta')
* def response = read('./mockResponses/uta/utaResponse.json')`
© www.soinside.com 2019 - 2024. All rights reserved.