如何获取Scenario Outline Example迭代编号

时间:2014-05-15 23:52:59

标签: c# specflow scenarios

我使用Specflow,Selenium WebDriver和C#进行了以下测试:

Scenario Outline: Verify query result
    Given I'm logged in
    When I enter "<query>"
    Then I should see the correct result

    Examples: 
    | query  |
    | Query1 |
    | Query2 |
    | Query3 |

在每个场景之后,我将屏幕截图保存到基于ScenarioContext.Current.ScenarioInfo.Title命名的文件中。 但是,我无法找到区分迭代的好方法,因此屏幕截图会被覆盖。我可以在Examples表中添加一个列,但我想要一个更通用的解决方案...

有没有办法知道正在执行哪个迭代?

3 个答案:

答案 0 :(得分:2)

在您的步骤定义中,您可以在ScenarioContext.Current中记录当前查询,例如

[When(@"I enter (.*)")]
public void WhenIEnter(string query)
{
 ScenarioContext.Current["query"] = query;
}

然后在AfterScenario步骤中,您可以检索此值以识别刚刚运行的示例迭代,例如。

[AfterScenario]
void SaveScreenShot()
{
 var queryJustRun = ScenarioContext.Current["query"];

 // You could subsequently append queryJustRun to the screenshot filename to 
 // differentiate between the iterations
 // 
 // e.g. var screenShotFileName = String.Format("{0}_{1}.jpg",
 //                                ScenarioContext.Current.ScenarioInfo.Title,
 //                                queryJustRun ); 
}

答案 1 :(得分:0)

这是不可能的,因为我可以告诉; 更清楚的例子;

Scenario Outline: Add two numbers
    Given I have entered <first> into the calculator
    And I have entered <last> into the calculator
    When I press add
    Then the result should be <result> on the screen
Examples: 
| name   | first | last | result |
| simple | 1     | 1    | 2      |
| zero   | 0     | 0    | 0      |

如果查看生成的代码,那么<name>不会保存在任何地方,它不会出现在ScenarioContext或FeatureContext上

报告生成器中的TestExecutionResults似乎确实有这个信息,Model.TestExecutionResults [] .TestItemResult.TestNode.Description是一个复合字符串,其中包含<name>元素;但它如何到达那里对我来说是一个谜。

在规范转换器生成的代码和报告生成器

中进行了检查

答案 2 :(得分:0)

名称除非您在方案中已定义,否则不会显示名称,我可以看到您没有。您的功能可以像这样写出

  Scenario Outline: Performing mathematical operation
    Given I am on <name> scenario
    And I have entered <first> into the calculator
    And I have entered <last> into the calculator
    When I do the <operation> 
    Then the result should be <result> on the screen
Examples: 
| name   | first | last | result | operation |
| simple | 1     | 1    | 2      | add       |
| subs   | 6     | 2    | 4      | substract |

构建上述内容的优势在于,您可以利用相同的方案执行多项操作,例如“添加”,“减去”,“乘法”,等等