1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/cat2bug-cat2bug-junit

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Cat2Bug-Spring-Boot-JUnit

Описание

Cat2Bug-Spring-Boot-JUnit — это Java-пакет для автоматизации юнит-тестирования Spring Boot, созданный командой Cat2Bug. Цель состоит в том, чтобы с помощью нескольких строк кода выполнить юнит-тестирование всего проекта, сократив затраты на поддержку юнит-тестирования и повысив качество и эффективность управления проектом.

Концепция

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

Ссылки

Архитектура программного обеспечения

Cat2Bug-Spring-Boot-JUnit основан на Spring Boot 2 и JUnit 4 и включает функции автоматической отправки отчетов о тестировании и автоматического создания тестовых классов. Это позволяет разработчикам быстро выполнять юнит-тестирование с помощью простых аннотаций.

Архитектура Cat2Bug-Spring-Boot-JUnit

Процесс выполнения

Процесс выполнения Cat2Bug-Spring-Boot-JUnit## Преимущества и особенности

  • Единственная на данный момент автоматизированная система юнит-тестирования для Spring Boot.
  • Существенно снижает затраты на поддержку юнит-тестирования, практически до нуля. Можно выполнить тестирование сотен интерфейсов за несколько минут.
  • В рамках экосистемы Cat2Bug можно использовать Cat2Bug-Platform для управления жизненным циклом ошибок и получения визуальных отчетов для управления проектом.

Установка

  • Gradle
testImplementation ("com.cat2bug:cat2bug-spring-boot-junit:0.0.5")
  • Maven
<dependency>
    <groupId>com.cat2bug</groupId>
    <artifactId>cat2bug-spring-boot-junit</artifactId>
    <version>0.0.5</version>
    <scope>test</scope>
</dependency>

Использование в экосистеме Cat2Bug

В настоящее время Cat2Bug-Spring-Boot-JUnit можно использовать в сочетании с платформой Cat2Bug-Platform для бесшовной интеграции. Cat2Bug-Spring-Boot-JUnit отвечает за выполнение юнит-тестов и отправку отчетов о тестировании через Open API на платформу Cat2Bug-Platform. Платформа Cat2Bug-Platform предназначена для управления дефектами в отчетах и экспорта связанных отчетов о тестировании. Ее архитектура представлена ниже:Кошка2Баг-Платформа-архитектурный-диаграмма### Создание окружения Cat2Bug-Platform

Если необходимо отправить результаты неудачных тестов в систему отслеживания дефектов после выполнения юнит-тестов, необходимо сначала развернуть платформу Cat2Bug-Platform и настроить API KEY. Ниже приведен способ быстрого развертывания, для получения дополнительной информации обратитесь к документации Cat2Bug.

  1. Скачайте и разверните Cat2Bug-Platform с помощью Docker, используя следующий код:
docker run -it -d -p 8022:8022 --name cat2bug-platform cat2bug/cat2bug-platform:latest

После успешного запуска перейдите по адресу http://127.0.0.1:8022 в браузере. Если страница открывается корректно, это означает, что платформа запущена успешно;

  1. В Cat2Bug-Platform зарегистрируйте пользователя, создайте команду и проект. В настройках API KEY проекта добавьте ключ для аутентификации при отправке отчетов о тестах, интерфейс представлен на следующем изображении:

API_KEY

Теперь окружение Cat2Bug-Platform создано.

Инструкции по использованию

Важные замечания перед использованиемТак как Cat2Bug-Spring-Boot-JUnit использует механизм рефлексии для динамического создания тестовых классов, а используемые им Java-библиотеки в версиях JDK 9+ требуют явного включения, необходимо добавлять соответствующие параметры запуска при выполнении тестов. В качестве примера, ниже приведен способ добавления параметров в редактор IDEA с использованием JDK 17:Настройки запуска

Без указанных в красных рамках параметров при выполнении тестов могут возникнуть ошибки "не найдены некоторые классы". Вы также можете добавить недостающие классы по подсказкам, но в Java 8 такие проблемы не возникают.

Тестирование всех интерфейсов

Аналогично JUnit-тестам, в Spring-проекте создайте тестовый класс, используя следующий код:

@SpringBootTest
@RunWith(Cat2BugAutoSpringSuite.class)
@AutoTestScan(packageName = "com.cat2bug.junit.demo.controller")
public class Cat2bugSpringBootDemoApplicationTests {
    // Не требуется добавлять код
}
  • @SpringBootTest: аннотация для тестирования Spring;
  • @RunWith(Cat2BugAutoSpringSuite.class): аннотация для использования набора тестов Cat2Bug;
  • @AutoTestScan(packageName = "com.cat2bug.junit.demo.controller"): путь к пакету, который нужно сканировать. Добавление вышеупомянутых трех аннотаций позволяет автоматически сканировать и тестировать все интерфейсы проекта. Все интерфейсы, которые возвращают статус-код 200, считаются прошедшими тестирование. Результаты тестирования формируются в отчет, который выводится на панели управления, как показано на следующем рисунке:

Отчет о тестировании проекта

Установка параметров запроса для определенного интерфейсаВ настоящее время Cat2Bug-Spring-Boot-JUnit использует случайные значения для тестирования всех интерфейсов. Мы также предоставляем аннотацию 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);
    }
}

С помощью одного из вышеописанных способов можно получить права доступа для тестирования интерфейсов.

Отправка отчета на платформу Cat2Bug-Platform

После завершения тестирования можно отправить тестовый отчет на платформу управления дефектами, используя следующий код:````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-Platform](./readme/images/cat2bug-platform-report.png)

## Отчеты

В проекте [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 )

Вы можете оставить комментарий после Вход в систему

Введение

Это проект на основе Spring Boot для единичных тестов, предназначенный для автоматического тестирования функций интерфейсов и может быть загружен на платформу cat2bug-platform. Развернуть Свернуть
Java и 2 других языков
MIT
Отмена

Обновления (1)

все

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/cat2bug-cat2bug-junit.git
git@api.gitlife.ru:oschina-mirror/cat2bug-cat2bug-junit.git
oschina-mirror
cat2bug-cat2bug-junit
cat2bug-cat2bug-junit
master