Как исправить количество неудачных тестов в 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.