You've already forked 1cai-public
mirror of
https://github.com/DmitrL-dev/1cai-public.git
synced 2026-04-28 04:06:04 +02:00
Система CI/CD для тестирования 1С:Предприятие
Комплексная система непрерывной интеграции и развертывания (CI/CD) для автоматизации тестирования в экосистеме 1С:Предприятие, основанная на современных стандартах тестирования 2024-2025 годов.
📋 Содержание
- Обзор системы
- Архитектура
- Быстрый старт
- Компоненты системы
- Конфигурация
- Запуск тестов
- Развертывание
- Мониторинг и отчеты
- Документация
🎯 Обзор системы
Система CI/CD для 1С обеспечивает:
✅ Автоматизация тестирования
- Юнит-тестирование с использованием xUnitFor1C
- Интеграционное тестирование для проверки взаимодействия подсистем
- End-to-End тестирование через Vanessa-automation (BDD подход)
- Тестирование производительности с помощью Тест-центра КИП
- Тестирование безопасности (статический анализ, сканирование уязвимостей)
🚀 Развертывание по окружениям
- Development - автоматическое развертывание на каждый коммит
- Staging - полный прогон тестов для main ветки
- Production - только smoke-тесты с ручным подтверждением
📊 Анализ качества
- Интеграция с SonarQube для анализа качества кода
- Метрики покрытия и технического долга
- Автоматический контроль качества (Quality Gate)
- Отчеты о производительности и стабильности
🔧 DevOps практики
- Поддержка GitLab CI/CD, GitHub Actions и Jenkins
- Docker контейнеризация для изоляции тестов
- Параллельное выполнение тестов
- Автоматический rollback при критических ошибках
🏗️ Архитектура
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ GitLab CI/CD │ │ GitHub Actions │ │ Jenkins │
└─────────┬───────┘ └─────────┬───────┘ └─────────┬───────┘
│ │ │
└──────────────┬───────────────────┬─────────┘
│ │
┌─────▼─────┐ ┌─────▼─────┐
│ 1С Тесты │ │ Скрипты │
│ Docker │ │ Python │
│ Образ │ │ │
└─────┬─────┘ └─────┬─────┘
│ │
┌────────────▼───────────┬──────▼──────┐
│ │ │
┌─────▼─────┐ ┌─────▼─────┐ ┌─────▼─────┐
│ 1С │ │ Test │ │ Reporting │
│ Сервер │ │ Databases │ │ System │
└───────────┘ └───────────┘ └───────────┘
Этапы пайплайна
- Lint & Format - Проверка кода (flake8, black, 1c-lint)
- Unit Tests - Юнит-тесты (pytest, xUnitFor1C)
- Integration Tests - Интеграционные тесты
- Performance Tests - Тесты производительности
- Security Tests - Проверка безопасности (bandit, safety)
- Build & Deploy - Сборка и развертывание
🚀 Быстрый старт
1. Клонирование и настройка
# Клонирование репозитория
git clone <repository-url>
cd 1c-ci-cd-system
# Копирование переменных окружения
cp .env.example .env
# Редактирование настроек под ваше окружение
vim .env
2. Установка зависимостей
# С помощью Make
make setup
# Или вручную
python3.11 -m pip install -r requirements.txt
3. Первый запуск тестов
# Все тесты
make test
# Только юнит-тесты
make test-unit
# Проверка качества кода
make lint
4. Docker сборка
# Сборка Docker образа
make docker-build
# Запуск тестов в контейнере
make docker-test
🧩 Компоненты системы
Файлы конфигурации
| Файл | Описание | Использование |
|---|---|---|
.gitlab-ci.yml |
GitLab CI/CD pipeline | Автоматизация в GitLab |
Jenkinsfile |
Jenkins pipeline | Интеграция с Jenkins |
.github/workflows/test.yml |
GitHub Actions | CI/CD в GitHub |
Dockerfile.test |
Docker образ | Контейнеризация тестов |
Makefile |
Команды разработки | Локальная разработка |
requirements.txt |
Python зависимости | Управление пакетами |
.env.example |
Переменные окружения | Конфигурация системы |
Скрипты автоматизации
# Основные скрипты в /scripts/
scripts/
├── build_1c_configuration.py # Сборка конфигурации 1С
├── run_xunit_tests.py # Запуск xUnit тестов
├── run_integration_tests.py # Интеграционные тесты
├── run_performance_tests.py # Тесты производительности
├── quality_gate_check.py # Проверка качества
├── generate_reports.py # Генерация отчетов
├── deploy.py # Развертывание
└── health_check.py # Проверка состояния
Структура тестов
tests/
├── unit/ # Юнит-тесты (xUnitFor1C)
│ ├── core/ # Тесты ядра системы
│ ├── business-logic/ # Тесты бизнес-логики
│ ├── data-processing/ # Тесты обработки данных
│ └── calculations/ # Тесты расчетов
├── integration/ # Интеграционные тесты
│ ├── web-services/ # Тесты веб-сервисов
│ ├── data-exchange/ # Тесты обмена данными
│ └── external-systems/ # Тесты внешних систем
├── performance/ # Тесты производительности
│ ├── load-test/ # Нагрузочное тестирование
│ ├── stress-test/ # Стресс-тестирование
│ └── endurance-test/ # Выносливость
├── security/ # Тесты безопасности
│ ├── code-analysis/ # Статический анализ
│ ├── dependency-check/ # Проверка зависимостей
│ └── vulnerability-scan/ # Сканирование уязвимостей
├── e2e/ # End-to-End тесты (Vanessa)
└── smoke/ # Smoke-тесты
⚙️ Конфигурация
Переменные окружения
Основные настройки в .env файле:
# 1С конфигурация
V8_VERSION=8.3.22
V8_SERVER_URL=http://your-1c-server
V8_USER=your_username
V8_PASSWORD=your_password
# Тестирование
TEST_TIMEOUT=1800
MAX_WORKERS=4
COVERAGE_THRESHOLD=80
# Базы данных
DB_SERVER_URL=your-db-server
DB_NAME=test_db
DB_USER=sa
DB_PASSWORD=your_password
# SonarQube
SONARQUBE_HOST_URL=http://your-sonarqube
SONARQUBE_TOKEN=your_token
# Уведомления
SLACK_WEBHOOK_URL=your_webhook
EMAIL_RECIPIENTS=team@company.com
Настройка GitLab CI/CD
# .gitlab-ci.yml
variables:
V8_VERSION: "8.3.22"
V8_SERVER_URL: "$V8_SERVER_URL"
V8_USER: "$V8_USER"
V8_PASSWORD: "$V8_PASSWORD"
stages:
- lint
- unit-test
- integration-test
- performance-test
- security-test
- build
- deploy
Настройка GitHub Actions
# .github/workflows/test.yml
env:
V8_VERSION: "8.3.22"
V8_SERVER_URL: ${{ secrets.V8_SERVER_URL }}
V8_USER: ${{ secrets.V8_USER }}
V8_PASSWORD: ${{ secrets.V8_PASSWORD }}
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main, develop ]
Настройка Jenkins
// Jenkinsfile
pipeline {
agent none
environment {
V8_VERSION = '8.3.22'
V8_SERVER_URL = credentials('v8-server-url')
V8_USER = credentials('v8-user')
V8_PASSWORD = credentials('v8-password')
}
stages {
stage('Lint & Format') {
parallel {
// Этапы проверки кода
}
}
stage('Unit Tests') {
parallel {
// Юнит-тесты
}
}
}
}
🧪 Запуск тестов
Команды Make
# Полный цикл тестирования
make test
# Отдельные типы тестов
make test-unit # Юнит-тесты
make test-integration # Интеграционные тесты
make test-performance # Тесты производительности
make test-security # Тесты безопасности
make test-e2e # End-to-End тесты
make test-smoke # Smoke-тесты
# Проверка качества
make lint # Полная проверка качества
make lint-flake8 # Проверка flake8
make lint-black # Проверка форматирования
make lint-bandit # Анализ безопасности
Запуск через Docker
# Сборка образа
docker build -f Dockerfile.test -t 1c-test:latest .
# Запуск тестов
docker run --rm \
-v $(pwd):/workspace \
-e V8_SERVER_URL=http://your-server \
-e V8_USER=your_user \
-e V8_PASSWORD=your_password \
1c-test:latest make test
# Запуск конкретного теста
docker run --rm \
-v $(pwd):/workspace \
1c-test:latest make test-specific TEST=tests/unit/test_calc.py
Параметры командной строки
# Запуск с параметрами
pytest tests/unit/ \
--timeout=1800 \
--maxfail=5 \
--cov=src \
--cov-report=html \
-n 4 \
--html=reports/test-results.html
# Отладка
pytest tests/unit/test_specific.py -v -s --pdb
# Профилирование
pytest tests/unit/ --benchmark-only
🚀 Развертывание
Автоматическое развертывание
# Development (автоматически)
make deploy-dev
# Staging (требует успешных тестов)
make deploy-staging
# Production (ручное подтверждение)
make deploy-prod
Ручное развертывание
# Сборка конфигурации
make build
# Развертывание с параметрами
python3 scripts/deploy.py \
--environment staging \
--source build/distribution/ \
--server-url http://staging-1c.company.com \
--user admin \
--password secret \
--timeout 600
Окружения
| Окружение | Триггер | Тесты | Авто-деплой |
|---|---|---|---|
| Development | Коммит в любую ветку | Smoke + Unit | ✅ |
| Staging | Merge в main | Полный набор | ✅ |
| Production | Ручной запуск | Smoke + Critical | ❌ |
📊 Мониторинг и отчеты
Отчеты о тестировании
# Генерация отчетов
make generate-reports
make report-coverage
make report-performance
make report-quality
Метрики качества
- Покрытие кода: ≥80% (разработка), ≥85% (staging), ≥90% (production)
- Качество кода: SonarQube Quality Gate
- Производительность: Время выполнения, использование памяти
- Безопасность: Отсутствие критических уязвимостей
Дашборды
| Система | URL | Описание |
|---|---|---|
| SonarQube | http://sonarqube:9000 | Анализ качества кода |
| Test Results | reports/test-results.html |
Результаты тестов |
| Coverage | reports/coverage/index.html |
Покрытие кода |
| Performance | reports/performance/ |
Отчеты производительности |
Уведомления
# Настройка Slack
export SLACK_WEBHOOK_URL=https://hooks.slack.com/services/...
export SLACK_ENABLED=true
# Настройка Email
export SMTP_HOST=smtp.company.com
export EMAIL_ENABLED=true
📚 Документация
Стандарты тестирования
Основан на стандартах тестирования 1С, который включает:
- Тест-пирамида для 1С проектов
- xUnitFor1C для юнит-тестирования
- Vanessa-automation для BDD тестирования
- Тест-центр КИП для производительности
- Центр контроля качества для мониторинга
Примеры использования
Юнт-тест xUnitFor1C
// tests/unit/core/test_calculation.js
Функция ТестРасчетаНДС_БазовыйСлучай() Экспорт
// Arrange
Цена = 1000;
СтавкаНДС = 20;
ОжидаемаяСуммаНДС = 200;
// Act
ФактическаяСуммаНДС = РассчитатьНДС(Цена, СтавкаНДС);
// Assert
Ожидаем.Что(ФактическаяСуммаНДС).Равно(ОжидаемаяСуммаНДС);
КонецФункции
BDD тест Vanessa
# tests/e2e/sales/sales_order.feature
Функционал: Создание заказа покупателя
Сценарий: Создание заказа с одним товаром
Допустим я открываю список заказов покупателей
Когда я нажимаю кнопку "Создать"
И я заполняю поле "Контрагент" значением "Тестовый контрагент"
И я добавляю в таблицу "Товары" товар "Тестовый товар" в количестве 5
И я нажимаю "Провести и закрыть"
То система должна показать сообщение об успешном создании заказа
API документация
# scripts/run_xunit_tests.py
"""
Запуск юнит-тестов xUnitFor1C
Использование:
python3 scripts/run_xunit_tests.py \
--database test_db \
--tests-path tests/unit/ \
--output reports/test-results.xml \
--format junit
"""
def run_xunit_tests(database, tests_path, output, format='junit'):
\"\"\"Запуск xUnitFor1C тестов\"\"\"
pass
🔧 Устранение неисправностей
Часто встречающиеся проблемы
Ошибка подключения к 1С серверу
# Проверка доступности
curl -I http://your-1c-server
# Проверка переменных окружения
echo $V8_SERVER_URL
echo $V8_USER
Проблемы с покрытием кода
# Очистка кэша
make clean-cache
# Повторный запуск с покрытием
pytest tests/unit/ --cov=src --cov-report=html
Ошибки Docker
# Пересборка образа
docker rmi 1c-test:latest
make docker-build
# Очистка Docker
docker system prune -a
Логи и отладка
# Подробные логи
export DEBUG_MODE=true
export VERBOSE_MODE=true
# Сохранение логов
make test 2>&1 | tee logs/test-run.log
# Отладка контейнера
docker run -it --entrypoint /bin/bash 1c-test:latest
🤝 Участие в разработке
Добавление новых тестов
- Создайте файл теста в соответствующей директории
- Следуйте naming conventions
- Добавьте тест в пайплайн
- Обновите документацию
Code Style
# Форматирование кода
make lint-black
make lint-isort
# Проверка качества
make lint-flake8
make lint-mypy
Pull Request процесс
- Создайте feature ветку
- Добавьте тесты для изменений
- Убедитесь, что все тесты проходят
- Обновите документацию
- Создайте Pull Request
📄 Лицензия
Этот проект лицензирован под MIT License. Подробности в файле LICENSE.
📞 Поддержка
- Документация: docs/
- Issues: GitHub Issues
- Email: devops@company.com
- Slack: #ci-cd-1c
Система CI/CD для 1С разработана в соответствии с современными стандартами тестирования 2024-2025 годов