问题标签 [specrun]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
512 浏览

c# - 无法在 c# specflow .net Core 中生成 Allure 报告。值不能为空。(参数'key')值不能为空。OnScenarioStart();

我在使用 Specflow 和 Specrun 的 .netcore 3.1 上编写了一个 C# 测试自动化框架。

我可以使用 Specrun 运行测试并获得报告,但是我想获得 Allure 报告。

所以我安装了 Specflow.Allure。我有一个 allureConfig.json。

我希望我现在可以运行测试并获得 Allure 报告。

然而,事情似乎并没有那么简单。

当我尝试运行测试时,如果失败并显示如下消息。

有人知道我在做什么错吗?我是否需要添加更多代码才能获得 Allure 报告?

消息:值不能为空。(参数“键”)堆栈跟踪:System.ArgumentNullException:值不能为空。(参数'key') ConcurrentDictionary 2.ThrowKeyNullException() ConcurrentDictionary2.TryGetValue(TKey key, TValue& value) ConcurrentDictionary 2.get_Item(TKey key) AllureStorage.Get[T](String uuid) AllureLifecycle.UpdateFixture(String uuid, Action1 update) AllureLifecycle.UpdateFixture(Action1 update) AllureLifecycle.StopFixture(Action1 beforeStop) AllureBindingInvoker.InvokeBinding(IBinding binding, IContextManager contextManager, Object[] arguments, ITestTracer testTracer, TimeSpan& duration) TestExecutionEngine.InvokeHook(IBindingInvoker invoker, IHookBinding hookBinding, HookType hookType) line 352 RunnerTestExecutionEngine.InvokeHook(IBindingInvoker invoker, IHookBinding hookBinding, HookType hookType) TestExecutionEngine.FireEvents(HookType hookType) line 338 TestExecutionEngine.FireScenarioEvents(HookType bindingEvent) line 322 RunnerTestExecutionEngine.FireScenarioEvents(HookType bindingEvent) TestExecutionEngine.OnScenarioStart() line 199 RunnerTestExecutionEngine.OnScenarioStart() TestRunner.OnScenarioStart() line 55 LM01InitialCaseFeature.ScenarioStart ) LM01InitialCaseFeature。LM01_01DefaultLM01InitialCase() 第 4 行 StaticOrInstanceMethodExecutor.ExecuteInternal(ITestThreadExecutionContext testThreadExecutionContext) StaticOrInstanceMethodExecutor.Execute(ITestThreadExecutionContext testThreadExecutionContext) TestNodeTask.Execute()

0 投票
0 回答
95 浏览

specflow - 并行运行时 SpecFlow+ 目标值不匹配

这是一个已知问题(我猜至少在 .Net Core 中)。

我正在尝试使用此处描述的 SpecFlow+ 目标功能。

一旦在 .srprofile 中实现,我可以看到一个测试在 VisualStudio 中根据目标被分成两个不同的副本(在我的例子中:Chrome、IE)。当我在单线程上运行测试时,目标被完美地挑选出来。但是当我在多个线程上运行时,目标是相同的类型。

例如,如果我在两个线程上运行测试,拾取的目标是:

我的 default.srprofile 是:

所以我尝试了以下方法:

1) TestthreadIsolation 环境变量值作为 Process 和 SharedAppDomain。

2) 使用过滤器在正确的目标上运行测试。

3)我也尝试运行官方的 SpecFlow 示例项目。我能够重现同样的问题。

4) 另外,我尝试使用此处建议的 [BeforeTestRun] 和 [AfterTestRun] 钩子。

我也阅读了以下链接:

Specflow+ 社区1

Specflow+ 社区2

堆栈溢出

SpecRun Google+ 社区上似乎至少有 4 或 5 个基于此问题的线程,但这些解决方案对我不起作用。或者我应该转向 .NET Framework 而不是 .NET Core 任何帮助将不胜感激!

0 投票
0 回答
49 浏览

c# - C# Specflow+ 如何在 .netcore 中为 TestRail API 创建线程之前一次性运行一些代码

我用 C# 编写了一个测试自动化框架,它使用 Specflow 和 SpecFlow+ 作为 Runner。

我正在使用 TestRail API 将结果写入 TestRail。

我想在启动自动化测试时创建一个新的测试运行,然后将所有结果写入该测试运行。

所以我写了一些代码使用

挂钩以创建测试运行。

当我在单线程模式下运行时,这工作正常。

但是当我在多线程模式下运行时,会为每个线程创建一个新的测试运行。

如何在创建线程之前运行一些只运行一次的代码来创建一个测试运行?

0 投票
1 回答
455 浏览

.net - SpecRun- 测试未显示在测试资源管理器中

我有一个问题,我的测试没有显示在测试资源管理器中,我创建了一个功能文件并生成了步骤定义,我安装了以下包

我还尝试从 %TEMP% 文件夹中删除与 specflow 相关的任何内容,但这没有帮助,而且我有不同的项目,我在其中设置了 specflow 并且一切正常。

注意:如果没有 - SpecRun.SpecFlow.3-1-0 包,测试确实会被发现,但我收到以下错误

0 投票
0 回答
274 浏览

c# - 使用带有 Selenium 的 specflow 只运行一次 BeforeTestRun 和 AfterTestRun

我在这里看到了这个问题How to execute before and after test run only once in parallel execution of specflow - 尽管我无法理解如何并行运行 Hooks 一次

我使用 Specflow+ Runner 作为我的测试提供者,我的线程数是 3,我有一个 BeforeTestRun 钩子来创建我的测试数据,我只想执行一次该钩子,但默认情况下 BeforeTestRun 在每个线程上运行,我也看过在这里的例子: https ://github.com/SpecFlowOSS/SpecFlow.Plus.Examples/tree/master/CustomDeploymentSteps ,

但我不确定它是如何工作的,谁能帮我解决这个问题。

输出是:

我的 Default.srprofile 看起来像这样

0 投票
1 回答
316 浏览

specflow - Serilog 无法使用 readfrom 找到 appsettings 文件

我以前使用过这个配置很多次,从来没有遇到过任何问题,所以我把我的项目剥离了基础。我将 Specflow 与 Specrun 一起使用,而 specrun 部分是唯一发生变化的部分。

我正在尝试使用位于 my.net 核心 bin 基本目录中的 appsettings.json 文件配置 serilog 记录器。\bin\Debug\netcoreapp3.1

以前我可以只引用没有基本路径的路径的 appsettings,但是当我从 NUnit 移动到 Specflow 时,这种情况发生了变化。仍然使用basepath仍然可以找到位置。但是,当我尝试创建记录器并使用 readfrom 时,它是从一个奇怪的位置引用 appsettings 文件,而不是我刚刚设置的配置变量中的 ConfigurationRoot。

下面是两个设置变量。第一个用于 appsettings 的配置根目录,第二个用于 serilog 记录器。第一个是成功的,它给了我看起来是一个有效的 IConfiguration 对象。第二个是错误发生的地方。这个错误是“System.IO.FileNotFoundException:'找不到文件'\bin\Debug\netcoreapp3.1\SpecFlowPlusRunner\netcoreapp3.1\TechTalk.SpecRun.Framework.Executor.anycpu.netcoreapp3_1.deps.json'。'”

一些额外的注意信息。这是一个 netcore 3.1 应用程序的代码在包含的 specflow 类包中执行。

0 投票
1 回答
308 浏览

c# - Specflow 场景在测试资源管理器中按字母顺序排序。有什么办法可以改变这个顺序?

我有多个功能文件,每个功能文件在我的项目中都有多个场景大纲。

我看到测试资源管理器中的层次结构是这样的

  1. 项目文件名
  2. 程序集名称
  3. 特征文件名
  4. 每个特征文件下的场景

所以基本上在测试资源管理器中看到的测试是按功能文件名分组的。假设我有 3 个测试如下

  1. 配置
  2. 执行
  3. 恢复

我希望这些测试以特定的顺序(恢复、配置、执行)执行,而不是基于默认的字母顺序

我已经检查过。那是另一种情况,对我没有帮助

有什么办法可以实现吗?

0 投票
1 回答
178 浏览

specflow - 在 Specflow+ 运行器和 SharedAppDomain 线程隔离中使用 Specflow 在每个线程之前和之后执行代码

在 Specflow 中与 SharedAppDomain 线程隔离并行执行测试时,有什么方法可以在每个特定线程之前和之后执行代码?

我为此目的使用了 BeforeTestRun/AfterTestRun Hooks,但似乎自从上一个 Specflow 版本以来,这仅在运行测试“AppDomain”线程隔离时才有可能,并且在 SharedAppDomain 隔离中,每个测试只运行一次。

0 投票
1 回答
195 浏览

c# - Specflow - 如何在 C# 中以编程方式从 srprofile 获取目标名称

有没有办法获得在 specflow 的 srs 配置文件中定义的目标名称?

以下是 srs 配置文件中定义的内容,

我想获取目标“登录”的名称并将其保存在 C# 中的变量中。

0 投票
1 回答
242 浏览

c# - 如何通过cmd运行多个specflow项目?

我有许多 .Net Framework 类库项目,都安装了 specflow 和 specrun.specflow nuget 包。

我可以在 Visual Studio 2019 的测试资源管理器中运行所有这些项目,但我想知道这是否可以使用 cmd 提示符运行。

我计划通过创建一个批处理文件来实现自动化,以通过 cmd 运行所有项目,而无需在 VS 2019 中使用测试资源管理器并手动运行它们

有人知道这是否可以实现吗?如果可能,您能否分享运行它们所需的命令?

编辑1:

根据 Greg Burghardt 的建议,我做了以下

  1. 我去了 vstest.console.exe 所在的路径(C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\Extensions\TestPlatform)
  2. 从该路径打开 cmd 并运行 cmd vstest.console.exe mytests.dll 起初我收到一个错误,说找不到上面的 dll,所以我将 dll 粘贴到相同的位置,然后再次执行相同的命令,我收到以下消息

C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\Extensions\TestPlatform\mytests.dll 中没有可用的测试。确保测试发现者和执行者已注册并且平台和框架版本设置正确,然后重试。

此外,可以使用 /TestAdapterPath 命令指定测试适配器的路径。示例 /TestAdapterPath:。

编辑2:

我没有复制 dll 并将其粘贴到 vstest.console.exe 路径位置,而是直接提供了 dll 所在的路径并运行了 dll 中存在的所有测试,因此 cmd 看起来像

vstest.console.exe D:\Specflow\Dummy\bin\Debug\mytests.dll