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

Cucumber:场景概要重用示例表

卫开济
2023-03-14

我有几个测试如下:

Scenario Outline: Add two numebrs
  Given two numbers <number_1> and <number_2>
  When I add them
  Then Result is <number_3>

  Examples:
    |number_1|number_2|number_3|
    |2       |3       |5       |
    |1       |2       |3       |

Scenario Outline: Update two numebrs
  Given two numbers <number_1> and <number_2>
  When I update them
  Then Result is <number_3>

  Examples:
    |number_1|number_2|number_3|
    |2       |3       |5       |
    |1       |2       |3       |

对于每个测试,我应该添加相同的表格示例。

有没有办法提取这个表,以便在所有测试中使用同一个表?

共有3个答案

尉迟越
2023-03-14

如果您想使用cucumber转轮,您不能使用QAF,因为它与TestNG一起工作。此外,我认为仅仅为了使用数据提供商而切换到QAF是过度的。

你可能想使用用户861594所说的qaf cucumber(它提供了使用cucumber runner和所有qaf BDD2功能的选择),但目前该插件处于测试阶段;我对它进行了测试,发现它有问题(示例中的占位符不起作用,与pretty不兼容)。希望很快能有一个稳定的版本。

我选择的解决方案原则上与qaf-cucumber相同:用cucumber覆盖作为传递依赖的小cucumber编译器,并且只改变它解析场景大纲的方式,以便可以从. csv/. txt文件中提取示例。为此,您必须创建类gherkin.pickles.Compiler。这是与真正的小cucumber编译器相同的路径,因此这将覆盖对它的引用。然后,您可以复制/粘贴真正的小cucumber编译器的代码,并根据需要对其进行修改。

当然,这不是一个完美的解决方案。例如,如果版本升级后小cucumber编译器的路径发生了变化,那么编译器的路径也必须发生变化。

注意:目前,qaf cucumber不适用于pretty插件,因为pretty在打印之前再次解析场景,但不适用于gherkin的编译器类。这是在类io中完成的。cucumber果心插件。TestSourcesModel,所以为了更好地工作,您可能还必须覆盖这个类。我两个都做了,到目前为止效果很好。

谢豪
2023-03-14

您可以使用qaf gherkin在外部文件中移动示例,并将其用于一个或多个场景。使用qaf,您的功能文件可能如下所示:

Scenario Outline: Add two numebrs
  Given two numbers <number_1> and <number_2>
  When I add them
  Then Result is <number_3>

  Examples::{'datafile':'resources/testdata.txt'}

Scenario Outline: Update two numebrs
  Given two numbers <number_1> and <number_2>
  When I update them
  Then Result is <number_3>
  Examples:{'datafile':'resources/testdata.txt'}

您的数据文件将看起来像:

  #col.separator=|
  number_1|number_2|number_3
  2|3|5       
  1|2|3       

上面是csv(特许权分离值)数据提供程序的示例,带有|作为分隔符。您还可以使用不同的数据提供程序从excel/xml/json/database中的任何一个提供数据。

编辑:qaf Cumber对Cumber的BDD2支持可与Cumber 5配合使用。

卫俊誉
2023-03-14

我想到的最简单的解决方案是结合这两种场景,将细节提取到示例表中。所以它看起来像:

| number_1 | number_2 | operation | result |

你还有另一种可能性。

Scenario: Add two numebrs
Given I have the matrix of numbers
When I add them
Then I would have the resulting vector.

Scenario: Update two numebrs
Given I have the matrix of numbers
When I update them
Then I would have the resulting vector.

其中“数字矩阵”和“结果向量”进入step defs文件。

 类似资料:
  • 我想自动重试失败的测试,以提高测试的可靠性,类似于 Junit 中的 TestRule,我希望能够灵活地在测试周围插入逻辑,以便实现重试循环: > 我正在使用Cucumber-JVM,需要一个涉及Java或Gradle的解决方案 我通过Gradle javaexec尝试了以下cucumber选项: //--format pretty--format rerun--out tmp/rerun.txt

  • 前面虽然介绍了几十个常用的 Logstash 插件的常见配置项。但是过多的选择下,如何组合使用这些插件,依然是一部分用户的幸福难题。本节,列举一些最常见的日志场景,演示一下针对性的组件搭配。希望能给读者带来一点启发。 链接 nginx访问日志 nginx错误日志 postfix日志 ossec日志 windows系统日志 Java日志 MySQL慢查询日志

  • 我有一个示例项目,其中使用了Maven、TestNg和Cucumber。我使用testrunner类运行测试。 我创建了一个包含两个方案的功能文件,但两个方案都失败了。我有两个具有不同功能文件的测试运行者类 - 1。特征文件指向所有功能,2。指向仅失败的方案。 当我尝试重新运行场景时,它只运行一个场景。 1- 请告知如何执行所有失败的方案。

  • 之前在 codec 章节,曾经提到过,对 Java 日志,除了使用 multiline 做多行日志合并以外,还可以直接通过 log4j 写入到 logstash 里。本节就讲述如何在 Java 应用环境做到这点。 Log4J 首先,需要配置 Java 应用的 Log4J 设置,启动一个内置的 SocketAppender。修改应用的 log4j.xml 配置文件,添加如下配置段: <appende

  • 本节作者:林鹏 配置OSSEC SYSLOG 输出 (所有agent) 编辑ossec.conf 文件(默认为/var/ossec/etc/ossec.conf) 在ossec.conf中添加下列内容(10.0.0.1 为 接收syslog 的服务器) <syslog_output> <server>10.0.0.1</server> <port>9000</port> <for

  • postfix 是 Linux 平台上最常用的邮件服务器软件。邮件服务的运维复杂度一向较高,在此提供一个针对 postfix 日志的解析处理方案。方案出自:https://github.com/whyscream/postfix-grok-patterns。 因为 postfix 默认通过 syslog 方式输出日志,所以可以选择通过 rsyslog 直接转发给 logstash,也可以由 log