Как исправить количество неудачных тестов в teamcity для повторно выполненных тестов?

Мы используем TeamCity для выполнения тестов Selenium с Specflow + Specrun, проблема заключается в том, что TeamCity считает повторно выполненные тесты.

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

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

Это можно настроить в TeamCity, используя служебные сообщения или что-то еще?

ОБНОВЛЕНО:

Основываясь на ответе, мы можем собирать логи, используя скрипт powershell, и изменять статус сборки, используя служебные сообщения teamcity:

$path = Get-ChildItem %teamcity.build.checkoutDir%\ProjectFolder\bin\Remote\TestResults\specrun.log
$file = Get-content $path
$total = $file | select-string "Total:"
$passed = $file | select-string "Succeeded:"
$failed = $file | select-string "Failed:"

write-host $( "##teamcity[buildStatus text='Tests {0}, {1}, {2}']" -f $total, $passed, $failed )

1 ответ

Решение

TeamCity ведет себя как ожидалось. TeamCity сообщает, что ему говорит Testing Framework. Примерно процесс таков:

  • Выполните шаг, который запускает тесты.
  • Соберите выходные логи.
  • Извлечение статистики: количество выполненных, пройденных и не пройденных испытаний.
  • Сбой сборки, если тесты не пройдены, если настроено на это.

Вы должны настроить ваш Testing Framework (specflow+specrun в вашем случае), чтобы изменить способ, которым он сообщает о повторном выполнении. Вы должны настроить specflow для регистрации повторных выполнений другим способом... если это возможно.

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

Необходимость повторного выполнения указывает, вероятно, на некоторую зависимость от других тестов. Что-то вроде:

  • Тест 001: поиск пользователя Foo1. (НЕДОСТАТКИ)
  • Тест 002: добавляет пользователя Foo1. (Ок)
  • Повторное выполнение теста 001: поиск пользователя Foo1. (Ок)

Правильный путь заключается в том, что TEST001 не имеет зависимости от TEST002, добавляет пользователя Foo1, тестирует поиск и очищает пользователя Foo1.

Другие вопросы по тегам