我的问题看起来很像this one,但被接受的答案与我的目标用法不符:
我想在url
文件中一劳永逸地设置initialize.feature
,以后再也不要设置它。换句话说,我不想使用以下相同的语句使每个功能文件变得混乱:
* url baseUrl
我的baseUrl
值是根据karate.env
设置的,例如https://localhost
适用于local
环境,http://prod.env.com
适用于prod
。它不会改变。
path
将在我们的功能文件中更改,因为我们测试了不同的端点。
我尝试了以下设置:
karate-config.js
中:config.baseUrl = 'https://localhost';
// ... code changing config.baseUrl based on karate.env == 'prod' or not
var result = karate.callSingle('classpath:utility/initialize.feature', config);
initialize.feature
中:@ignore
Feature:
Scenario: Initialize
* print baseUrl
* url baseUrl
我们可以看到在执行baseUrl
文件时正确打印了initialize.feature
。
但是此后在任何执行的功能中,都会出现以下错误:
some-test.feature:24 - url not set, please refer to the keyword documentation for 'url'
是否可以仅在我的url
文件中设置initialize.feature
,以后再不设置?
谢谢。
答案 0 :(得分:1)
不,您不能。在每个功能文件中,您至少必须执行一次* url baseUrl
,至少 次。造成这种情况的原因有很多-一种原因是可读性和可维护性,并且如果您查看"hello world example"-请注意,由于您遵循的是REST-ful模式,因此如何在第二次调用中省略url
。
由于您可以在* url baseUrl
中进行Background:
并继承所有其他Scenario
-继承-在实践中通常没关系,在现实生活中的API测试中,我们发现您确实需要在测试中切换URL(例如auth)。如果您对此非常有信心-可以考虑提出要求。 FWIW,这是2.5年以来第一次有人提出要求。