Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 应用程序启动事件流_C#_Selenium_Specflow_Selenium Grid - Fatal编程技术网

C# 应用程序启动事件流

C# 应用程序启动事件流,c#,selenium,specflow,selenium-grid,C#,Selenium,Specflow,Selenium Grid,我正在处理一个问题,我试图在Selenium SpecFlow项目中实例化一个共享资源。资源是一个登录名池(字典) 限制条件1:应用程序设计为一次登录的时间不超过登录时的时间。也就是说,许多不同的用户可以同时登录,但同一用户不应同时登录。因此,字典中的项目需要一次限制为一个线程 约束2:项目上没有依赖注入,我正在寻找应用程序状态事件的等价物 注1:我来自MVC ASP.NET背景,我会使用global.asax App_Start()方法 注2:我将从步骤定义到“保留”登录以及从钩子到“释放”登

我正在处理一个问题,我试图在Selenium SpecFlow项目中实例化一个共享资源。资源是一个登录名池(字典)

限制条件1:应用程序设计为一次登录的时间不超过登录时的时间。也就是说,许多不同的用户可以同时登录,但同一用户不应同时登录。因此,字典中的项目需要一次限制为一个线程

约束2:项目上没有依赖注入,我正在寻找应用程序状态事件的等价物

注1:我来自MVC ASP.NET背景,我会使用global.asax App_Start()方法

注2:我将从步骤定义到“保留”登录以及从钩子到“释放”登录访问我的字典

Specflow中有类似的东西吗

谢谢 德文

更新日期:2020年9月24日:

我对这个问题做了更多的研究,我决定参加一个单身班。在第一次调用之前,不会实例化Singleton,然后只实例化单个实例

更新日期:2020年9月24日#1:

我发现使用Singleton模式有一个警告,问题是我们的Specflow项目配置为“带内存隔离的并行执行”,这意味着您不能在线程之间共享状态,根据Specflow,这似乎是推荐的方式。当我发现我的字典有25个独特的实例时,我很难发现这一点

也就是说,我不确定即使我实现了DI框架,它也不会有同样的问题

我现在正在寻找其他形式的持久存储,可能会尝试Azure存储表

  • 参考:单例模式-

  • Ref:Specflow与内存(AppDomain)隔离并行执行-

似乎是重复的,但由于其年代久远且缺乏代码示例,我决定不将此问题标记为重复


约束2:项目上没有依赖注入,我正在寻找应用程序状态事件的等价物

您说没有依赖项注入,但是由于您使用的是SpecFlow,所以您已经有了BoDi依赖项注入框架。此外,SpecFlow已经以线程安全的方式提供了自己的步骤间共享数据的方式:ScenarioContext对象

只需在步骤定义构造函数中将ScenarioContext对象声明为参数(请参见),将其分配给字段,然后在步骤中使用它。您可以在多个类中执行此操作以共享数据(请参阅):


ScenarioContext对象作为构造函数参数传递,每个测试初始化一个对象。这使ScenarioContext对象线程安全,并启用,这正是您真正想要的。

您说您没有它,但有任何理由不能添加依赖项/上下文注入吗?我很乐意为您提供锅炉板,以帮助您,如果您需要它?还可能需要它来支持框架的其他领域。Specflow在他们的文档@RichEdwards中谈论bodi和他们的方法,url中缺少连字符,看起来这是正确的:@Renat-就是那个!复制粘贴错误。接得好,谢谢你的纠正,伙计!您使用的是哪个版本的SpecFlow?SpecFlow绝对支持依赖注入。请看,依赖注入超出了我目前试图实现的范围,但我希望尽快实现它。谢谢你的推荐信。除了支持DI之外,还有没有其他方法可以在应用程序启动时,在测试开始执行之前调用代码一次。
[Binding]
public class LoginSteps
{
    private readonly ScenarioContext scenario;

    public LoginSteps(ScenarioContext scenario)
    {
        this.scenario = scenario;
    }

    [Given(@"User is logged in as ""(.*)""")]
    public void GivenUserIsLoggedInAs(string username)
    {
        // log user in
        scenario["LoggedInUser"] = username;
    }
}

[Binding]
public class SomeOtherStepDefinitionFile
{
    private readonly ScenarioContext scenario;

    public SomeOtherStepDefinitionFile(ScenarioContext scenario)
    {
        this.scenario = scenario;
    }

    [When(@"some other step requiring current user")]
    public void WhenSomeOtherStepRequiringCurrentUser()
    {
        var currentUsername = (string)scenario["LoggedInUser"];
    }
}