Запустите 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.

Другие вопросы по тегам