1
0
mirror of https://github.com/DmitrL-dev/1cai-public.git synced 2026-04-28 04:06:04 +02:00
Files

Система 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    │
      └───────────┘          └───────────┘  └───────────┘

Этапы пайплайна

  1. Lint & Format - Проверка кода (flake8, black, 1c-lint)
  2. Unit Tests - Юнит-тесты (pytest, xUnitFor1C)
  3. Integration Tests - Интеграционные тесты
  4. Performance Tests - Тесты производительности
  5. Security Tests - Проверка безопасности (bandit, safety)
  6. 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

🤝 Участие в разработке

Добавление новых тестов

  1. Создайте файл теста в соответствующей директории
  2. Следуйте naming conventions
  3. Добавьте тест в пайплайн
  4. Обновите документацию

Code Style

# Форматирование кода
make lint-black
make lint-isort

# Проверка качества
make lint-flake8
make lint-mypy

Pull Request процесс

  1. Создайте feature ветку
  2. Добавьте тесты для изменений
  3. Убедитесь, что все тесты проходят
  4. Обновите документацию
  5. Создайте Pull Request

📄 Лицензия

Этот проект лицензирован под MIT License. Подробности в файле LICENSE.

📞 Поддержка


Система CI/CD для 1С разработана в соответствии с современными стандартами тестирования 2024-2025 годов