【发布时间】:2020-10-02 22:21:52
【问题描述】:
我正在处理我试图在 Selenium SpecFlow 项目中实例化共享资源的问题。该资源是一个登录池 (Dictionary
约束 1:该应用程序并非设计为同时登录超过一次登录。也就是说,许多不同的用户可以同时登录,但相同的用户不应该同时登录。所以字典的项目需要一次限制为一个线程。
约束2:项目上没有依赖注入,我正在寻找应用程序状态事件的等价物。
注意 1:我来自 MVC ASP.NET 背景,并且会执行类似于 global.asax App_Start() 方法的操作。
注意 2:我将从步骤定义访问我的字典以“保留”登录名,以及从挂钩访问我的字典以“释放”登录名。
Specflow 中有这样的东西吗?
谢谢 德文
2020 年 9 月 24 日更新:
我已经在这个问题上做了更多的工作,并决定使用 Singleton 课程。 Singleton 在第一次被调用之前不会被实例化,然后只会实例化一个实例。
2020 年 9 月 24 日更新 #1:
我发现使用单例模式的一个警告,问题是我们的 Specflow 项目配置为“带有内存隔离的并行执行”,这意味着您不能在线程之间共享状态,这似乎是根据 Specflow 的推荐方式。当我发现我的 Dictionary
话虽如此,我也不确定我是否实现了 DI 框架,它不会有同样的问题。
我现在正在寻找其他形式的持久存储,可能会尝试 Azure Storage Tables。
-
参考:Specflow 并行执行与内存(AppDomain)隔离 - https://docs.specflow.org/projects/specflow/en/latest/Execution/Parallel-Execution.html#parallel-execution-with-memory-appdomain-isolation
【问题讨论】:
-
你说你没有,但是有什么理由不能添加依赖/上下文注入吗?如果您需要,我很乐意为您提供样板以帮助您?它可能还需要支持框架的其他领域。 Specflow 在他们的文档docs.specflow.org/projects/specflow/en/latest/Bindings/… 中谈论 bodi 和他们的方法
-
@RichEdwards,网址中缺少连字符,看起来这是正确的:docs.specflow.org/projects/specflow/en/latest/Bindings/…
-
@Renat - 就是这个!复制粘贴错误。很好的收获,感谢朋友的纠正!
-
您使用的是哪个版本的 SpecFlow? SpecFlow 绝对支持依赖注入。见docs.specflow.org/projects/specflow/en/latest/Bindings/…
-
依赖注入超出了我现在想要完成的工作范围,但我希望尽快实现它。感谢您的参考。除了直立 DI 之外,有没有其他方法可以在应用程序启动时、测试开始执行之前调用一次代码。
标签: c# selenium specflow selenium-grid