Size: a a a

QA — Load & Performance

2021 November 23

KY

Kirill Yurkov in QA — Load & Performance
ю велкам
источник

PB

Pavel Bairov in QA — Load & Performance
я думаю можно как-то через sed пройтись по всем файлам *.scala и реплейснуть
источник

ΙΤ

Ιωάννης Τσεκούρι... in QA — Load & Performance
ну посмотрим, придумаем что нибудь, тут же ведь самое главное заменить автореплейсером так чтобы ничего другого незадеть
источник

PB

Pavel Bairov in QA — Load & Performance
find . -type f -name "*.scala" -exec sed -i '' 's/${/#{/g' {} +
источник

P

Pavla in QA — Load & Performance
Вечер добрый! А вы пробовали запускать несколько тредов и какая-то конкретная ошибка сыпалась?
Меня смутило: "в одном браузере на разных вкладках".  Это скорее всего сессионная кука, и под разными пользователями "руками" зайдете с разных браузеров или из одного но в инкогнито и не инкогнито, например.
Jmeter не открывает браузер и его сессии это не действия на разных вкладках. Убедитесь, что у вас добавлены все хидеры и все динамические значения в них запараметризированы (типа авторизации, referer, айпишников клиентов, если такие есть) - и в несколько потоков запустите
источник

VS

Vladimir Sitnikov in QA — Load & Performance
Ну, так-то любой API это DSL. Но всё-таки, DSL нужно для того, чтобы абстрагировать происходящее и давать более вменяемый синтаксис.

Печально, что в Gatling всё на точках и fluent interface основано.

По-моему, будущее за вариантами на скобках.
источник

ΙΤ

Ιωάννης Τσεκούρι... in QA — Load & Performance
в чем печаль то?)
источник

ΙΤ

Ιωάννης Τσεκούρι... in QA — Load & Performance
компактность против громоздких скобок
источник

VS

Vladimir Sitnikov in QA — Load & Performance
Вот пример из доки Gatling:


setUp(
 scn.inject(
   nothingFor(4.seconds), // 1
   constantUsersPerSec(20).during(15.seconds), // 4
 ).protocols(httpProtocol)
)


Внимание, вопрос: как мне сделать 5 шагов постепенного повышения нагрузки?
Я могу применить copy-paste, но это же печаль:


setUp(
 scn.inject(
   nothingFor(4.seconds), // 1
   constantUsersPerSec(20).during(15.seconds), // 4
   nothingFor(4.seconds), // 1
   constantUsersPerSec(40).during(15.seconds), // 4
   nothingFor(4.seconds), // 1
   constantUsersPerSec(80).during(15.seconds), // 4
 ).protocols(httpProtocol)
)


Не получится туда for воткнуть, т.к. точки и запятые мешают
источник

VS

Vladimir Sitnikov in QA — Load & Performance
В случае, когда DSL на фигурных скобках, то вообще не вопрос добавить for или if


openModelThreadGroup {
   loadProfile {
       for (i in 1..10) { // <— нужен цикл? Вставляем цикл и всего делов!
           rate(i*10 / second) // <— это часть штатного DSL для open model
           randomArrivals(5.minutes)
           rate(i*10 / second)
       }
   }

}
источник

ΙΤ

Ιωάννης Τσεκούρι... in QA — Load & Performance
зачем for если есть .map() ?
источник

ΙΤ

Ιωάννης Τσεκούρι... in QA — Load & Performance
источник

ΙΤ

Ιωάννης Τσεκούρι... in QA — Load & Performance
сейчас бы в 2021 веке циклами пользоваться
источник

VS

Vladimir Sitnikov in QA — Load & Performance
Если нужен хоть какой-то другой профиль, то всё, incrementUsersPerSec уже не подойдёт.

Да, я не отрицаю, что для ходовых случаев можно сделать отдельный метод.
Но вот тут, простой и топорный for в 100 раз понятнее всем
источник

ΙΤ

Ιωάννης Τσεκούρι... in QA — Load & Performance
а гуй ещё более понятен всем
источник

VS

Vladimir Sitnikov in QA — Load & Performance
Или, например


if (debug) {
   addDebugSampler(«…»)
}


Как такое в точечках делать будешь?
источник

VS

Vladimir Sitnikov in QA — Load & Performance
Я понимаю, что через map можно сделать почти всё, а через flatMap вообще всё.
Но код на map-flatmap ни читать ни писать невозможно.
источник

ΙΤ

Ιωάννης Τσεκούρι... in QA — Load & Performance
источник

ΙΤ

Ιωάννης Τσεκούρι... in QA — Load & Performance
do notation придумали для этого
источник

VS

Vladimir Sitnikov in QA — Load & Performance
А вы пока GUI не ругайте. Вот как сделаем GUI на MPS, тогда можно будет сравнивать, и тогда мы похохочем
источник