我已升级到Specflow 2.0.0。使用NUnit 3(也尝试使用XUnit),我希望能够并行执行测试用例,以减少运行测试所用的时间。
在尝试并行执行测试时,会返回一个错误,指出我无法使用FeatureContext.Current和ScenarioContext.Current。
测试使用这些来提取附加日志记录的功能和方案的名称。
测试还使用标签来控制测试。
例如: 我知道可以将标签放在属性
中[Binding]
public class SpecFlowHooks
{
public ScenarioContext context;
public SpecFlowHooks(ScenarioContext scenarioContext)
{
context = scenarioContext;
}
[BeforeScenario("SpecialCase")]
public void BeforeScenario_SpecialCase() {
do some stuff
}
[BeforeScenario]
public void BeforeScenario() {
do different stuff
}
}
问题在于BeforeScenario始终运行。如果标签“SpecialCase”不存在,我不希望它运行,因为应用程序将不处于正确的状态。因此,如果标签“SpecialCase”存在,我会提取标签并执行不同的操作。
如何在不使用
的情况下找到标签列表List<String> tags = ScenarioContext.Current.ScenarioInfo.Tags.ToList();
答案 0 :(得分:1)
并行执行的替代方法是允许specflow使用的依赖注入系统为您提供ScenarioContext
实例。为此,您的步骤类接受ScenarioContext
的实例并将其存储在字段中:
[Binding]
public class StepsWithScenarioContext
{
private readonly ScenarioContext scenarioContext;
public StepsWithScenarioContext(ScenarioContext scenarioContext)
{
if (scenarioContext == null) throw new ArgumentNullException("scenarioContext");
this.scenarioContext = scenarioContext;
}
[Given(@"I put something into the context")]
public void GivenIPutSomethingIntoTheContext()
{
scenarioContext.Set("test-value", "test-key");
}
}
可以找到有关如何使用并行执行的更全面的解释here
需要采用类似的方法来获取标签。再次添加一个构造函数,它将ScenarioContext
带到包含[BeforeScenario]
方法的类中,并将ScenarioContext
保存在字段中并使用此字段而不是ScenarioContext.Current