Specflow как реализовать изоляцию домена приложения с помощью Nunit 3

#appdomain #specflow #nunit-3.0

#appdomain #specflow #nunit-3.0

Вопрос:

Я написал тесты автоматизации в Specflow 2.0, NUnit 3.X, TeamCity и Visual Studio 2013. Я пытаюсь запустить тесты параллельно, но они терпят неудачу, потому что код использует статические классы / объект.

На веб-сайте Specflow рекомендуется запускать потокобезопасные тесты (если архитектура зависит от статического состояния), используя ПАРАЛЛЕЛЬНОЕ ВЫПОЛНЕНИЕ С ИЗОЛЯЦИЕЙ ПАМЯТИ (APPDOMAIN)
http://www.specflow.org/documentation/Parallel-Execution /

Но нет никакой информации о том, как это сделать, и даже погуглив, я не смог найти ни одной соответствующей статьи.

Я действительно признателен, если кто-нибудь может помочь мне понять, как мы это делаем.

Спасибо за вашу помощь, Сэтти

Ответ №1:

Способ настройки изоляции зависит от используемого вами тестового модуля.
Я не уверен на 100%, что NUnit поддерживает изоляцию домена приложения, но хорошим началом для выяснения этого была бы документация по атрибутам Parallelizable:https://github.com/nunit/docs/wiki/Parallelizable-Attribute

Разделение домена приложения или процесса возможно, если вы используете SpecFlow Runner (http://www.specflow.org/plus /).
Вот запись в блоге о различных режимах в SpecFlow Runner: https://the-engineers.net/2016/04/08/using-specflowrunners-parallelization-features /


Полное раскрытие: я являюсь одним из разработчиков SpecFlow Runner

Комментарии:

1. Спасибо, Андреас, я могу запускать несколько потоков, но проблема в том, что тесты не являются потокобезопасными, чего я и пытаюсь достичь. К сожалению, specflow платный, и я бы попытался заставить это работать без него, если смогу первым.

2. Как сопровождающий NUnit, я могу сказать вам, что параллельное выполнение NUnit не поддерживает изоляцию домена приложения для параллельных тестов, только для самого тестового запуска. Это хорошая идея для функции, но поскольку .NET Core в ближайшее время не будет поддерживать создание доменов приложений, это будет ниже в наших приоритетах.

3. Привет, @RobProuse, что-нибудь изменилось за последние 7 лет? Теперь эта функция разрешена для NUnit?

4. @JMFS .NET Core не поддерживает и никогда не будет поддерживать AppDomains, поэтому мы не добавляли и не будем добавлять в NUnit никаких дополнительных функций AppDomain. Вся новая работа будет заключаться в том, чтобы убедиться, что NUnit отлично работает с текущими версиями .NET.

5. Для параллельного запуска тестов у NUnit теперь есть FixtureLifeCycle атрибут, который упрощает написание потокобезопасных тестов. Проверьте это.

Ответ №2:

Вот причина, по которой вы не должны использовать статические классы в своем коде, код со статическими (похожими на глобальные) значениями считается вредным и сложным для тестирования