VatslauX
(Vatslau)
January 2, 2019, 3:32pm
#1
Погуглил немного. В доках random есть только для порядка тестов)
меня интересует запуск части тестов например 10% от всех
или например чтобы запускался рандомно 1 тест из каждого класса который заинклюдан в xml
Возможно есть инфа от других фреймворках который поддерживают подход таких запусков тестов?
madvlaydin
(Vladislav Abramov)
January 2, 2019, 4:11pm
#2
а нельзя обернуть это в скрипт какой-нибудь?
sergueik
(Сергей Кузьмин)
January 3, 2019, 4:53am
#3
мне кажется можно запараметризовть эти тесты и один из параметров использовать для включения ?
VatslauX
(Vatslau)
January 3, 2019, 6:56am
#4
Конечно можно) я вот думаю что может уже что-то есть готовое - мои костыли вряд ли будут лучше.
Наверно реализовывать можно через кастомные лиснеры
перехватывать в них методы которые инвокаются и запускать / отключать
но останутся издержки на запуск
не понятно как будут себя вести бефор методы в этом случае
Коробочная реализия - группы…
но это уныло делать 10 групп только для запусков и дёргать разные xml-ки
ПС бизнес кейс такой:
сервер слабый - параллелить тесты не вариант.
билдов много - за день все тесты в рандомном режиме прогонятся на 90%
такой пар вайзинг получится
olyv
January 3, 2019, 9:16pm
#5
А почему разные xml-ки? Разве в testng нельзя в одном файле создать несколько групп? Ну а группу тестов можно выбирать рандомно перед запуском тестов создав, например, groovy или python скрипт на ci.
И почему параллелить не вариант, outofmemory и сервер умирает? Хотя бы два потока пойдет?
sergueik
(Сергей Кузьмин)
January 3, 2019, 10:55pm
#6
@ VatslauX - преобразование из одного XML в XML это кажется задача решаемая многими способами напр. в контексте
https://maven.apache.org/guides/mini/guide-using-ant.html
покажите п-та свой суперхеви testng.xml
из спортивного интереса любопытно …
SlavikF
(SlavikF)
January 4, 2019, 1:53am
#7
Вот такой код с вероятностью 90% пропустит каждый тест кейс.
То есть с вероятностью 10% запустит каждый:
import org.testng.SkipException
@BeforeMethod
void beforeMethod(Method method)
{
if (new Random().nextInt() % 10 != 0) {
throw new SkipException ('skipping ' + method.toString());
}
}
Если в некоторый случаях нужно запускать все тесты, то можно добавить параметр runAll (нужно его взять откуда-то - из конфига, environment …:
import org.testng.SkipException
@BeforeMethod
void beforeMethod(Method method)
{
if (new Random().nextInt() % 10 != 0 & !runAll) {
throw new SkipException ('skipping ' + method.toString());
}
}
1 Like
VatslauX
(Vatslau)
January 4, 2019, 7:35am
#8
Похоже это удобный вариант. Спасибо
runAll тоже удобно - можно как параметр их xml передать
VatslauX
(Vatslau)
January 4, 2019, 7:36am
#9
Загрузка по процессору во время рендеринга страниц под 90-100%
нет смысла параллелить
VatslauX
(Vatslau)
January 4, 2019, 7:40am
#10
нет спасибо) хочу чтобы CI только дёргал xml и так осталось в будущем
максимально примитивно
ПС maven must die) Viva la Gradle
sergueik
(Сергей Кузьмин)
January 4, 2019, 1:32pm
#11
@VatslauX не понял в чем проблема всегда рисовать xml перед запуском gradle
или mvn
вы же не возражаете что код компилируется и "jar"ится…
1 Like
VatslauX
(Vatslau)
January 4, 2019, 3:02pm
#12
@sergueik а вы используете Yaml вместо xml для testNg там вроде тоже просто небольшая генерация?
sergueik
(Сергей Кузьмин)
January 4, 2019, 3:30pm
#13
пока не использовал и небыл а курске что YAML проще - только если в vi крафтить тест конфигурации … бросьте ссылку (на работе и дел будет много
). спасибо.
как говорится но оффенз просто правда в нек странах каникул после нг нету
VatslauX
(Vatslau)
January 4, 2019, 4:03pm
#14
sergueik
(Сергей Кузьмин)
January 4, 2019, 4:27pm
#15
@VatslauX
спасибо
у меня тожеесть на уямле
DataSourceSingleton.java
DataSourceStatic.java
1 Like
olyv
January 4, 2019, 8:03pm
#16
Матерь-василиса. Что это страницы такие. Мы вроде бы не в 2000-м году
sergueik
(Сергей Кузьмин)
January 7, 2019, 2:04am
#17
@ VatslauX учтите если в самом деле собираетесь делать путем TestNg запуск 10% тестов с рандомной выборкой - #7 от пользователя SlavikF то там все немного не так просто … для 6.14.3 по крайней мере
1 Like
sergueik
(Сергей Кузьмин)
January 8, 2019, 4:54am
#18
я тут посмотрел что происходит после швыряния org.testng.SkipException
- получился проектик на гитхабе - GitHub - sergueik/testng_random_set_test_picker: TestNg subset randomized class/method picker
1 Like
VatslauX
(Vatslau)
January 8, 2019, 8:05am
#19
супер! спасибо гляну как оно
ArtOfLife
(Sergey Korol)
January 14, 2019, 9:52pm
#20
Самая примитивная реализация чистыми средствами TestNG + Java 8:
public class MethodInterceptor implements IMethodInterceptor {
@Override
public List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context) {
Collections.shuffle(methods);
long sizeLimit = (long) Math.ceil(methods.size() * 0.1);
return methods.stream().limit(sizeLimit).collect(toList());
}
}