Как не потерять параллельное тестирование с tfs build и сохранить работу агентов сборки

Я настраиваю тестовую сборку TFS и хочу поддерживать полное параллельное тестирование. Лишь некоторые из наших тестов выполняются параллельно, и поэтому после их завершения в агенте сборки агент сборки не получает новые тесты для тестирования. Следовательно, сборка, на которую у нас ушло 30 минут, начинается с часа и более, потому что все тесты переименования выполняются только на одном агенте сборки. Все остальные 20 агентов сборки перестают работать через несколько минут, потому что они завершили выполнение основной части тестов. Мы запускаем наши параллельные тесты с MSTest2. Наш RunSettings.runSettings объявляется запущенным как параллельный и является правильным.

Мы пробовали различные расширенные параметры выполнения в сборке. Мы пробовали на основе прошедшего времени выполнения тестов. на основе количества тестов и агентов и на основе тестовых сборок. Ни один из них не работает - после того, как агент завершил большую часть своих тестов, он просто возвращается в режим ожидания. Мы попытались включить машину в сборку, чтобы получить только один тест для каждой партии, и это действительно было быстрее, но мы потеряли привилегию параллельного тестирования на каждой машине.

Мы хотим, чтобы наша сборка работала следующим образом: мы запускаем ее, и запускаются тесты. Все машины получат количество тестов для запуска. Когда агент сборки завершит выполнение всех заданных ему тестов, он получит тесты от машины, которая не завершила выполнение своих тестов. Таким образом, мы будем наслаждаться параллельной тестовой сборкой и параллельными тестами на машине. Мы не хотим доходить до того момента, когда наша сборка состоит из 2 шагов: 1 шаг, который запускает тесты параллельно, и другой, который запускает наши тесты, которые не являются параллельными.

Можно ли создать сборку, отвечающую всем вышеперечисленным? Мы начали терять голову из-за этого и не нашли примеров сборок, которые будут работать так, как мы хотим. Или как хотя бы изменить настройки, чтобы агент сборки не переставал получать новые тесты после того, как он закончил свою массу.

С уважением, и я надеюсь, что я достаточно ясно выразился.


person Noa Sasson    schedule 28.12.2018    source источник
comment
2018.1 насколько я помню.   -  person Noa Sasson    schedule 28.12.2018


Ответы (1)


Нет, это невозможно. Тесты распределяются в начале тестового запуска. Вы можете сделать следующее:

  • Убедитесь, что все ваши медленные тесты отмечены атрибутом [TestCategory("slow")].
  • Создайте одну задачу «Выполнить тесты» в Azure Pipelines и используйте фильтр для выполнения всех тестов кроме медленных. Это распределит оставшиеся тесты между всеми агентами.
  • Создайте одну задачу «Выполнить тесты» в Azure Pipelines и используйте фильтр, чтобы запускать только медленные тесты. Это распространит все медленные тесты на всех агентов.

У вас будет два тестовых прогона, но ваши тесты будут более равномерно распределены.

В качестве дополнительного преимущества ваши медленные тесты можно опционально пропустить, если один из ваших быстрых тестов уже не работает.

В основном то, что я писал здесь:

person jessehouwing    schedule 28.12.2018
comment
Немного грустно это слышать, но это то, чего я боялся. Я до сих пор не понимаю, почему агенты сборки перестают выполнять больше тестов из списка и переходят в режим ожидания. Это еще одна вещь, которую мне нужно предотвратить. - person Noa Sasson; 28.12.2018
comment
Тесты просто распределяются в начале задания, и во время выполнения нет связи между агентами или агентом и сервером. Он значительно упрощает работу и работает со всеми существующими технологиями. - person jessehouwing; 28.12.2018
comment
Да, но это немного странно, потому что таким образом вы фактически теряете время, потому что агент перестанет работать раньше всех остальных (таким образом, время, необходимое для запуска тестов, увеличится). Нет? - person Noa Sasson; 28.12.2018
comment
Если вы правильно классифицируете свои тесты, вы получите 2 фазы тестирования, которые будут распределены как можно лучше и будут максимально загружать всех агентов. С небольшими накладными расходами на настройку второй фазы. Лучшее решение - преобразовать эти медленные тесты в быстрые; 0). - person jessehouwing; 28.12.2018
comment
Если бы это было легко, я бы сделал это раньше;) Кстати, знаете ли вы, оставляют ли сборки какие-либо временные файлы на машине? Не все наши машины вам много места и меня беспокоит, что они разобьются из-за потери места - person Noa Sasson; 28.12.2018
comment
Нет фреймворка, поддерживающего синхронизацию между агентами? - person Noa Sasson; 28.12.2018
comment
Нет. Платформа, поддерживающая агентов синхронизации, отсутствует. - person jessehouwing; 28.12.2018
comment
Можно ли параллельно запускать разные фазы? - person Noa Sasson; 01.01.2019
comment
да. Вы можете настроить зависимости между фазами так, чтобы они запускались одновременно. Но если они нацелены на одни и те же тестовые агенты, они могут просто ждать ... - person jessehouwing; 01.01.2019