这是一个已知问题(我猜至少在 .Net Core 中)。
我正在尝试使用此处描述的 SpecFlow+ 目标功能。
一旦在 .srprofile 中实现,我可以看到一个测试在 VisualStudio 中根据目标被分成两个不同的副本(在我的例子中:Chrome、IE)。当我在单线程上运行测试时,目标被完美地挑选出来。但是当我在多个线程上运行时,目标是相同的类型。
例如,如果我在两个线程上运行测试,拾取的目标是:
1) Chrome, Chrome as opposed to Chrome, IE.
(or)
2) IE, IE as opposed to Chrome, IE.
我的 default.srprofile 是:
<?xml version="1.0" encoding="utf-8"?>
<TestProfile xmlns="http://www.specflow.org/schemas/plus/TestProfile/1.5">
<Settings projectName="UIAutomation" />
<Execution testThreadCount="1" retryCount="2" />
<Environment testThreadIsolation="Process"/>
<Report>
<Template name="ReportTemplate.cshtml" outputName="UIReport{now:yyyy-MM-ddThhmmss}.html"/>
</Report>
<Targets>
<Target name="Chrome">
<Filter>@Chrome</Filter>
<DeploymentTransformationSteps>
<EnvironmentVariable variable="deviceType" value="Chrome" />
</DeploymentTransformationSteps>
</Target>
<Target name="IE">
<Filter>@IE</Filter>
<DeploymentTransformationSteps>
<EnvironmentVariable variable="deviceType" value="IE" />
</DeploymentTransformationSteps>
</Target>
</Targets>
<TestThreads>
<TestThread id="0">
<TestAffinity>@Chrome</TestAffinity>
</TestThread>
<TestThread id="1">
<TestAffinity>@IE</TestAffinity>
</TestThread>
</TestThreads>
<TestAssemblyPaths>
<TestAssemblyPath>UIAutomation.dll</TestAssemblyPath>
</TestAssemblyPaths>
</TestProfile>
所以我尝试了以下方法:
1) TestthreadIsolation 环境变量值作为 Process 和 SharedAppDomain。
2) 使用过滤器在正确的目标上运行测试。
3)我也尝试运行官方的 SpecFlow 示例项目。我能够重现同样的问题。
4) 另外,我尝试使用此处建议的 [BeforeTestRun] 和 [AfterTestRun] 钩子。
我也阅读了以下链接:
SpecRun Google+ 社区上似乎至少有 4 或 5 个基于此问题的线程,但这些解决方案对我不起作用。或者我应该转向 .NET Framework 而不是 .NET Core 任何帮助将不胜感激!