#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:
Вот причина, по которой вы не должны использовать статические классы в своем коде, код со статическими (похожими на глобальные) значениями считается вредным и сложным для тестирования