当前位置: 首页 > 知识库问答 >
问题:

在功能文件中使用空手道配置参数

闾丘霖
2023-03-14

空手道标头示例不显示如何访问basUrl以外的配置值。当我切换环境(传递-Dkarate.env=qual作为run命令的一部分)然后basUrl被正确设置。

问题是,我想使用这里所示的其他配置值,但是当我运行测试时,它无法访问配置。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)

我的。功能文件和空手道配置。下面是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 |    
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)

共有2个答案

陆高峰
2023-03-14

仅供参考,我的最终,正确工作XYZ。功能文件现在看起来像这样。行给定路径“headers”导致header信息潜入url,因此将其删除。

@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:
[...]
戚学文
2023-03-14

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

我想如果你做了这个简单的改变,事情就会开始起作用:

* def secretKey = apiKey

另外,我认为您在场景的第一行遇到了一个问题,应该是:

* configure headers = { KeyId: '#(secretKey)', Accept: 'application/json' }
 类似资料:
  • 我正在使用空手道v0.9.6,这是一个很棒的工具。我有一个 我空手道配置的一部分。js: 我正在使用。sh文件如下: 而且,它在v.0.9.6上长时间运行良好。但是,当我尝试升级到v 1.0或1.0.1时,a给出了一个错误: 我发现这个问题:https://github.com/intuit/karate/issues/1515 但这些例子并不适合我。我试着用“文件:”和空手道。属性['karat

  • 我的API测试项目的工作,并已纳入空手道这样做。现在,我的要求是创建一个响应endpoint的服务器。所有这些都已完成,但我的要求是访问服务器功能中的空手道配置文件中定义的变量。我不能这样做。 例如:功能:示例服务器 场景:路径匹配('\variablevalue)**methodIs('get')) def响应=默认环境 注意:默认_env是空手道配置中的一个变量。js文件,并保存一些默认值。

  • 在我们的测试功能(用于API测试)中,我们在后台创建测试用例所需的数据(例如:用户,他们的数据...)。我们希望在不同的模式下使用相同的测试功能。如何在后台设置数据?我的意思是我们如何为我们的测试功能使用“不同的”背景。我们希望运行相同的测试功能: > 在管理或非管理模式下,所以在后台我们需要创建一个用户帐户,然后生成一个访问令牌,然后使用该令牌为该用户添加一些数据;该令牌用于每个场景; 对于注入

  • 我正在尝试使用空手道进行e2e测试,并已从最低设置开始。我想在用于测试,但karate报告该文件不是js函数,因此测试无法获取配置: 这是我的: 这是我的测试: 这是测试运行程序:

  • 在空手道中,您可以通过发送json/list调用该功能 例如: 引发错误:路径:$,实际值:'',应为:'30e093da-c4e3-4ee0-b180-e5d0b4302d9f',原因:不是子字符串 步骤: 在日志检查功能中,我试图使用 日志检查功能步骤 我尝试了另一种方法,我把它分配给 我将发送json的另一种方法 步骤为logcheck.feature 例如: 错误抛出:com.intuit

  • 如何在gatling模拟中运行多个空手道功能文件? 以下是我gatling模拟的代码片段: 我每次只能运行一个功能文件,如下所示: