您可以在 SpecFlow 的场景大纲中标记单个示例吗?

Gre*_*rdt 2 specflow gherkin

场景大纲对于创建数据驱动的测试非常方便,但场景的数量随着示例的数量而增加。我已经养成了标记场景的习惯,以便更轻松地过滤我们应用程序的主要功能。

我想建立一个适用于所有主要用例的“冒烟测试”。其中一些用例是在对日期或数字执行边界测试的场景大纲中捕获的,但我只想在示例中找到一个原型案例。

例如,假设我们有一个功能允许我们为工作添加职位空缺(基本上是“招聘机会”与“我们有热情的人填补这个职位”)。

在屏幕上,我们有两个用于最低经验的表单字段:年和月。用户不应在月份字段中输入超过 11 个月,否则他们应该在年份字段中输入一些内容(例如 18 个月实际上应该是 1 年零 6 个月)。

@job-openings
Scenario Outline: Adding a job opening with experience
    Given a job exists
    When I add a job opening requiring <years> years and <months> months experience
    Then a job opening should exist requiring <years> years and <months> months experience

Examples:
    | years | months |
    | 0     | 1      |
    | 0     | 11     |
    | 1     | 0      |
    | 2     | 6      | # <-- the "prototypical" example I want to tag
    | 99    | 0      |
    | 99    | 11     |
    | 100   | 0      |
Run Code Online (Sandbox Code Playgroud)

从回归测试的角度来看,让这些示例达到可接受值的边界数年和数月绝对有用,但在执行系统的“冒烟测试”时则不然。在场景大纲中运行一个代表典型用例的示例会很好。作为一些背景信息,我们有一个 PowerShell 脚本,开发人员可以使用它来运行各种自动化测试,而针对所有主要功能的通用“冒烟测试”将非常有用。

有没有办法在场景大纲中标记单个示例?

Mik*_*kaS 7

这是我这样做的方式:

@job-openings
Scenario Outline: Adding a job opening with experience
    Given a job exists
    When I add a job opening requiring <years> years and <months> months experience
    Then a job opening should exist requiring <years> years and <months> months experience

@smoketest @regression
Examples:
    | years | months |
    | 2     | 6      | # <-- the "prototypical" example I want to tag

@regression
Examples:
    | years | months |
    | 0     | 1      |
    | 0     | 11     |
    | 1     | 0      |
    | 99    | 0      |
    | 99    | 11     |
    | 100   | 0      |
Run Code Online (Sandbox Code Playgroud)

有两个示例部分都属于该场景。烟雾测试有自己的示例部分。跑步时

dotnet test --filter "TestCategory=job-opening&TestCategory=smoketest"
Run Code Online (Sandbox Code Playgroud)

它只会运行带有smoothtest 标签的示例。跑步时

dotnet test --filter "TestCategory=job-opening&TestCategory=regression"
Run Code Online (Sandbox Code Playgroud)

它将运行所有示例。它也将运行冒烟测试,因为它也有回归标签。

user1207289 的方法也有效。有时我会在测试失败时这样做,我想稍后重新测试。生成测试后,您要运行的特定示例将获得一个名称(例如,AddingAJob_ExampleYears2Months6)。您可以在带有-t标志的场景中找到生成的单元测试的名称,其中列出了所有测试:

dotnet test --filter "TestCategory=job-opening" -t
Run Code Online (Sandbox Code Playgroud)

运行一个特定的测试(技术上所有测试都带有AddingAJob_ExampleYears2Months6):

dotnet test --filter AddingAJob_ExampleYears2Months6
Run Code Online (Sandbox Code Playgroud)

我在上面的示例中使用了官方的 dotnet cli 工具,但对于其他测试运行程序,它非常相似。