有没有办法将“Examples”数据表保存在与Scenario Outline不同的文件中?
我想要实现的是每个浏览器一个接一个地运行整个场景。
我使用以下功能:
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 |
但这意味着如果我添加了另一个浏览器,则在每个测试中维护Examples表。是否可以从每个场景大纲中引用单个“示例”表?
或者从步骤定义中调用场景大纲,并附带示例表吗?
(使用Specflow和Selenium WebDriver和NUnit)
虽然“背景”允许您定义共享表,但它似乎适用于具有多个方案的单个功能。我正在寻找的是一种在不同(.feature)文件的每个功能中使用相同表格的方法。
根据经验,我知道使用像@Chrome这样的标签可以用于各个浏览器(这是我编写大部分测试的方式)但是使用多个标签会导致所有浏览器同时运行,而不是一个接一个地运行
答案 0 :(得分:0)
我不相信你可以在specflow(或任何小黄瓜语言实现)中这样做。正如在相关问题中所提到的,您可以有一个提供表格的背景,但我不确定这可以用于提供场景大纲中的示例,至少我从未见过这个用过,我不知道如何它可以工作。
我能想到的可能(脏)解决方案就是有一个脚本扫描你的功能文件并在你添加一个新的浏览器时更新这些例子(我无法想象这经常是这样),或者有如果在每个场景大纲中输入示例文本都是问题,则添加示例文本的代码片段。
答案 1 :(得分:0)
SpecFlow建议为这些场景使用标签。也许您已经完成了Bookstore教程,然后您将从标签中识别它,表明方案是系统还是浏览器测试。
@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"
现在,您可以为每个标记/类别运行testrunner。
答案 2 :(得分:0)
我认为最易维护的方法是通过在运行测试之前设置环境变量来参数化使用的浏览器。在Given
步骤定义中,您可以使用Environment.GetVariable("...")
在运行时检索值。
另一种方法是创建一个特殊的文本文件,其中包含要使用的浏览器的名称。打开此文件并阅读Given
步骤定义中的内容。
如果您有自动构建,则可以设置电源shell或批处理文件,将此文本文件设置为第一个浏览器,运行所有测试,然后将文本文件设置为下一个浏览器并重新运行测试。冲洗并重复您要使用的每个浏览器。
您可以将其放入Visual Studio中测试项目的<appSettings>
并使用配置转换。从命令行运行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
缺点是你为每个浏览器创建了一个构建配置,但它应该可以解决这个问题。