【问题标题】:Karate: Call the same feature file with multiple url paths空手道:使用多个 url 路径调用相同的功能文件
【发布时间】:2020-04-13 05:31:30
【问题描述】:

我需要在具有多个端点 url 的功能文件中运行测试。所有测试都命中 REST 端点,我需要针对相同的测试命中多个端点。我想出了以下两个可行的解决方案,但它们都有维护开销。所以我想知道是否有更好的解决方案。

1.添加一个虚拟功能文件: 添加一个新的虚拟功能文件并使用端点 url 作为参数调用实际功能文件,如下所示。实际的特征文件有 100 行的测试数据。所以当这个单独执行时,黄瓜报告显示了 100 个场景,很容易看出有多少通过/失败。但是当使用虚拟功能文件执行时,报告仅显示虚拟功能文件中的 1 个场景,并显示其下的所有 100 个测试用例。

  Scenario: Call actual feature file with internal URL
    * def params = { endpoint_url: 'internal' }
    * karate.callSingle('actualTestCases.feature', params);

  Scenario: Call actual feature file with public URL
    * def params = { endpoint_url: 'public' }
    * karate.callSingle('actualTestCases.feature', params);

2。复制测试数据行并添加一个新列endpoint_url: 在测试数据中,添加重复的测试数据行,并添加一个列 'endpoint_url',其值为 'internal'、'public'。在实际功能文件中使用此列数据。这具有需要复制测试数据的开销。我有超过 3000 行的测试数据。

      |testcaseName|email|endpoint_url
      |"Valid Parameters"|["validtests@test.com"]|"internal"
      |"Valid Parameters"|["validtests@test.com"]|"public"

【问题讨论】:

    标签: karate


    【解决方案1】:

    只需使用 JSON 作为输入文件。
    如果您需要创建更多动态 url,请使用 karate.map 为变量填充更多值并传递给您的功能。

    记得使用动词(When, Then, And),所以报告会显示内容。 否则需要手动配置。

    输入文件urls.json:

    [ 
        {"url" : "https://jsonplaceholder.typicode.com/users/1"},
        {"url" : "https://jsonplaceholder.typicode.com/users/2"},
        {"url" : "https://jsonplaceholder.typicode.com/users/3"}
    ]
    

    主要功能文件main.feature

    Feature: Test REST
    
      Scenario: Dynamic URL Test
        When def urls = read('./urls.json')
        Then call read('_sub.feature') urls
    

    子功能文件_sub.feature:

    @ignore
    Feature:
    
      Scenario: Call URL
        * def keyword = __arg.url
        Given driver keyword
        Then retry(5, 1000).waitUntil("document.readyState == 'complete'")
    

    【讨论】:

      【解决方案2】:

      使用 2 个循环或 Scenario Outline:

      Scenario Outline:
      * call read('actualTestCases.feature')
      
      Examples:
      | endpoint_url |
      | internal     |
      | public       |
      

      请注意,endpoint_url 将对“被调用”功能可见,因此您无需担心传递参数。实际上,我认为您可以在一个功能文件中完成所有这些操作。

      【讨论】:

      • 按照建议尝试了代码。使用了 2 个文件,它们都有“场景大纲”。但是空手道报告仍然显示了一个场景,它下面有 100 个测试用例。下面的示例报告。另外,不理解您建议的 2 个循环解决方案。 ** Scenario Outline: [1.1:9]Call feature file in local env Test 1 : * call read('actualTestCases.feature'); 33.656583 Test 2 : actualTestCases.feature 33.469832 Test 7 : * print 'Test for', "All valid parameters" + "-" + endpoint_path 0.009311 ... Test 30 : * print 'Test for', "null testId" + "-" + endpoint_path 0.004675 ... **
      • @karate_newbie 这是因为我不明白你的问题。所以请遵循这个过程:github.com/intuit/karate/wiki/How-to-Submit-an-Issue - 并确保这是一个简单的例子,而且我不明白one scenario with the 100 test cases underneath it 有什么问题 - 没关系,不要担心“漂亮的报告”专注于获得一些实际完成的工作,好吗?
      • 彼得不是关于漂亮的报告。通过上述方法,我没有得到正确数量的场景通过/失败。当我在报告中调用虚拟功能文件中的三个功能文件时,它将每个功能文件视为一个场景,反过来我在黄瓜报告中看到三个场景,实际上我有 100 个场景/测试
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      • 1970-01-01
      • 2018-05-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多