Я пытаюсь использовать функциональные возможности SpecFlow +, как описано здесь , и хотя мне удалось получить дополнительный сценарий ios, который будет отображаться в окне тестового проводника для моих различных тегов при параллельной работе я не могу получить правильное значение 'Target' из преобразованного файла App.config для этого конкретного потока / сценария.
Например,
Сценарий выглядит следующим образом. ..
@Browser_Chrome
@Browser_Edge
Scenario:[Apprentice Management] Navigate to add new apprentice
Given The user is logged into the Smart End Point Assessment website
When The user is on the Apprentice -> Add Apprentice page
Then The user will be on the Apprentice Details page
Раздел целей в файле .srprofile выглядит следующим образом ...
<Targets>
<Target name="Edge">
<Filter>Browser_Edge</Filter>
<DeploymentTransformationSteps>
<EnvironmentVariable variable="Test_Browser" value="Edge" />
</DeploymentTransformationSteps>
</Target>
<Target name="Chrome">
<Filter>Browser_Chrome</Filter>
<DeploymentTransformationSteps>
<EnvironmentVariable variable="Test_Browser" value="Chrome" />
</DeploymentTransformationSteps>
</Target>
</Targets>
Преобразование, которое настраивает значение в перемещенном файле конфигурации. ..
<add key="browser" value="{Target}"
xdt:Locator="Match(key)"
xdt:Transform="SetAttributes(value)" />
Сценарий, отображаемый для каждой цели в окне тестового проводника. Пока все нормально ...
Проблема в том, что если я попытаюсь запустить эти 2 сценария ios вместе, в коде я не удалось получить доступ к правильному значению browser app.config для каждого запущенного потока.
Вот 2 варианта попытки получить это значение в коде ...
string testBrowserOne = ConfigurationManager.AppSettings["browser"];
string testBrowserTwo = Environment.GetEnvironmentVariable("Test_Browser");
Debug.WriteLine($"Test Thread {Thread.CurrentThread.ManagedThreadId}. testBrowserOne = {testBrowserOne}");
Debug.WriteLine($"Test Thread {Thread.CurrentThread.ManagedThreadId}. testBrowserTwo = {testBrowserTwo}");
Результат выполнения этих 2 потоков / сценария ios выглядит следующим образом ....
Test Thread 21. testBrowserOne = Edge
Test Thread 21. testBrowserTwo = Chrome
Test Thread 20. testBrowserOne = Edge
Test Thread 20. testBrowserTwo = Chrome
Я понятия не имею, почему эти 2 разных метода для получения значения возвращают разные значения, но это в значительной степени не имеет значения. Проблема в том, что оба потока возвращают одни и те же значения, что означает, что у меня не может быть одного сценария, запускающего тест chrome, и один сценарий запускает граничный тест одновременно. Они оба будут работать как Chrome или оба будут работать как Edge.
В чем здесь проблема?
Другие соответствующие .srprofile настройки ниже
<Execution stopAfterFailures="0"
testThreadCount="3"
testSchedulingMode="Random"
retryFor="Failing"
retryCount="1"
apartmentState="MTA" />
<VSTest testRetryResults="Unified"
passRateAbsolute="1" />
<Environment testThreadIsolation="SharedAppDomain" platform="x86"/>
Я боюсь, что это симптом использования SharedAppDomain , и нет никакого решения.