Configuration 为所有功能设置url

Configuration 为所有功能设置url,configuration,karate,Configuration,Karate,我的问题看起来很像,但公认的答案与我的目标用法不符: 我想在initialize.feature文件中一次性设置url,以后再也不设置它。换言之,我不想用以下相同的语句将每个功能文件都弄乱: * url baseUrl 我的baseUrl值是基于karate.env设置的,例如https://localhost适用于本地环境和http://prod.env.com用于prod。它不会改变 路径将在功能文件中更改,因为我们测试不同的端点 我尝试了以下设置: 在空手道配置.js中: 在初始化

我的问题看起来很像,但公认的答案与我的目标用法不符:

我想在
initialize.feature
文件中一次性设置
url
,以后再也不设置它。换言之,我不想用以下相同的语句将每个功能文件都弄乱:

* url baseUrl
我的
baseUrl
值是基于
karate.env
设置的,例如
https://localhost
适用于
本地
环境和
http://prod.env.com
用于
prod
。它不会改变

路径
将在功能文件中更改,因为我们测试不同的端点

我尝试了以下设置:

  • 空手道配置.js
    中:
  • 初始化功能中
我们可以看到执行
initialize.feature
文件时正确打印了
baseUrl

但在随后执行的任何功能中,我都会得到以下错误:

some-test.feature:24 - url not set, please refer to the keyword documentation for 'url'
是否可以只在我的
initialize.feature
文件中设置
url
,以后再也不能设置


谢谢。

不,你不能。您必须在每个功能文件中至少执行一次
*url baseUrl
。这有多种原因-其中之一是可读性和可维护性,如果您查看-请注意,您可以在第二次调用中忽略
url
,因为您遵循的是剩余的模式


由于您可以在
后台执行
*url baseUrl
,并继承所有其他
场景
-s-这在实践中通常是正常的,并且在实际的API测试中,我们看到您确实需要在测试中切换url-s(例如,对于auth)。如果你对此感到非常强烈-你可以考虑一个拉动请求。FWIW这是2.5年来第一次有人要求这样做。

好的,我明白了,谢谢。在我看来,我们应该能够像在一般编程中一样将常见的事情分解成因素,这是很自然的。@SimonBudin空手道在幕后使用“构建器模式”。在“触发”HTTP请求之前,您需要“设置”一些内容。
url
只是其中之一。我已经提到,您可以在
背景中对每个功能执行
url
一次。
@ignore
Feature:

  Scenario: Initialize
      * print baseUrl
      * url baseUrl
some-test.feature:24 - url not set, please refer to the keyword documentation for 'url'