【问题标题】:Specflow - Can you gather all integration test steps to be run as system test against a real server?Specflow - 您能否收集所有集成测试步骤以作为针对真实服务器的系统测试运行?
【发布时间】:2020-10-06 20:55:28
【问题描述】:

我的解决方案中有许多子项目,每个子项目都有自己的 Specflow 集成测试。这些都是针对本地 Web 服务器实例 (Kestrel) 运行的。我想做的是创建一个新项目,它将解决方案中的所有现有测试汇集在一起​​​​并在实时服务器上运行它们。这显然只会偶尔运行。

是否可以不重新定义步骤?

【问题讨论】:

  • 没有看到一些我们无法知道的步骤定义。
  • 您真的需要为此创建一个新项目吗?通过dotnet testvstest.console.exe 的命令行调用,您可以在多个程序集中执行测试。如果您将配置放在外部文件或环境变量中,则可以指定您的服务器。

标签: specflow


【解决方案1】:

如果您可以使 Selenium 或您的 Web 服务调用使用的根 URL 可配置,这应该是可能的。根据您使用的是 .NET Core (appsettings.json) 还是 Framework (App.config),在这些配置文件中添加一些设置以定义根 URL。只需在配置文件中更改该根 URL 并运行测试。

另一种方法是定义一个保存此根 URL 的环境变量,但配置设置将是理想的。诀窍是在您访问应用程序或 Web 服务的 URL 的每个地方都使用此配置设置。专门为此目的创建一个类可能并不难:

internal class TestUrls
{
    private readonly string rootUrl;

    internal string HomePage => rootUrl;

    internal TestUrls(string rootUrl)
    {
        this.rootUrl = rootUrl;
    }

    internal string UserProfilePage(string username)
    {
        return $"{rootUrl}/profiles/{username}";
    }

    internal string UpdateUserWebService(string username)
    {
        return $"{rootUrl}/users/{username}";
    }
}

然后在 [BeforeScenario] 挂钩中初始化并将其注册到 SpecFlow 依赖注入框架:

[Binding]
public class SpecFlowHooks
{
    private readonly IObjectContainer container;

    public SpecFlowHooks(IObjectContainer container)
    {
        this.container = container;
    }

    [BeforeScenario]
    public void BeforeScenario()
    {
        var rootUrl = // read from config file
        var urls = new TestUrls(rootUrl);

        container.RegisterInstanceAs(urls);
    }
}

通过在步骤定义类中将 TestUrls 对象定义为构造函数参数来使用它:

[Binding]
public class UserSteps
{
    private readonly TestUrls urls;

    public UserSteps(TestUrls urls)
    {
        this.urls = urls;
    }

    [When(@"the ""(.*)"" user views their profile")]
    public void WhenTheUserViewsTheirProfile(string username)
    {
        // Generate dynamic URL to user profile page based on argument in step
        var userProfilePageUrl = urls.UserProfilePage(username);

        // navigate to use profile page
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 2013-02-16
    • 1970-01-01
    相关资源
    最近更新 更多