首页 > 解决方案 > 通过传入参数重用其他功能文件中的空手道测试

问题描述

我们有一组服务,它们都公开某些公共端点,例如健康检查、版本信息等。我正在尝试使用空手道以可重用的方式为这些多个服务编写冒烟测试,我可以只传递服务名称和端点并为每个服务执行测试。

basicChecks.feature

Feature: Smoke Test. verify health check and version and index are ok

  Scenario: Verify that test server health check is up and running
    Given url '#(baseUrl)'

    Given path '/health'
    When method get
    Then status 200
    And match response == "'#(name)' ok"

    Given path '/version'
    When method get
    Then status 200
    And match response contains {'#(name)'}

testServices.feature

Feature: Smoke Test for services.

  Scenario: Verify that test server health check is up and running

    * call read('basic.feature') { name: 'service1' , baseUrl : service1Url }
    * call read('basic.feature') { name: 'service2' , baseUrl : service2Url }

空手道配置.js

function fn() {
  var env = karate.env; // get java system property 'karate.env'
  karate.log('karate.env system property was:', env);
  if (!env) {
    env = 'local'; // a custom 'intelligent' default
  }
  var config = { // base config JSON
    appId: 'my.app.id',
    appSecret: 'my.secret',
    service1Url: 'https://myserver/service1'
    service2Url: 'https://myserver/service2'
  };
 
  // don't waste time waiting for a connection or if servers don't respond within 5 seconds
  karate.configure('connectTimeout', 5000);
  karate.configure('readTimeout', 5000);
  return config;
}

当我运行它时,我收到一个错误,提示传入时未拾取 baseUrl

20:27:22.277 karate.org.apache.http.ProtocolException: Target host is not specified, http call failed after 442 milliseconds for url: /health#(baseUrl) 20:27:22.278 cas/src/test/java/karate/smoke/basic.feature:7 When method get http call failed after 442 milliseconds for url: /health#(baseUrl) cas/src/test/java/karate/smoke/basic.feature:7

我查看了https://intuit.github.io/karate/#code-reuse--common-routines但无法弄清楚如何使用相同的测试但通过不同的端点?

或者也许因为我对空手道完全陌生,所以有比我概述的更好的方法来做到这一点?

感谢您的时间。

编辑 - 我正在尝试在同一环境中测试不同的微服务,而不是尝试切换不同的环境等。

标签: karate

解决方案


这不是推荐的方法。当您对不同的环境有不同的 URL-s 时,您应该使用文档中的方法(设置karate.env)切换环境,而不是依赖于通过“调用”等重用。

示例:https ://stackoverflow.com/a/49693808/143475

如果你真的想要,你可以一个接一个地运行套件karate.env,尽管这很少见。

或者,如果您只是尝试“数据”驱动测试,有很多方法,只需阅读文档并搜索 Stack Overflow Scenario Outlinehttps ://stackoverflow.com/search?tab=newest&q=%5bkarate%5d%20Scenario%20Outline

如果您尝试使用“呼叫”进行此“聪明”重复使用,我强烈建议您不要这样做,请阅读此内容以了解原因:https ://stackoverflow.com/a/54126724/143475

编辑 - 我认为你遇到了这个问题,请阅读文档:https ://github.com/intuit/karate#rules-for-embedded-expressions


推荐阅读