Запустите Cucumber JVM @BeforeClass без файлов объектов
Название может быть немного запутанным в этом пункте; надеюсь, я смогу это прояснить.
Что я имею
Я запускаю Cucumber JVM с Selenium WebDriver для автоматизации наших системных тестов. Эти контрольные примеры в настоящее время хранятся в JIRA с использованием плагина XRay Test Management. XRay также предоставляет API-интерфейсы для выборки файлов объектов и загрузки результатов обратно в JIRA.
Я создал специальный класс утилит JIRA для загрузки тестов в виде файлов объектов и загрузки результатов тестов из JIRA и обратно, а также продемонстрировал, что он работает. Они выполняются в @BeforeClass и @AfterClass в классе Cucumber Runner соответственно.
Я также продемонстрировал, что разработанный тестовый фреймворк работает вручную, используя файлы функций, созданные на моем компьютере.
Что я хочу
Я хочу иметь возможность (в конце концов) автоматически запускать среду тестирования автоматизации с помощью наших инструментов CI. Наряду с этим он будет извлекать определенные тесты автоматизации из JIRA и передавать результаты тестов обратно в JIRA.
Я не хочу, чтобы файлы объектов хранились с кодом. На мой взгляд, это отрицательно сказывается на его динамичности, поскольку выполняемые нами тесты со временем меняются (по количеству выполненных и самим шагам).
Что происходит (или, точнее, не происходит)
Когда я пытаюсь выполнить класс Runner Cucumber без каких-либо файлов объектов в платформе, Cucumber говорит: "В [src/test/resources/features/]" нет функций. Это понятно, так как нет никаких файлов функций (пока).
Тем не менее, он не запускает @BeforeClass; таким образом, он не загружает файлы объектов для запуска. Я пробовал это как с, так и без тегов в классе бегуна.
Код
@RunWith(Cucumber.class)
@CucumberOptions(
tags={"@smoketests"},
features= {"src/test/resources/features/"},
plugin={"json:target/reports/cucumber.json"},
monochrome=true)
public class RunCucumberTest {
@BeforeClass
public static void executeBeforeTests() {
JiraUtil.getFeatureFiles();
//String browser = "firefox";
String browser = "chrome";
//String browser = "safari";
//String browser = "edge";
//String browser = "ie";
DriverUtil.getInstance().setDriver(browser);
}
@AfterClass
public static void executeAfterTests() {
DriverUtil.getInstance().resetDriver();
JiraUtil.uploadTestResults();
}
}
Вернуться к моему вопросу
Как я могу выполнить код JIRA Util, чтобы я мог загрузить файлы функций?
Можно ли добиться того, чего я хочу? Или я должен признать поражение и просто сохранить все файлы функций вместе с кодом?
1 ответ
Это ожидаемое поведение при использовании JUnit. Набор тестов не будет вызывать @BeforeClass
, @AfterClass
или же @ClassRule
когда в комплекте нет тестов или если все тесты игнорируются [1]. Это позволяет избежать выполнения потенциально дорогой установки для нуля.
Это означает, что вы не можете использовать правило класса для начальной загрузки ваших тестов. И вы не должны пытаться сделать это. В процессе сборки рекомендуется извлекать все источники и ресурсы перед компиляцией.
Если вы используете maven, вы можете написать maven и прикрепить его к generate-test-sources
фаза [2]. Создание плагина maven немного сложнее, чем правило JUnit, но не слишком. Посмотрите Руководство по разработке плагинов Java.
Я предполагаю, что есть похожие варианты для Gradle.