我正在尝试利用空手道中的黄瓜功能将Excel / csv表作为文件传递到示例部分

时间:2018-04-11 03:51:27

标签: cucumber karate

我正在尝试使用功能文件的“Scenario Outline”部分下的“Examples”。

在功能文件中,我尝试用以下格式表示它。这会按预期工作吗。

Feature: save data to db
Background: no definition
Scenario Outline: to validate file is getting read by example section

Given url 'https://www.googleapis.com/geolocation/v1/geolocate'
And param key = 'AIzaSyB2jt4BQ9McqBXAe8dYcp1CwKf0oGFlWuc'
And def dogs = read('classpath:external_table/json.feature')
And request { "homeMobileCountryCode": '<homeMobileCountryCode>' 
,"homeMobileNetworkCode": '<homeMobileNetworkCode>' } dogs
When method post
And print response
Then status 200

Examples: {'datafile':'src/test/java/external_table/testdata.xlsx'}

3 个答案:

答案 0 :(得分:0)

首先语法错误。示例表应该从下一行开始,而不是与单词&#39;示例&#39;开始。

其次,示例表中没有标题,因此要在场景步骤中将其用作占位符。

第三,在示例表中没有的场景步骤中定义了占位符&#39;&#39;&#39;

我不熟悉空手道能够正确修改scenariooutline。请参阅此链接以了解此问题 - http://www.baeldung.com/cucumber-scenario-outline

答案 1 :(得分:0)

不,它没有按预期工作。正如其他人已经回答的那样,语法错误。

我不明白为什么在这里回答这个问题时你必须再次提出这个问题:https://stackoverflow.com/a/49727819/143475

也许你的领导者坚持要求使用Excel。根据经验,让我这样说,使用Cucumber本机示例或Karate的数据驱动功能可以更简单,您可以在其中循环JSON数组,请参阅:https://github.com/intuit/karate#the-karate-way

如果你仍然坚持要使用Excel并且你不愿意编写一个小的Java实用程序来将Excel(或CSV)转换为JSON,那么请放弃使用空手道,它不适合你。一切顺利。

答案 2 :(得分:0)

如果您真的需要处理使用CSV或Excel中的示例驱动方案,则可以使用此方法。

  1. 为您的示例命名,最好使用商家理解的名称。

  2. 编写使用该名称的单个场景 - 不要使用场景大纲

  3. 获取所有工作以获取Excel和示例的步骤,使用名称指导步骤以获取正确的示例。

  4. 让我们通过英超联赛中足球队的简单列表进行讨论,并假设您必须从Excel电子表格中动态获取这些内容

    Scenario: Commpile statistics for premier league teams
      Given I am working with the premier league
      When I compile teams statistics
      Then I should see team statistics
      And there should be no errors
    

    为了完成这项工作,我们必须将所有细节从场景推送到步骤定义,理想情况是这些步骤定义的辅助方法。所以我们最终得到像

    这样的东西
    Given "I am working with the premier league" do
      @teams = load_premier_league_teams
    end
    

    然后是辅助方法

    def load_premier_league_teams
      get_the_teams_from_the_spreadsheet
    end
    

    现在关于处理电子表格的所有内容都是在Cucumber以外的编程语言中处理的。

    然后在When步骤中,您可以按照以下步骤为每个团队进行操作

    When "I compile the teams statistics" do
      @results = compile_statistics(@teams)
    end
    

    并编写另一个辅助方法

    def compile_statistics(teams)
      results = []
      teams.each do |t|
        results << compile_team_stats(t)
      ...
    end
    

    我们再一次将所有关于我们如何做事的细节推出黄瓜。

    你可以为'应该没有错误'步骤做同样的事情,使用@results变量迭代结果并收集任何错误。

    Cucumber不是编程的工具。使用这种技术,您仍然可以使用它来运行您想要的任何内容,同时保持您的场景简单快速。