2

这是一个已知问题(我猜至少在 .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] 钩子。

我也阅读了以下链接:

Specflow+ 社区1

Specflow+ 社区2

堆栈溢出

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

4

0 回答 0