Статья #11
Автоматизация тестирования конфигураций 1С
Проблема тестирования
- Написание тестов занимает много времени
- Поддержка тестов при изменении кода
- Низкое покрытие тестами
- Отсутствие культуры тестирования
AI для автоматизации тестирования
1. Генерация unit-тестов
"Создай unit-тесты для модуля РаботаСДокументами:
Покрой тестами все экспортные функции.
Используй фреймворк vanessa-behavior или xUnitFor1C.
Типы тестов:
- Позитивные сценарии
- Негативные сценарии (некорректные данные)
- Граничные условия
- Тесты производительности"
Результат:
// Автоматически сгенерированные тесты
Процедура Тест_СозданиеДокумента_УспешноеСоздание() Экспорт
// Arrange
Контрагент = Тесты.СоздатьТестовыйКонтрагент();
Номенклатура = Тесты.СоздатьТестовуюНоменклатуру();
// Act
Документ = РаботаСДокументами.СоздатьДокументРеализации(
Контрагент,
Номенклатура,
10
);
// Assert
Тесты.ПроверитьРавенство(Документ.Контрагент, Контрагент,
"Контрагент установлен неверно");
Тесты.ПроверитьИстину(Документ.Товары.Количество() > 0,
"Табличная часть пуста");
КонецПроцедуры
2. Генерация тестовых данных
"Создай набор тестовых данных для тестирования модуля продаж:
- 100 контрагентов (разные типы: ЮЛ, ИП, ФЛ)
- 500 номенклатуры (разные группы)
- 1000 документов реализации за последние 6 месяцев
- Связные данные (каждая реализация ссылается на существующих контрагентов)
Данные должны быть реалистичными."
3. AI test runner с анализом
class AITestRunner:
async def run_and_analyze(self, test_suite):
# Запуск тестов
results = await self.run_tests(test_suite)
# AI анализ упавших тестов
for failed_test in results.failures:
analysis = await claude.analyze_test_failure({
'test': failed_test.name,
'error': failed_test.error,
'code': failed_test.source_code
})
# Предложение исправлений
print(f"Test: {failed_test.name}")
print(f"Probable cause: {analysis.cause}")
print(f"Suggested fix: {analysis.fix}")
4. Mutation testing
"Создай mutation testing фреймворк для 1С:
1. Автоматически мутируй код (измени операторы, константы)
2. Запусти тесты на мутированном коде
3. Если тесты проходят - покрытие недостаточное
4. Создай отчет по качеству тестов"
5. Визуальное тестирование форм
// Puppeteer-like testing for 1C web client
class WebClient1CTest {
async testOrderForm() {
await this.open('/Document/Order/Form');
// AI распознает элементы формы
const customerField = await this.findElement('Контрагент');
await customerField.select('ООО Тест');
// AI проверяет состояние
const total = await this.findElement('СуммаДокумента');
expect(total.value).toBeGreaterThan(0);
// Screenshot comparison
const screenshot = await this.takeScreenshot();
await this.compareWithBaseline(screenshot);
}
}
6. Автоматическая генерация BDD сценариев
"Создай BDD сценарии (Gherkin) для процесса создания заказа покупателя:
Проанализируй код модуля и форму документа.
Создай сценарии покрывающие все возможные пути выполнения."
Результат:
# language: ru
Функционал: Создание заказа покупателя
Сценарий: Успешное создание заказа
Дано есть контрагент "ООО Рога и Копыта"
И есть номенклатура "Товар 1" с ценой 100
Когда я создаю новый заказ покупателя
И выбираю контрагента "ООО Рога и Копыта"
И добавляю товар "Товар 1" с количеством 10
То сумма документа равна 1000
И документ успешно записан
Сценарий: Попытка создать заказ без контрагента
Когда я создаю новый заказ покупателя
И добавляю товар "Товар 1" с количеством 10
И пытаюсь записать документ
То появляется ошибка "Не заполнен контрагент"
Интеграция с CI/CD
# .github/workflows/test.yml
name: 1C Tests
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Run 1C tests
run: |
./scripts/run-1c-tests.sh
- name: AI Test Analysis
run: |
claude code "Проанализируй результаты тестов и создай отчет"
Результаты
- Покрытие тестами: с 10% до 80%
- Время написания тестов: снижение на 70%
- Раннее обнаружение багов
- Уверенность при рефакторинге