Cat2Bug-Spring-Boot-JUnit — это Java-пакет для автоматизации юнит-тестирования Spring Boot, созданный командой Cat2Bug. Цель состоит в том, чтобы с помощью нескольких строк кода выполнить юнит-тестирование всего проекта, сократив затраты на поддержку юнит-тестирования и повысив качество и эффективность управления проектом.
Цель состоит в том, чтобы снизить затраты на поддержку юнит-тестирования, сократить время обучения разработчиков и ускорить обнаружение системных ошибок. Если вы сможете внимательно изучить наше описание, вы обнаружите, что все будущие проекты смогут решать задачи юнит-тестирования за считанные минуты.
Cat2Bug-Spring-Boot-JUnit основан на Spring Boot 2 и JUnit 4 и включает функции автоматической отправки отчетов о тестировании и автоматического создания тестовых классов. Это позволяет разработчикам быстро выполнять юнит-тестирование с помощью простых аннотаций.
## Преимущества и особенности
testImplementation ("com.cat2bug:cat2bug-spring-boot-junit:0.0.5")
<dependency>
<groupId>com.cat2bug</groupId>
<artifactId>cat2bug-spring-boot-junit</artifactId>
<version>0.0.5</version>
<scope>test</scope>
</dependency>
В настоящее время Cat2Bug-Spring-Boot-JUnit можно использовать в сочетании с платформой Cat2Bug-Platform для бесшовной интеграции.
Cat2Bug-Spring-Boot-JUnit отвечает за выполнение юнит-тестов и отправку отчетов о тестировании через Open API на платформу Cat2Bug-Platform.
Платформа Cat2Bug-Platform предназначена для управления дефектами в отчетах и экспорта связанных отчетов о тестировании. Ее архитектура представлена ниже:### Создание окружения Cat2Bug-Platform
Если необходимо отправить результаты неудачных тестов в систему отслеживания дефектов после выполнения юнит-тестов, необходимо сначала развернуть платформу Cat2Bug-Platform и настроить API KEY. Ниже приведен способ быстрого развертывания, для получения дополнительной информации обратитесь к документации Cat2Bug.
docker run -it -d -p 8022:8022 --name cat2bug-platform cat2bug/cat2bug-platform:latest
После успешного запуска перейдите по адресу http://127.0.0.1:8022 в браузере. Если страница открывается корректно, это означает, что платформа запущена успешно;
Теперь окружение Cat2Bug-Platform создано.
Без указанных в красных рамках параметров при выполнении тестов могут возникнуть ошибки "не найдены некоторые классы". Вы также можете добавить недостающие классы по подсказкам, но в Java 8 такие проблемы не возникают.
Аналогично JUnit-тестам, в Spring-проекте создайте тестовый класс, используя следующий код:
@SpringBootTest
@RunWith(Cat2BugAutoSpringSuite.class)
@AutoTestScan(packageName = "com.cat2bug.junit.demo.controller")
public class Cat2bugSpringBootDemoApplicationTests {
// Не требуется добавлять код
}
RandomParameter
для настройки параметров для определённых интерфейсов. Примеры использования приведены ниже:````@SpringBootTest
@RunWith(Cat2BugAutoSpringSuite.class)
@AutoTestScan(packageName = "com.cat2bug.junit.demo.controller")
@Transactional
public class Cat2bugSpringBootDemoApplicationTests {
/**
* Установка параметров пользователя для метода updateUser контроллера UserController
* @param userRepository класс для работы с пользователями
* @return экземпляр пользователя для передачи в метод updateUser
*/
@RandomParameter(className = "com.cat2bug.junit.demo.controller.UserController", methodName = "updateUser", parameterName = "user")
public User insertUser(
@Autowired UserRepository userRepository
) {
User user = new User(1L, "admin", "cat2bug");
return userRepository.save(user);
}
/**
* Установка значений параметров, содержащих слово Id.
*
* @return идентификатор пользователя
*/
@RandomParameter(parameterName = ".*Id.*")
public long userId() {
return 1L;
}
/**
* Установка значений параметров, название которых равно name.
*
* @return случайное имя
*/
@RandomParameter(parameterName = "name")
public String name() {
String[] names = { "Тань Цзюаньчан", "Сунь Укун", "Чжу Байjie", "Ша Унин" };
return names[(int) (Math.random() * names.length)];
}
}
### Тестирование на основе Spring SecurityВ большинстве программных проектов интерфейсы подчиняются правилам безопасности, поэтому в [Cat2Bug-Spring-Boot-JUnit](https://gitee.com/cat2bug/cat2bug-spring-boot-junit) также представлены решения для тестирования безопасности. Реализация приведена ниже:
```java
@SpringBootTest
@RunWith(Cat2BugAutoSpringSuite.class)
@AutoTestScan(packageName = "com.cat2bug.junit.demo.controller")
@Authentication(name = "admin", password = "cat2bug")
public class Cat2bugSpringBootDemoApplicationTests {
// Не нужно писать никакого кода
}
```В данном способе предоставленная аннотация Authentication используется для автоматического внедрения пользовательских прав доступа в тестовых классах. Свойства аннотации описаны ниже:
* name: имя пользователя системы
* password: пароль пользователя системы
Кроме стандартного способа аутентификации через аннотации, некоторые системы могут иметь собственные обработчики пользовательских прав доступа. В таком случае можно реализовать метод для настройки прав доступа вручную, как показано ниже:
````java
@SpringBootTest
@RunWith(Cat2BugAutoSpringSuite.class)
@AutoTestScan(packageName = "com.cat2bug.junit.demo.controller")
public class Cat2bugSpringBootDemoApplicationTests {
@Autowired
public void Security(AuthenticationManager authenticationManager) {
// Это стандартный способ присвоения прав доступа, пользователь может написать код в соответствии со своими требованиями
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken("admin", "cat2bug");
SecurityContext securityContext = SecurityContextHolder.createEmptyContext();
securityContext.setAuthentication(authenticationManager.authenticate(authenticationToken));
SecurityContextHolder.setContext(securityContext);
}
}
С помощью одного из вышеописанных способов можно получить права доступа для тестирования интерфейсов.
После завершения тестирования можно отправить тестовый отчет на платформу управления дефектами, используя следующий код:````java @SpringBootTest @RunWith(Cat2BugAutoSpringSuite.class) @AutoTestScan(packageName = "com.cat2bug.junit.demo.controller") @PushReport(host = "http://127.0.0.1:8022", projectKey = "20240225012438h19zzdb6sd1ahazj", handler = "admin", type = "all", version = "0.0.3") public class Cat2bugSpringBootDemoApplicationTests { // Не нужно писать никакого кода }
Аннотация `PushReport` используется для отправки данных, параметры аннотации имеют следующие функции:
* `host`: адрес интерфейса;
* `projectKey`: ключ Open API, созданный на платформе Cat2Bug-Platform;
* `handler`: обработчик дефектов, логин пользователя на платформе Cat2Bug-Platform;
* `type`: тип отправки, `all` означает отправку как успешных, так и неудачных тестов, `defect` означает отправку только неудачных тестов;
* `version`: версия тестового проекта.
Кроме того, свойства `host`, `projectKey` и `handler` также могут быть заданы в файле конфигурации Spring Boot `application.yml`. Конфигурация выглядит следующим образом:
```yaml
cat2bug:
junit:
push-report:
host: http://127.0.0.1:2020/
project-key: 2024032722581018ubh4nfreu1vqse
handler: demo
type: all
version: 0.0.3
```
Примечание: значения атрибутов аннотаций имеют приоритет над значениями в `application.yml`. После выполнения юнит-тестов в командной строке будет отображена информация о успешной отправке отчета.
```shell
Заголовок: Отправка тестового отчета
Адрес отправки: http://127.0.0.1:8022/api/report/defect
Ответственный: admin
Успешная отправка отчета
```
Отчет, полученный на платформе Cat2Bug-Platform, выглядит следующим образом:
## Отчеты
В проекте [Cat2Bug-Spring-Boot-JUnit](https://gitee.com/cat2bug/cat2bug-spring-boot-junit) представлены различные типы отчетов:
* Отчеты компиляции: отчеты, которые собирают статистику автоматического сканирования интерфейсов и проверяют успешность компиляции тестовых классов.
* Отчеты тестирования: отчеты, которые собирают статистику по каждому тестовому классу, включая количество успешных и неудачных тестов.
* Отчеты тестирования интерфейсов: отчеты, которые показывают информацию о каждом тестированном интерфейсе.
* Отчеты HTML: отчеты, представленные в виде HTML-файлов, которые выводятся в каталог сборки проекта, по умолчанию это каталог target.
* Отчеты отправки: отчеты, которые отправляются на платформу Cat2Bug-Platform.
## Описание API
### AutoTestScan аннотация класса
**Цель:**
Для указания пакетов, которые должны быть автоматически тестированы.
**Параметры:**
| Имя параметра | Тип | Обязательный | Описание |
|---|---|---|---|
| packageName | String | Да | Указывает имя пакета для сканирования. |### Аннотация класса PushReport
**Цель:**
После завершения тестирования отправляет результаты неудачных тестов на платформу [Cat2Bug-Platform](https://gitee.com/cat2bug/cat2bug-platform).
**Параметры:**| Параметр | Тип | Обязательный | Описание функции |
|----------|------|-------------|--------------------------------------------------------------------------------|
| host | строка | Да | URL-адрес платформы Cat2Bug-Platform. |
| projectKey | строка | Да | Ключ проекта из конфигурации приложения. |
| handler | строка | Да | Имя пользователя, зарегистрированного на платформе Cat2Bug-Platform. |
| type | строка | Да | Тип отчета для отправки, all: отправка всех успешных и неудачных данных (отправка успешных отчетов позволяет автоматически закрывать предыдущие ошибки), defect: отправка только неудачных отчетов. |
| version | строка | Да | Версия системы тестирования. |
| isPush | булево | Нет | Отправка отчета об ошибках на [Cat2Bug облачную платформу](https://www.cat2bug.com), значение по умолчанию true для отправки. |### Аннотация метода RandomParameter**Цель:**
Эта аннотация должна использоваться вместе с `@RunWith(Cat2BugAutoSpringSuite.class)`. Класс `Cat2BugAutoSpringSuite` предназначен для сканирования функциональных классов и динамического создания тестовых случаев. Аннотация `RandomParameter` используется для присвоения значений параметрам тестовых методов. Если пользователь не реализует `RandomParameter`, параметры тестовых методов будут случайным образом присваиваться в зависимости от типа данных.
**Параметры:**
| Имя параметра | Тип | Обязательный | Описание функции |
|---------------|----------|------------|-------------------------------------------------------|
| className | Регулярное выражение | Нет | Указывает имя тестового класса, который принимает значение метода, если не указано, то значение принимают все тестовые классы. |
| methodName | Регулярное выражение | Нет | Указывает имя тестового метода, который принимает значение метода, если не указано, то значение принимают все тестовые методы. |
| parameterName | Регулярное выражение | Да | Указывает имя параметра тестового метода, который принимает значение метода. |При тестировании определенных бизнес-функций, таких как удаление данных по определенному Id, необходимо передать конкретное значение Id в качестве параметра. Метод случайного присваивания значений не подходит в этом случае, поэтому можно использовать аннотацию `RandomParameter`, чтобы указать, какой тестовый класс, какой тестовый метод и какой параметр должны принимать это конкретное значение Id.
Кроме того, следует отметить, что метод, аннотированный `RandomParameter`, должен иметь возвращаемое значение.### Класс Cat2BugRunner
Аннотация `Cat2BugRunner` наследуется от класса `BlockJUnit4ClassRunner` и предназначена для тестирования классов, не использующих Spring.
```java
@RunWith(Cat2BugRunner.class)
@PushReport(host = "http://127.0.0.1:8022", projectKey = "********-****-****-****-********", handler="Обработка имени пользователя")
public class Cat2BugRunnerTest {
@Test
public void testFalse() {
Assert.assertTrue(false);
}
}
```
### Класс Cat2BugSpringRunnerКласс `Cat2BugSpringRunner` наследуется от класса `SpringJUnit4ClassRunner` и имеет ту же функциональность, что и класс `Cat2BugRunner`, но используется для тестирования отдельных классов.
```java
@RunWith(Cat2BugSpringRunner.class)
@PushReport(host = "http://127.0.0.1:8022", projectKey = "********-****-****-****-********", handler = "Обработка имени пользователя")
@WebAppConfiguration
@SpringBootTest
public class Cat2BugSpringRunnerTest {
private MockMvc mock;
@Autowired
private WebApplicationContext webContext;
@Before
public void init() {
mock = org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup(webContext).build();
}
@Test
public void testGetAllUsers() throws Exception {
MockHttpServletRequestBuilder builder = MockMvcRequestBuilders.get("/users")
.contentType(MediaType.APPLICATION_JSON);
mock.perform(builder).andExpect(MockMvcResultMatchers.status().isOk())
.andDo(MockMvcResultHandlers.print())
.andReturn().getResponse().getContentAsString();
}
}
```
### Класс Cat2BugAutoSpringSuite
Класс `Cat2BugAutoSpringSuite` наследуется от класса `Suite` и является ключевым классом проекта [Cat2Bug-Spring-Boot-JUnit](https://gitee.com/cat2bug/cat2bug-spring-boot-junit). Он используется для автоматического тестирования всех интерфейсов. При запуске он сканирует пакеты Java на уровне контроллеров, динамически создает тестовые классы для контроллеров и автоматически создает тестовые методы для методов контроллеров, аннотированных аннотациями `GetMapping`, `PostMapping`, `PutMapping`, `DeleteMapping` и `RequestMapping`.```java
@RunWith(Cat2BugAutoSpringSuite.class)
@AutoTestScan(packageName = "com.cat2bug.junit.demo")
@PushReport(host = "http://127.0.0.1:8022", projectKey = "********-****-****-****-********", handler="обработка имени пользователя")
@Transactional
public class Cat2BugJunitDemoApplicationTests {
/**
* Вычисляет возвращаемое значение метода интерфейса, если имя параметра содержит Id.
*
* @return
*/
@RandomParameter(parameterName = ".*Id.*")
public String userId() {
return UUID.randomUUID().toString();
}
/**
* Вычисляет возвращаемое значение метода интерфейса, если имя параметра равно name.
*
* @return
*/
@RandomParameter(parameterName = "name")
public String name() {
String[] names = { "Тань Цзюаньчжань", "Сунь Укунь", "Чжу Байjie", "Ша Уцзинь" };
return names[(int) (Math.random() * names.length)];
}
}
```
Для просмотра примеров тестирования, пожалуйста, обратитесь к проекту cat2bug-spring-boot-demo в исходном коде.
## Будущие планы
Проект [Cat2Bug-Spring-Boot-JUnit](https://gitee.com/cat2bug/cat2bug-spring-boot-junit) продолжает развиваться. В будущем мы планируем улучшить качество кода, производительность и безопасность, а также усовершенствовать функциональность фреймворка. Планы на 2024 год включают:
* Увеличение многомерности отчетов о тестировании;
* Внедрение автоматизированного тестирования производительности;
* Внедрение автоматизированного тестирования качества кода;
## Группа общения Cat2Bug
| QQ-группа: [731462000](https://qm.qq.com/cgi-bin/qm/qr?k=G_vJa478flcFo_1ohJxNYD0mRKafQ7I1&jump_from=webapi&authKey=EL0KrLpnjYWqNN9YXTVksNlNFrV9DHYyPMx2RVOhXqLzfnmc+Oz8oQ38aBOGx90t) | Вайцзюнь-группа: Cat2Bug |
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------|
| <img src="./readme/images/qq.png" style="width: 150px; height: 150px;"> | <img src="./readme/images/wechat.png" style="width: 150px; height: 150px;"> |
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )