在功能文件中使用karate-config参数

rob*_*gic 5 karate

空手道标头示例未显示如何访问以外的配置值baseUrl。当我切换环境时(-Dkarate.env=qual作为运行命令的一部分传入),则baseUrl设置正确。

问题是,我想使用此处所示的其他配置值但是当我运行测试时,它无法config.ApiKey正确访问。相反,我得到这个错误

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)
Run Code Online (Sandbox Code Playgroud)

我的.feature文件karate-config.js在下面。

XYZ功能

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)
Run Code Online (Sandbox Code Playgroud)

空手道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 |    
Run Code Online (Sandbox Code Playgroud)

(类似的问题在这里,使用单独的headers.jshttps://github.com/intuit/karate/issues/94

Pet*_*mas 6

请记住,所有的按键返回的JSON对象karate-config.js将被注入变量,而不是其他。因此,您将无法引用config,但您一定可以引用apiKey

我认为,如果您进行了简单的更改,事情就会开始起作用:

* def secretKey = apiKey
Run Code Online (Sandbox Code Playgroud)

另外,我认为您在方案的第一行中有问题,应该是:

* configure headers = { KeyId: '#(secretKey)', Accept: 'application/json' }
Run Code Online (Sandbox Code Playgroud)

  • @ropata 很高兴听到这个消息!传播这个词:) 听起来你以前在愤怒中使用过黄瓜,你可能会发现这是一个有趣的阅读:https://hackernoon.com/yes-karate-is-not-true-bdd-698bf4a9be39 (2认同)