«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Написание распараллеливаемых тестов с помощью платформы Carlspring/idempotence для Java.

Написание распараллеливаемых тестов с помощью платформы Carlspring/idempotence для Java.

Опубликовано 8 ноября 2024 г.
Просматривать:228

Writing parallelizable tests with the carlspring/idempotence framework for Java

Отказ от ответственности

Это повторная публикация моей статьи на Medium.com с надеждой охватить больше разработчиков OSS в рамках #Hacktoberfest.

Введение

Приходилось ли вам когда-нибудь сталкиваться с нестабильными распараллеленными тестами, которые большую часть времени проходят успешно, но затем внезапно начинают терпеть неудачу с непоследовательными случайными ошибками? Вам когда-нибудь приходилось исправлять тесты, использующие одни и те же файлы ресурсов, и параллельно изменять их, чтобы запутать вас и результаты других ваших тестов? Вы провели бесчисленное количество ночей, пытаясь реорганизовать такой код, чтобы его можно было правильно распараллелить и получить воспроизводимые и гарантированные результаты?

Это сложная тема, которую не всегда легко решить, особенно в существующих больших базах кода. Однако следование простому набору правил может помочь вам в этом, и платформа Carlspring/idempotence призвана помочь в этом.

Что такое изоляция тестов?

Чтобы тесты постоянно воспроизводились, вам необходимо убедиться, что их файлы ресурсов содержатся и изолированы только для них. Это означает, что каждый тест должен владеть исключительно своими тестовыми ресурсами, и другие тесты не должны их изменять.

Что такое тестовая идемпотентность?

Идемпотентность тестов означает, что ваши тесты всегда будут возвращать одни и те же результаты. Неважно, сколько раз они выполнялись и какие другие тесты выполнялись параллельно.

Что такое платформа Carlspring/идемпотентности для Java

Это облегченная платформа, которая помогает изолированно определять и копировать файлы ресурсов тестов для ваших тестов JUnit5. Тестовые ресурсы определяются с помощью аннотаций и копируются в свои собственные каталоги, чтобы облегчить реализацию разделения и изоляции тестовых ресурсов.

Как работает Java-фреймворк Carlspring/идемпотентность

Все общие тестовые ресурсы, как обычно, хранятся в каталоге src/test/resources. Затем каждый метод тестирования определяет необходимые ему ресурсы с помощью аннотации @TestResources. Платформа копирует эти ресурсы в изолированный каталог для каждого метода тестирования. Это гарантирует, что он имеет эксклюзивный доступ к необходимым ресурсам, предотвращая помехи от других тестов, выполняемых параллельно, включая другие методы тестирования в том же тестовом классе.

Для каждого инструмента сборки существует отдельная зависимость, которая содержит логику преобразования, связанную с путем, для конкретного макета каталога этого инструмента. (В качестве очень упрощенного примера, среди прочего. Maven помещает собранный код под target, тогда как Gradle использует для этой цели сборку; ресурсы размещаются по-другому и т. д.). Подробнее об этом будет рассказано ниже.

Как писать тесты с использованием Java-фреймворка Carlspring/idempotence

Вот шаг, с которого вам нужно начать.

Определите зависимости

Вам нужно будет определить соответствующую зависимость для вашего инструмента сборки. Вы можете проверить, какая последняя выпущенная версия здесь.

  • Для Gradle (с использованием Groovy DSL):

testImplementation "org.carlspring.testing.idempotence:idempotence-gradle:1.0.0-rc-3"


  • Gradle (с использованием Kotlin DSL):

testImplementation("org.carlspring.testing.idempotence:idempotence-gradle:1.0.0-rc-3")


  • Для Maven:

org.carlspring.testing.idempotenceidempotence-maven1.0.0-rc-3test

Добавить аннотации

Ваш тестовый класс должен быть помечен аннотацией @ExtendWith(TestResourceExtension.class). Эта аннотация отвечает за фактическое копирование ресурсов.

Вам также потребуется пометить свои тестовые методы аннотацией @TestResources, чтобы указать необходимые им ресурсы.

Например:


package com.foo;

import org.carlspring.testing.idempotence.annotation.TestResource;
import org.carlspring.testing.idempotence.annotation.TestResources;
import org.carlspring.testing.idempotence.extension.TestResourceExtension;

@ExtendWith(TestResourceExtension.class)
class MyTest {

    @Test
    @TestResources({ @TestResource(source = "classpath:/foo.txt"),
                     @TestResource(source = "classpath*:/**/bar.txt")} )
    void testFoo()
    {
        // Perform whatever checks you need using these resources
    }

}


Для каждого метода тестирования будет создан каталог следующего формата:

  • Для проекта Gradle с тестом MyTest и методом testFoo: они будут помещены в:

build/test-resources/MyTest-testFoo/nested/dir/foo.txt
build/test-resources/MyTest-testFoo/bar.txt


  • Для проекта Maven с тестом MyTest и методом testFoo: они будут помещены в:

target/test-resources/MyTest-testFoo/nested/dir/foo.txt
target/test-resources/MyTest-testFoo/bar.txt


Таким образом, ваши тесты будут иметь необходимый им ресурс, скопированный в их собственные изолированные каталоги. На этом этапе вы можете изменить эти тестовые ресурсы из методов тестирования, к которым они принадлежат, и ваши результаты должны быть идемпотентными, при условии, что они зависят только от файловых ресурсов, а не от других типов общих ресурсов (база данных, сторонние службы и т. д.).

Где найти документацию

Документацию проекта Idempotence можно найти здесь.

Вы можете просмотреть концептуальный обзор для более подробного объяснения того, как все работает.

Как внести свой вклад

Это новый проект с уже готовыми основными функциями и инфраструктурой, но помощь всегда приветствуется.

Участники, имеющие опыт работы с JUnit, Springframework, MkDocs, могут помочь сформировать проект, предложив несколько замечательных идей и решений. Мы также приветствуем первых пользователей, которые могут оставить отзыв!

Проблемы с пометкой «Хактоберфест» или «Требуется помощь» доступны и помогут вам быстро приступить к работе. Вы можете найти их здесь.

Заключение

Одна из самых важных вещей при написании тестовых примеров — это тестовые данные, которые будут использовать ваши тесты, и поддержание их в нормальном состоянии между запусками. Следуя набору простых правил, позволяющих изолировать эти данные между тестами, вы можете добиться идемпотентности и надежности своих результатов.

Проект Carlspring/idempotence предоставляет простую в использовании структуру, которая подходит как для новых проектов, так и для старых проектов рефакторинга.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/carlspring/writing-parallelizable-tests-with-the-carlspringidempotence-framework-for-java-420n?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с [email protected] удалить его
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3