【问题标题】:Python Behave : How to read examples from external excel file for Scenarios OutlinePython Behave:如何从外部 excel 文件中读取场景大纲的示例
【发布时间】:2021-08-19 05:39:14
【问题描述】:

而不是从示例中传递数据:我想从 excel 中传递数据。在那个步骤中,我只想比较批处理自动化的预期结果和实际结果。并且想要捕获测试用例的总通过或失败。

Scenario Outline: Browser Test

    When I visit the URL <base>/<page>/<ordNumber>/<custName>
    Then the browser contains test <custNumber>

    Examples: 
     | base                         | page   | ordNumber | custName |
     | http://www.stackoverflow.com | orders | 123       | John     |
     | http://www.stackoverflow.com | orders | 456       | Mike     |
     | http://www.stackoverflow.com | orders | 789       | Tom      |


examples.xls

 | base                         | page   | ordNumber | custName |
 | http://www.stackoverflow.com | orders | 123       | John     |
 | http://www.stackoverflow.com | orders | 456       | Mike     |
 | http://www.stackoverflow.com | orders | 789       | Tom      |

【问题讨论】:

    标签: cucumber bdd python-behave cucumber-python


    【解决方案1】:

    我也遇到过同样的问题,但解决方案并不像人们希望的那样直截了当。您不能简单地将Examples 指向您的Excel 文件,而是使用Excel 中的数据构建您的Examples 表。您可以在 environment.pybefore_feature 钩子下执行此操作。

    这是基于您发布的场景的概念证明:

    1. 功能文件应该只包含Examples 表中的标题。另请注意,我已经标记了该功能,将进一步使用该标记:

       @test-data-from-excel
       Feature: Examples table with test data from Excel
      
           Scenario Outline: Browser Test
      
               When I visit the URL <base>/<page>/<ordNumber>/<custName>
               Then the browser contains test <custNumber>
      
           Examples: 
            | base                         | page   | ordNumber | custName |
      
    2. environment.py:

      import pandas as pd
      
      def before_feature(context, feature):
      ...
      if 'test-data-from-excel' in feature.tags:   # >>> you can have this check on feature.name instead of tag
          path_to_file = '*<path/to/file/here.xlsx>*'
          df=pd.read_excel(path_to_file)
          example = next(sc.examples[0] for sc in feature.scenarios if sc.name == 'Browser Test') # >>> find the first examples object for scenario with given name
          test_table = example.table
          for row in df.itertuples(index=False):
              test_table.add_row(row)
      

    我正在使用pandas 来读取 Excel 文件 - 我觉得它最方便,也因为我在框架的其他地方需要它。还有其他库允许相同的操作,使用任何你喜欢的。如果你没有安装pandas,那么:

    pip install pandas
    

    【讨论】:

    • 感谢 Obuz 分享此内容,这将有助于为我的批量自动化创建解决方案。实际上,在我的 Excel 文件中,我有多个场景,为此我在一个场景中计算预期结果,我们在一个场景中执行批处理运行,然后在下一个场景中,我们正在更新实际结果并在每个帐户的前面添加.在最后的场景中,我将比较预期结果和实际结果。为了将每个比较结果作为一个单独的案例来通过和失败,我想通过示例阅读它。将尝试实施它,如果可行,将分享解决方案。
    【解决方案2】:

    我建议将场景的所有数据放在 Gherkin 文档中,但您可能有从 excel 中提取数据的有效用例。但是,根据我的经验,这类要求很少见。不推荐它的原因是,您的 BDD 功能文件是您的要求,并且应该包含正确级别的信息来记录系统的预期行为。如果您的数据来自 Excel,那么它只会使需求读取变得更加困难并且难以维护。

    如果您有充分的理由将这些数据存储在 excel 中,您可以使用 NoCodeBDD 轻松实现这一点。您所要做的就是映射列名并上传 excel,该工具会处理其余的事情。请检查此 .gif 以了解它是如何完成的。 https://nocodebdd.live/examples-using-excel

    免责声明:我是 NoCodeBDD 的创始人。

    如果您使用的是 Junit5,这里有一个示例,说明它是如何完成的 https://newbedev.com/data-driven-testing-in-cucumber-using-excel-files-code-example

    【讨论】:

    • 谢谢杰罗姆,我理解保持实现的意义,因为我已经创建了一个补丁自动化框架,它需要这样的需求。在最后一个场景中,我们将比较所有场景的所有预期结果和实际结果。在以前的场景中,它已经在 excel 中提供。现在要生成报告,我需要通过场景示例将其传递。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多