cucumber - SpecFlow/ cucumber /小 cucumber -在方案大纲中使用表

标签 cucumber automated-tests specflow gherkin

希望我可以清楚地解释我的问题,以使其他人可以理解,在这里,假设我有以下两种假设情况:

Scenario: Filter sweets by king size and nut content
Given I am on the "Sweet/List" Page
When I filter sweets by 
    | Field               | Value  |
    | Filter.KingSize     | True   |
    | Filter.ContainsNuts | False  |
Then I should see :
    | Value            |
    | Yorkie King Size |
    | Mars King Size   |

Scenario: Filter sweets by make
Given I am on the "Sweet/List" Page
When I filter sweets by 
    | Field        | Value  |
    | Filter.Make  | Haribo |
Then I should see :
    | Value   |
    | Starmix |


这些方案很有用,因为我可以在不更改关联的已编译测试步骤的情况下,根据需要添加任意多的“字段/值”和“值”条目的“当行”。但是,针对不同筛选器测试的复制/粘贴场景将变得重复并且占用大量代码-我想避免这种情况。理想情况下,我想创建一个方案大纲并保持上面测试的动态性质,但是当我尝试这样做时,遇到了定义示例表的问题,我无法按我的意愿添加新行,因为那样会一个新的测试实例,目前我有这个:

Scenario Outline: Filter Sweets 
Given I am on the <page> Page
When I filter chocolates by 
    | Field    | Value   |
    | <filter> | <value> |
Then I should see :
    | Output   |
    | <output> |
Examples:
    | page       | filter      | value  | output  |
    | Sweet/List | Filter.Make | Haribo | Starmix |


因此,我有一个问题,当使用场景大纲时,能够将行动态添加到过滤器和期望的数据中,有人知道解决此问题的方法吗?我应该从另一个角度来对待这个问题吗?

解决方法可能是这样的:

Then I should see :
    | Output |
    | <x>    |
    | <y>    |
    | <z>    |
    Examples:
    | x | y | z |


但是那不是很动态。...希望有更好的解决方案? :)

最佳答案

从技术上讲,我认为您可以尝试从步骤定义中调用步骤:

Calling Steps from Step Definitions

例如,我认为您可以重写

Then I should see :
| Output   |
| <output> |


像这样的自定义步骤

I should have output that contains <output>


输出是用逗号分隔的期望值列表。在自定义步骤中,您可以将以逗号分隔的列表拆分为一个数组,并对其进行遍历

Then "I should see #{iterated_value}"


您可以使用类似的技术来传递过滤器和过滤器值的列表。您的特大测试的示例行可能看起来像

| page       | filter                               | value       | output                           |
| Sweet/List | Filter.KingSize, Filter.ContainsNuts | True, False | Yorkie King Size, Mars King Size |


或许

| page       |                              filter-value-pairs | output                           |
| Sweet/List | Filter.KingSize:True, Filter.ContainsNuts:False | Yorkie King Size, Mars King Size |


话虽如此,您也许应该铭记达伦的话。我不太确定这种方法是否有助于实现非开发人员可读的方案的最终目标。

关于cucumber - SpecFlow/ cucumber /小 cucumber -在方案大纲中使用表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5118860/

相关文章:

testing - 带有测试管理器或编码 UI 测试的 BDD

C# Specflow - 需要功能和场景标题而不使用 FeatureContext 和 ScenarioContext

testing - [小 cucumber /Specflow] : How to write a scenario outline with complex types

ruby - 在 Ruby 中,使用 Cucumber,我应该模拟对 web 服务的调用吗?

ruby - cucumber :RSpec::Expectations::ExpectationNotMetError:预期为 true 以响应 `true?`

TCP 栈验证测试工具

python - Django 初始化所有测试类的数据测试

c# - 如何在不关闭同一浏览器实例的情况下运行多个测试方法(C#、SeleniumWebDriverz NUnit)?

java - 使用Gradle 5和Cucumber-JVM从不同目录运行Cucumber

java - 仅执行场景大纲中的特定示例