为所有功能设置网址

时间:2019-07-08 10:15:34

标签: configuration karate

我的问题看起来很像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,以后再不设置?

谢谢。

1 个答案:

答案 0 :(得分:1)

不,您不能。在每个功能文件中,您至少必须执行一次* url baseUrl,至少 次。造成这种情况的原因有很多-一种原因是可读性和可维护性,并且如果您查看"hello world example"-请注意,由于您遵循的是REST-ful模式,因此如何在第二次调用中省略url

由于您可以在* url baseUrl中进行Background:并继承所有其他Scenario-继承-在实践中通常没关系,在现实生活中的API测试中,我们发现您确实需要在测试中切换URL(例如auth)。如果您对此非常有信心-可以考虑提出要求。 FWIW,这是2.5年以来第一次有人提出要求。