Давайте немного поговорим на тему тестовых фреймворков, кто что использует, какие плюсы и минусы видит для себя и вообще. Как и куда движутся данные фреймворки в своем развитии.
Я недавно мигрировал с JUnit на те TestNG. В целом меня в JUnit почти все устраивало, но уж больно бесило что методы под анотацией @Before/AfterClass должны быть статическими, а еще не хватало датапровайдеров.
Но меня беспокоим что TestNG не так активно развивается как JUnit. Как бы не скопытился он
Тему перенес в раздел Java*
Модификатор static означает что переменная/метод будет принадлежать не объекту класса а самому классу. Это означает что эта переменная/метод будет всего одна на всех, во многих случаях это очень удобно, но так же рождает целую кучу проблем, особенно в многопоточных программах.
То есть сколько бы объектов вы не создавали, статичная переменная будет всего одна.
Думаю, что многое зависит от скоупа задач. Кому-то может хватать и JUnit. Кому-то нужны определенные фишки TestNG. Но не стоит забывать, что оба фреймворка направлены прежде всего на юнит тестирование. Т.е. если мы хотим их использовать на уровне системной интеграции, то глупо плеваться в сторону какого-либо из них, если он не сможет покрыть ваши high level требования.
В своей первой конторе, где я осваивал автоматизацию, мне сказали учить TestNG. Тогда я не задавался вопросом, почему. Я даже не знал о существовании альтернатив. В процессе роста я конечно почитал различные (1)сравнительные (2)характеристики (3) с JUnit. И во многом фреймворки очень схожи. Но, как человек, пишущий функциональные тесты, я бы не мог сейчас представить свою автоматизацию без гибкого data provider’a. Та же иерархия аннотаций более очевидна и потокобезопасна. Лично для себя обнаружил огромным плюсом простоту кастомизации ассертов. XML’и творят чудеса в вопросах масштабирования.
Я не соглашусь, что TestNG грозит погибель. У обоих продуктов есть свои поклонники и коммитеры. И в случае чего, Cedric Beust обязательно кому-то передаст по наследству свои труды.
[quote=“heartwilltell, post:1, topic:5478”]
Как и куда движутся данные фреймворки в своем развитии.
[/quote]Никуда. Оба достигли своей “логической” завершенности и эволюционировать им дальше некуда в принципе. Оба “умрут” только, когда появится nextgen фреймворк - но это будет очень не скоро, и возможно “не при нас”. Джейюниту остается “перенимать” фичи TestNG (xml, groups, депенды), а Цедрику фиксить баги.
Но я хочу перед каждым запуском задавать количество потоков. При использовании JUnit можно было сконфигурировать surefire-plugin и при запуске отдать мевену команду -DthreadCount=5 и получить 5 потоков
Насколько я знаю, TestNG не поддерживает placeholders в своих xml. Так что если очень хочется, придется писать утилитку, которая будет менять этот параметр перед запуском test goal. Но другой вопрос - зачем вам это? То, что гоняется на Jenkins, как правило, привязано к выделенным ресурсам. Т.е. если есть возможность запускать тесты в 10 потоков на 10 тачках, то почему этим не пользоваться? Если же нужна какая-то специфичная конфигурация, то можно просто подсовывать конкретный, сконфигурированный заранее xml. Я лично разбивал xml по характеристикам ОС / браузер, а кол-во потоков всегда было либо max - для full прогона, либо min - для smoke / debug. Конечно ситуации могут быть разные, не спорю. Но динамическое изменение числа потоков может пригодиться крайне редко и лишь в случае наличия достаточного кол-ва ресурсов / хорошо сконфигурированного грида.
По сути вы правы - незачем, когда тесты заливаются в мастер ветку откуда их дергают джобы запускающиеся по расписанию/хуками то они уже сконфигурированы под ресурсы машины и используют допустимый максимум потоков.
Нужно это для разработки, что бы можно было быстро менять конфигурации и тестировать на любой доступной удаленной ноде без лишних комитов, обходясь только парой галочек в параметрах джоба.
А про написание утилитки я думал уже, наверное напишу что-то простенькое.
Ну для дебага я настраивал джобу, которая смотрит в отдельный бранч моего собственного форка. Т.е. в мастере мои debug suites никогда не появятся в случае чего.
Когда-то тоже писал утилитку, которая в динамике создает testng.xml, но по мере усложнения конфигураций самих xml, кол-во параметров в джобах начало расти до неприличных размеров. Тогда я забросил это дело и стал подсовывать уже готовые xml.
Кстати, сам suite можно динамически в pom инжектить из дженкинс параметра. Т.е. к примеру в репозитории будет N suites на все случае жизни. Тогда нам достаточно создать choice параметр, и читать его в:
Можно при определенных условиях перехватить вызовы внутренних методов, но ваш кейс даже при большом желании слабо реализуем. Т.е .список методов пост-фактум получить легко. Но перед выполнением - мало вероятно.