Specflow:为许多场景大纲维护一个示例表

Posted

技术标签:

【中文标题】Specflow:为许多场景大纲维护一个示例表【英文标题】:Specflow: maintain one Examples table for many Scenario Outlines 【发布时间】:2016-01-25 19:03:48 【问题描述】:

有没有办法将“示例”数据表保存在与场景大纲不同的文件中?

我想要实现的是每个浏览器一个接一个地运行整个场景。

我使用以下功能:

Feature: OpenGoogleInChrome

Scenario Outline: Open Google in Chrome
    Given a browser '<browser>'
    When the browser points to 'https://www.google.co.uk/'
    Then the title should be 'Google'

Examples:
    | browser |
    | Chrome  |
    | Edge    |
    | Firefox |

但是,如果我添加另一个浏览器,这将意味着在每个测试中维护示例表。是否可以从每个场景大纲中引用一个“示例”表?

或者从步骤定义中调用场景大纲,并附上示例表?

(将 Specflow 和 Selenium WebDriver 与 NUnit 一起使用)

虽然“背景”允许您定义共享表,但它似乎是针对具有多个场景的单个功能。我正在寻找的是一种在不同 (.feature) 文件的每个功能中使用同一个表的方法。

根据经验,我知道使用 @Chrome 之类的标签可以适用于单个浏览器(这是我编写大部分测试的方式),但使用多个标签会导致所有浏览器同时运行,而不是一个接一个地运行.

【问题讨论】:

related question which is not quite a duplicate 【参考方案1】:

我认为最易于维护的方法是在运行测试之前通过设置环境变量来参数化使用的浏览器。在Given 步骤定义中,您可以使用Environment.GetVariable("...") 在运行时检索值。

另一种方法是创建一个包含要使用的浏览器名称的特殊文本文件。打开此文件并阅读您的 Given 步骤定义中的内容。

如果您有自动构建,您可以设置一个 power shell 或批处理文件,将此文本文件设置为第一个浏览器,运行所有测试,然后将文本文件设置为下一个浏览器并重新运行测试。冲洗并重复您要使用的每个浏览器。

您可以将其放入 Visual Studio 中测试项目的 &lt;appSettings&gt; 并利用配置转换。从命令行运行 NUnit 测试时,您可以切换配置:

nunit-console nunit.tests.csproj /config:Firefox
nunit-console nunit.tests.csproj /config:InternetExplorer
nunit-console nunit.tests.csproj /config:Chrome
nunit-console nunit.tests.csproj /config:Safari

缺点是您为每个浏览器创建一个构建配置,但它应该可以解决问题。

【讨论】:

【参考方案2】:

我不相信您可以在 specflow(或任何小黄瓜语言实现)中做到这一点。如相关问题中所述,您可以有提供表格的背景,但我不确定这是否可用于在场景大纲中提供示例,至少我从未见过它使用过,我不确定如何使用它可以工作。

我能想到的可能(肮脏)解决方案类似于拥有一个扫描您的功能文件并在您添加新浏览器时更新示例的脚本(我无法想象这种情况经常发生),或者如果在每个场景大纲中输入示例文本是问题,则使用代码 sn-p 添加示例文本。

【讨论】:

【参考方案3】:

SpecFlow 建议在这些场景中使用标签。也许你做过书店教程,然后你会从指示场景是系统测试还是浏览器测试的标签中识别它。

@Chrome @Firefox @IE    # <- feature wide, applicable for all scenarios
Feature: Open Google

Scenario: Open Google in the browser
    Given the browser is active
    When I navigate to "https://www.google.co.uk/"
    Then the title should be 'Google'

@Lynx    # <- additional browser for a specific scenario
Scenario: There is a Search button
    Given the browser is active
    When I navigate to "https://www.google.co.uk/"
    Then I should see a button with label "Search"

现在您可以为每个标签/类别运行测试运行程序。

【讨论】:

请查看最新编辑。如果您知道一种确保浏览器不会同时运行的方法,那么也许我们有一个答案。 如果你从命令行运行 nunit,you can use the /include parameter 只为一种类型的浏览器运行测试。在 testsetup 中,您必须确定需要启动哪个浏览器,并且仅将该浏览器用于特定的 nunit 运行。

以上是关于Specflow:为许多场景大纲维护一个示例表的主要内容,如果未能解决你的问题,请参考以下文章

SpecFlow:场景大纲示例

Specflow 场景大纲 - 更改自动生成的测试名称

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

如何在下拉列表中选择与 specflow 大纲值相同的值

Specflow 场景大纲未按预期工作

Specflow:对场景和场景大纲使用相同的步骤定义