ИИ для написания тестов
9 часов назад
Никита Вихров
Ответы
ИИ для написания тестов
Тесты — то что все должны писать и никто не любит. ИИ справляется с рутиной: генерирует базовые кейсы, граничные случаи, моки. Остаётся проверить логику и добавить специфику бизнеса.
Генерация тестов по функции
Генерация граничных случаев по спецификации
Иногда нужно не писать тесты с нуля, а найти что пропустили:
Вот существующие тесты:
Найди граничные случаи и сценарии которые НЕ покрыты тестами. Для каждого случая напиши: описание сценария и тест-код.""" }] ) return response.content[0].text
---
**Тесты для API-эндпоинтов**
```python
def generate_api_tests(endpoint_code: str, schema_code: str) -> str:
response = client.messages.create(
model="claude-opus-4-5",
max_tokens=2048,
system="""Пишешь интеграционные тесты для FastAPI через pytest и httpx.AsyncClient.
Структура файла:
- фикстуры для клиента и тестовой БД
- тесты сгруппированы по эндпоинту
- покрывай: успешные запросы, валидацию, авторизацию, несуществующие ресурсы
Используй factory_boy или fixtures для тестовых данных.""",
messages=[{
"role": "user",
"content": f"""Эндпоинт:
```python
{endpoint_code}
Схемы Pydantic:
Напиши интеграционные тесты.""" }] ) return response.content[0].text
---
**Мутационное тестирование с ИИ**
Проверь насколько тесты реально ловят баги — попроси ИИ внести намеренные ошибки:
```python
def generate_mutations(function_code: str, count: int = 5) -> list[dict]:
response = client.messages.create(
model="claude-opus-4-5",
max_tokens=1024,
system="""Создаёшь мутации кода для мутационного тестирования.
Мутация — небольшое изменение которое должно сломать хотя бы один тест.
Отвечай JSON-массивом: [{"description": "...", "mutated_code": "..."}]""",
messages=[{
"role": "user",
"content": f"Создай {count} мутаций для этой функции:\n\n```python\n{function_code}\n```"
}]
)
import json, re
text = re.sub(r'```(?:json)?|```', '', response.content[0].text).strip()
return json.loads(text)
def check_test_quality(function_code: str, test_code: str):
"""Проверяет ловят ли тесты намеренные баги"""
mutations = generate_mutations(function_code)
caught = 0
for mutation in mutations:
# Здесь в реальности нужно запустить тесты с мутированным кодом
print(f"Мутация: {mutation['description']}")
print(f"Код: {mutation['mutated_code'][:100]}...")
print(f"\nПроверь вручную: ловят ли твои тесты эти мутации?")
print("Если нет — добавь тесты для непокрытых случаев")
Что проверять в сгенерированных тестах
ИИ генерирует структурно правильные тесты, но иногда:
- Моки настроены неверно — тест проходит но ничего не проверяет
- Ассерты слишком мягкие —
assert result is not Noneвместо конкретного значения - Тест проверяет реализацию а не поведение — ломается при рефакторинге
Всегда запускай сгенерированные тесты и проверяй что они реально падают когда код неправильный.
На курсе «ИИ для разработчиков» на Хекслете разбирают как использовать ИИ на каждом этапе разработки — включая тестирование и ревью кода на реальном проекте.
9 часов назад
Никита Вихров





