在功能文件中使用karate-config参数 [英] Using karate-config parameters in a feature file
问题描述
空手道标头示例没有显示如何访问baseUrl
以外的配置值.当我切换环境时(作为运行命令的一部分传入-Dkarate.env=qual
),然后正确设置了baseUrl
.
The karate header examples do not show how to access config values other than baseUrl
. When I switch environments (passing in -Dkarate.env=qual
as part of the run command) then baseUrl
is set correctly.
问题是,我想使用其他配置值如此处所示,但是当我运行时测试,它无法正确访问config.ApiKey
.相反,我得到了这个错误
The problem is, I want to use other config values as shown here but when I run the test, it fails to access config.ApiKey
correctly. Instead I get this error
html report:
file:/C:/bitbucket/karate-checkdigit-api/target/surefire-reports/TEST-features.checkdigitapi.VA.html
Tests run: 250, Failures: 0, Errors: 50, Skipped: 175, Time elapsed: 4.112 sec <<< FAILURE!
* def secretKey = config.apiKey(| XYZ | 2110974841 | 204 | Valid |) Time elapsed: 0.005 sec <<< ERROR!
java.lang.RuntimeException: no variable found with name: config
at com.intuit.karate.Script.getValuebyName(Script.java:323)
at com.intuit.karate.Script.evalJsonPathOnVarByName(Script.java:378)
at com.intuit.karate.Script.eval(Script.java:309)
at com.intuit.karate.Script.eval(Script.java:194)
at com.intuit.karate.Script.assign(Script.java:656)
at com.intuit.karate.Script.assign(Script.java:587)
at com.intuit.karate.StepDefs.def(StepDefs.java:265)
at ✽.* def secretKey = config.apiKey(features/checkdigitapi/XYZ.feature:6)
我的.feature
文件和karate-config.js
在下面.
@regression
Feature: Checkdigit Algorithm API
Background:
* url baseUrl
* def secretKey = config.apiKey
* configure ssl = true
Scenario Outline: Testing XYZ algorithm
* configure headers = { KeyId: secretKey, Accept: 'application/json' }
Given path 'headers'
And param url = baseUrl
And params { customerId: '<custcode>', algoId: '<algo>' }
When method get
Then status <val>
Examples:
| algo | custcode | val | comment |
| XYZ | 2110974841 | 204 | Valid |
| XYZ | 7790011614 | 204 | Valid |
| XYZ | 5580015174 | 204 | Valid |
| XYZ | 2110974840 | 400 | expected check digit 1 |
| XYZ | 211097484 | 400 | not 10 digits |
| XYZ | 211097484x | 400 | not numeric |
karate-config.js
function() {
//set up runtime variables based on environment
//get system property 'karate.env'
var env = karate.env;
if (!env) { env = 'dev'; } // default when karate.env not set
// base config
var config = {
env: env,
baseUrl: 'https://localapi.abc123.example.com/api/v1/validate/customerid',
apiKey: ''
}
//switch environment
if (env == 'dev') {
config.baseUrl = 'https://devapi.abc123.example.com/api/v1/validate/customerid';
config.apiKey = 'fake-1ba403ca8938176f3a62de6d30cfb8e';
}
else if (env == 'qual') { //Pre-production environment settings
config.baseUrl = 'https://qualapi.abc123.example.com/api/v1/validate/customerid';
config.apiKey = 'fake-d5de2eb8c0920537f5488f6535c139f2';
}
karate.log('karate.env =', karate.env);
karate.log('config.baseUrl =', config.baseUrl);
karate.log('config.apiKey =', config.apiKey);
return config;
}
(这里有类似的问题,使用单独的headers.js
: https://github.com/intuit/karate/issues/94 )
(similar issue here, using a separate headers.js
: https://github.com/intuit/karate/issues/94)
推荐答案
请记住,karate-config.js
返回的JSON对象中所有在 之内的键都将作为变量注入,而没有其他注入.因此,您将不能参考config
,但是您一定可以参考apiKey
.
Keep in mind that all the keys within the JSON object returned by karate-config.js
will be injected as variables, and nothing else. So you will not be able to refer to config
, but you will certainly be able to refer to apiKey
.
我认为,如果您进行了简单的更改,事情就会开始起作用:
I think if you make this simple change, things will start working:
* def secretKey = apiKey
此外,我认为您在方案的第一行中遇到了问题,应该是:
Also, I think you have a problem in the first line of the scenario, it should be:
* configure headers = { KeyId: '#(secretKey)', Accept: 'application/json' }
这篇关于在功能文件中使用karate-config参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!