Я хочу запускать одни и те же тесты Cucumber в нескольких потоках. В частности, у меня есть набор функций, и запуск этих функций в одном потоке работает нормально. Я использую средство форматирования JSON для записи времени выполнения каждого шага. Теперь я хочу сделать нагрузочный тест. Меня больше волнует время работы каждой функции/шага в многопоточной среде. Поэтому я создаю несколько потоков, и каждый поток работает с одним и тем же набором функций. Каждый поток имеет свой собственный отчет JSON. Возможно ли это в теории?
По какой-то причине настройки проекта я не могу использовать бегун JUnit. Поэтому я должен прибегнуть к CLI-способу:
long threadId = Thread.currentThread().getId();
String jsonFilename = String.format("json:run/cucumber%d.json", threadId);
String argv[] = new String[]{
"--glue",
"com.some.package",
"--format",
jsonFilename,
"d:\\features"};
// Do not call Main.run() directly. It has a System.exit() call at the end.
// Main.run(argv, Thread.currentThread().getContextClassLoader());
// Copied the same code from Main.run().
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
RuntimeOptions runtimeOptions = new RuntimeOptions(new Env("cucumber-jvm"), argv);
ResourceLoader resourceLoader = new MultiLoader(classLoader);
ClassFinder classFinder = new ResourceLoaderClassFinder(resourceLoader, classLoader);
Runtime runtime = new Runtime(resourceLoader, classFinder, classLoader, runtimeOptions);
runtime.writeStepdefsJson();
runtime.run();
Я попытался создать отдельный поток для каждого запуска Cucumber. Проблема в том, что только один из потоков имеет действительный отчет JSON. Все остальные потоки просто создают пустые файлы JSON. Это задумано в Cucumber или я что-то пропустил?