基础 class 中的 Specflow beforeScenario 调用多次,套件中的每个功能调用一次

Specflow beforeScenario in base class called multiple times, once for each feature in the suite

我有一个测试套件,它利用了我需要 运行 通过基础 class 的测试报告框架,一切正常,但 [BeforeScenario] 每个场景都被调用了 10 次我 运行,我套件中的每个功能都拆解了 1 次,奇怪的是拆解只有 运行 一次。

这是我的基地 class 的样子:

[Binding]
public class BaseStep : AllureReport
{
    public DriverSupport _support;
    public BaseStep(DriverSupport support)
    {
        _support = support;
    }

    [BeforeScenario]
    public void Setup(FeatureContext context)
    {
            _support.startDriver();
            AllureLifecycle.Instance.RunStep(() =>
            {
                TestContext.Progress.WriteLine(
                    $"Test \"{TestExecutionContext.CurrentContext.CurrentTest.FullName}\" is starting...");
            });

    }

    [AfterScenario, Order(0)]
    private void TearDown()
    {

        AllureLifecycle.Instance.RunStep(() =>
        {
            TestContext.Progress.WriteLine(
                $"Test {TestExecutionContext.CurrentContext.CurrentTest.FullName}\" is stopping...");
        });

}

这就是我的特征步骤文件的样子(其中有 10 个)

[Binding]
public class TestSteps1:BaseStep
{

    public TestSteps1(DriverSupport support) : base(suppprt)
    {
    }

    [Given(@"user goes to (.*)")]
    public void GivenUserGoesTo(string p0)
    {
        _support.driver.GoToUrl(p0)
    }

当我 运行 自己在一个功能中只有一个场景时,它会打印启动驱动程序并打印 "test xxx is starting..." 10 次,对于我拥有的每个功能一次,我只希望它 运行一次。

我考虑过将 beforescenario 移动到步骤 classes 本身,但我的许多功能使用来自多个步骤文件的步骤,所以我认为这会是一个问题。有什么方法可以使每个场景只有 运行s BeforeScenario 一次吗?

SpecFlow 将为它在您的测试项目中找到的每种类型执行 BeforeScenario 方法。看起来有10种类型定义或继承了这个方法:

  • BaseStep class
  • BaseStep
  • 的每个子 class

当我希望 BeforeScenario 每次测试仅 运行 一次时 运行 我会将其放入自己的 "hooks" class.

因为前后挂钩都应该只执行一次,所以只需将它们都放在 SpecFlowHooks.cs.

这样的地方

Selenium 网络驱动程序对象应在 SpecFlow 依赖注入框架中注册,并作为构造函数参数直接传递给每个步骤 class。鉴于您发布的代码,我不确定您的步骤定义的通用基础 class 是否有益。

有关使用 SpecFlow 正确注册 Selenium Web 驱动程序对象的更多信息,请参阅我对 的回答。