Teamcity counts the same test twice and more times Follow
Hello!
I'm using Teamcity 5.0 build 10181.
I have Maven 2 build configuration which run following goals: clean integration-test emma:emma. During project building some tests executes 2 times, but all Surefire reports in target/surefire-reports directory are correct.
But on Projects page after build configuration Run Teamcity shows 2-3 times more tests than actually exists in surefire-reports. Tests page contains 2-3 copies of the same test, sometimes with different Durations.
I've tried to adjust XML Report Processing section of Maven 2 build configuration page by choosing:
Import data from: Surefire
Report paths: target/surefire-reports/*.xml
but nothing changed.
How fix this?
Thank you,
Bulat Nigmatullin
Please sign in to leave a comment.
If you are using Maven runner do not use data import from the Surefire, because runner will do it itself. Import should only be used if runner failed to determine tests at all.
Couldn't this be the case?
http://www.jetbrains.net/confluence/display/TCD4/Maven2_
No.
This is the data from TeamCity dedicated machine.
$ mvn --version
Maven version: 2.0.8
Java version: 1.6.0_06
OS name: "linux" version: "2.6.24-16-server" arch: "i386" Family: "unix"
2.4.3 maven-metadata-central.xml maven-metadata-central.xml.sha1
As you can see, the latest 2.4.3 version of Maven Surefire plugin used.
I don't use data import, but problem is the same.
Full Build Log added.
Tests.CSV added.
Attachment(s):
jabber_Core_Trunk_Build_46-tests.csv.zip
jabber_Core_Trunk_Build_46.log.zip
Is it the full build log or a snippet? If the latter please provide the full one.
Sorry. Disregard the previous message. I've seen that this is really a full log
According to your log, your tests were executed twice: the first time during running the intergration-test goal and the second time during the emma:emma goal.
So they were reported twice as they should.
So what do you think is wrong with that?
Surefire reports in target/surefire-reports directory are correct and contains no duplicates. I want to see them.
Is it possible to configure Teamcity look only to surefire-reports for tests results.
TeamCity looks right into surefire reports for test result. And it looks into there each time a test suite is executed. Since you run the tests twice TeamCity looked into surefire reports twice. You see no duplicates because the first-run reports are overwritten with the second execution.
1. Do you think this is right usecase for TeamCity. Maybe it should be switched just to one lookup to surefire-reports after Maven execution ends?
2. I'm trying to create workaround by choosing Command Line Build runner and configuring XML Report Processing. But TeamCity complains "Cannot run process: Cannot run program "/usr/bin/mvn clean integration-test emma:emma" (in directory "/home/bulatnig/agent/work/e0d7ab60bbc5d9d8"): java.io.IOException: error=2, No such file or directory"
P.S. Can you speak russian? It'll be more convenient for me.
Attachment(s):
jabber_Core_Trunk_Build_49.log.zip
Sure, I can.
Мы полагаем правильным сообщать о каждом факте выполнения какого-либо теста хотя бы из тех соображений что один тест может выполниться дважды с разными результатами.
У меня, собственно, ответный вопрос: зачем Вы запускаете тесты два раза? Не достаточно ли было бы запустить просто mvn clean compile emma:emma, например?
По всей видимости это означает что агент не смог найти файл /usr/bin/mvn. Убедитесь, что он там присутствует и доступен для пользователя, под которым запущен агент.
1. В модуле у нас присутствует 2 вида тестов: JUnit и JUnit4OSGi (интеграционные) . Последние выполняются при вызове integration-test. При этом подгружаются все зависимости модуля, OSGi runtime и он запускается в практически полностью рабочем серверном окружении.
emma:emma - это Code Coverage Reporter, она инструментирует тесты и потом генерирует отчет по покрытию кода тестами. Думаю, Вы и так это прекрасно знаете.
Проблема в том, что integration-test по Maven Build Lifecycle находится далеко после compile, поэтому приходится прогонять тесты два раза.
2. Этим же пользователем захожу в указанную work директорию - все работает.
TeamCity же жалуется: Cannot run process: Cannot run program "/usr/share/maven22/bin/mvn clean integration-test emma:emma" (in directory "/home/bulatnig/agent/work/e0d7ab60bbc5d9d8"): java.io.IOException: error=2, No such file or directory
Я хочу сразу оговориться, что мы у себя Maven не используем. Поэтому не удивляйтесь моим вопросам. Я легко могу и не знать о каких-то особенностях его работы.
А что если попробовать запустить junit4osgi напрямую, что-то типа mvn test-compile junit4osgi:test emma:emma? Насколько я понимаю это не приведет к автоматическому запуску юнит-тестов.
Таким образом у Вас сначала пройдут только OSGI тесты, а потом emma запустит обычные.
Что касается пункта 2, попробуйте написать /bin/sh -c "/usr/share/maven22/bin/mvn ..."
1. Попробовал mvn clean compile emma:emma org.apache.felix:maven-junit4osgi-plugin:test
Жалуется на то, что ему нужен jar. Т.е. проект должен предварительно собраться как минимум на уровне package и выдать результирующий jar, только потом можно будет вызвать junit4osgi. Но если изменить на "mvn clean package emma:emma ...", то получим, что junit'ы выполняются два раза.
Можно ли добавить такой usecase:
Я указываю Build runner: Maven2. И если указываю XML Report Processing, то TeamCity смотрит результаты тестов только после выполнения Maven.
2.
Build errors
1. Ну если дело только в jar-e, то можно всю эту солянку дополнить вызовом jar:jar после compile.
Для Maven2 runner использование XML Report Processing вообще бессмысленно, поскольку во-первых runner делает все сам (и это не отключить), а во вторых XML Report Processing ведет себя абсолютно так же, так как он слушает файловую систему. То есть он выдаст и первый результат прохождения тестов сразу же, как только онаружит отчеты.
2. Здесь я, право, теряюсь в догадках. Попробуйте в качестве эксперимента вызвать еще какую-нибудь команду (типа ls или чего-угодно). Посмотрим что получится.
1. Сделал следующие изменения:
Goals: clean emma:emma org.apache.felix:maven-scr-plugin:scr org.apache.felix:maven-bundle-plugin:bundle org.apache.felix:maven-junit4osgi-plugin:test
Все выполняет верно, но результаты, сгенеренные junit4osgi, не видит, хотя они находятся рядом с остальными, жалуется "No surefire report found for suites: [My OSGi test suite]":
$ ls agent/work/e0d7ab60bbc5d9d8/target/surefire-reports/
ru.rambler.xmpp.server.core.cluster.ExternalizableUtilTest.txt
ru.rambler.xmpp.server.core.cm.JDBCPgPersistenceManagerImplTest.txt
ru.rambler.xmpp.server.core.packet.JIDTest.txt
ru.rambler.xmpp.server.core.sasl.impl.SaslServiceImplTest.txt
ru.rambler.xmpp.server.core.sasl.SaslStatusTest.txt
ru.rambler.xmpp.server.util.jid.EscapingTest.txt
ru.rambler.xmpp.server.util.xml.impl.PiccoloXMPPPacketReaderTest.txt
TEST-My_OSGi_test_suite.xml
TEST-ru.rambler.xmpp.server.core.cluster.ExternalizableUtilTest.xml
TEST-ru.rambler.xmpp.server.core.cm.JDBCPgPersistenceManagerImplTest.xml
TEST-ru.rambler.xmpp.server.core.packet.JIDTest.xml
TEST-ru.rambler.xmpp.server.core.sasl.impl.SaslServiceImplTest.xml
TEST-ru.rambler.xmpp.server.core.sasl.SaslStatusTest.xml
TEST-ru.rambler.xmpp.server.util.jid.EscapingTest.xml
TEST-ru.rambler.xmpp.server.util.xml.impl.PiccoloXMPPPacketReaderTest.xml
Добавил полный лог сборки.
2. Я сглупил, там ясно все написано, работает так:
Command executable: mvn
Command parameters: clean integration-test emma:emma
Настроил XML Report Processing, видит и обычные JUnit и JUnit4OSGi тесты, но не видит пропущенные (@Ignore) тесты. Отображает, будто все тесты завершились ок, хотя в reports написано:
...
<skipped/>
</testcase>
...
Это то как он отображает тесты на вкладке Tests. 4-я строчка "cm (..." выглядит какой-то кашей. Похоже на багу.
P.S. Вообще второй вариант мне видится предпочтительнее, так как он вроде попроще. Сама задача немного изменилась, мне необходимо начать новую тему?
Attachment(s):
jabber_Core_Trunk_Build_60.log.zip
Можем продолжить здесь.
То, что TeamCity не видит My OSGi test suite это просто баг в Maven2 runner. Его не научили заменять пробелы на подчеркивание при попытке посмотреть отчет. Это я исправлю.
А вот проблема с @Ignore это уже баг в XML Report Processing .
В общем, завтра я смогу прислать патч, где первая проблема будет устранена.
Тогда XML Report Processing можно будет отключить.
Годится?
Да!
А есть ли какая-нибудь возможность отследить, когда будет пофиксен XML Report Processing?
Пришлите письмо на teamcity-feedback@jetbrains.com, я вышлю патч не обратный адрес.
http://www.jetbrains.net/tracker/issue/TW-9343
Надо завести аккаунт и стать watcher'ом.
Bulat,
could you, please, attach full XML report, which brought about results given in the table.
Is it's enough?
Attachment(s):
surefire-reports.tar
jabber_cm_6-tests.csv.zip
Yes, it is. Thanks!
Please see http://www.jetbrains.net/tracker/issue/TW-9343 , it seems to be fixed.