VatslauX
(Vatslau)
02.Январь.2019 15:32:47
#1
Погуглил немного. В доках random есть только для порядка тестов)
меня интересует запуск части тестов например 10% от всех
или например чтобы запускался рандомно 1 тест из каждого класса который заинклюдан в xml
Возможно есть инфа от других фреймворках который поддерживают подход таких запусков тестов?
madvlaydin
(Vladislav Abramov)
02.Январь.2019 16:11:52
#2
а нельзя обернуть это в скрипт какой-нибудь?
sergueik
(Сергей Кузьмин)
03.Январь.2019 04:53:39
#3
мне кажется можно запараметризовть эти тесты и один из параметров использовать для включения ?
VatslauX
(Vatslau)
03.Январь.2019 06:56:21
#4
Конечно можно) я вот думаю что может уже что-то есть готовое - мои костыли вряд ли будут лучше.
Наверно реализовывать можно через кастомные лиснеры
перехватывать в них методы которые инвокаются и запускать / отключать
но останутся издержки на запуск
не понятно как будут себя вести бефор методы в этом случае
Коробочная реализия - группы…
но это уныло делать 10 групп только для запусков и дёргать разные xml-ки
ПС бизнес кейс такой:
сервер слабый - параллелить тесты не вариант.
билдов много - за день все тесты в рандомном режиме прогонятся на 90%
такой пар вайзинг получится
olyv
03.Январь.2019 21:16:53
#5
А почему разные xml-ки? Разве в testng нельзя в одном файле создать несколько групп? Ну а группу тестов можно выбирать рандомно перед запуском тестов создав, например, groovy или python скрипт на ci.
И почему параллелить не вариант, outofmemory и сервер умирает? Хотя бы два потока пойдет?
sergueik
(Сергей Кузьмин)
03.Январь.2019 22:55:31
#6
@ VatslauX - преобразование из одного XML в XML это кажется задача решаемая многими способами напр. в контексте
https://maven.apache.org/guides/mini/guide-using-ant.html
покажите п-та свой суперхеви testng.xml
из спортивного интереса любопытно …
SlavikF
(SlavikF)
04.Январь.2019 01:53:02
#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 лайк
VatslauX
(Vatslau)
04.Январь.2019 07:35:24
#8
Похоже это удобный вариант. Спасибо
runAll тоже удобно - можно как параметр их xml передать
VatslauX
(Vatslau)
04.Январь.2019 07:36:11
#9
Загрузка по процессору во время рендеринга страниц под 90-100%
нет смысла параллелить
VatslauX
(Vatslau)
04.Январь.2019 07:40:16
#10
нет спасибо) хочу чтобы CI только дёргал xml и так осталось в будущем
максимально примитивно
ПС maven must die) Viva la Gradle
sergueik
(Сергей Кузьмин)
04.Январь.2019 13:32:54
#11
@VatslauX не понял в чем проблема всегда рисовать xml перед запуском gradle
или mvn
вы же не возражаете что код компилируется и "jar"ится…
1 лайк
VatslauX
(Vatslau)
04.Январь.2019 15:02:14
#12
@sergueik а вы используете Yaml вместо xml для testNg там вроде тоже просто небольшая генерация?
sergueik
(Сергей Кузьмин)
04.Январь.2019 15:30:02
#13
пока не использовал и небыл а курске что YAML проще - только если в vi крафтить тест конфигурации … бросьте ссылку (на работе и дел будет много
). спасибо.
как говорится но оффенз просто правда в нек странах каникул после нг нету
VatslauX
(Vatslau)
04.Январь.2019 16:03:02
#14
sergueik
(Сергей Кузьмин)
04.Январь.2019 16:27:20
#15
@VatslauX
спасибо
у меня тожеесть на уямле
DataSourceSingleton.java
DataSourceStatic.java
1 лайк
olyv
04.Январь.2019 20:03:57
#16
Матерь-василиса. Что это страницы такие. Мы вроде бы не в 2000-м году
sergueik
(Сергей Кузьмин)
07.Январь.2019 02:04:03
#17
@ VatslauX учтите если в самом деле собираетесь делать путем TestNg запуск 10% тестов с рандомной выборкой - #7 от пользователя SlavikF то там все немного не так просто … для 6.14.3 по крайней мере
1 лайк
sergueik
(Сергей Кузьмин)
08.Январь.2019 04:54:37
#18
я тут посмотрел что происходит после швыряния org.testng.SkipException
- получился проектик на гитхабе - GitHub - sergueik/testng_random_set_test_picker: TestNg subset randomized class/method picker
1 лайк
VatslauX
(Vatslau)
08.Январь.2019 08:05:34
#19
супер! спасибо гляну как оно
ArtOfLife
(Sergey Korol)
14.Январь.2019 21:52:27
#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());
}
}