web-dev-qa-db-ja.com

機能ファイルでのkarate-configパラメーターの使用

空手 ヘッダーの例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)

私の.featureファイルとkarate-config.jsは以下のとおりです。

XYZ.feature

@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

6
roblogic

すべてのキーwithinkarate-config.jsによって返されるJSONオブジェクトは変数として挿入され、他には何も挿入されないことに注意してください。したがって、configを参照することはできませんが、apiKeyを参照することはできます。

この単純な変更を加えると、物事が機能し始めると思います。

* def secretKey = apiKey

また、シナリオの最初の行に問題があると思います。次のようになります。

* configure headers = { KeyId: '#(secretKey)', Accept: 'application/json' }
7
Peter Thomas

参考までに、私の最後の、正しく機能しているXYZ.featureファイルは次のようになります。この線 Given path 'headers'ヘッダー情報がURLに忍び寄ったため、削除されました。

XYZ.feature

@regression
Feature: Checkdigit Algorithm API

Background:
* url baseUrl
* def secretKey = apiKey
* configure ssl = true

Scenario Outline: Testing XYZ algorithm
* configure headers = { KeyId: '#(secretKey)', Accept: 'application/json' }
Given url baseUrl
And params { customerId: '<custcode>', algoId: '<algo>' }
When method get
Then status <val>

Examples:
[...]
1
roblogic