clearing/clr_test/README.md
2025-07-10 11:03:24 +03:00

11 KiB
Raw Blame History

Описание тестирования клиринговой системы

Описание проведения тестирования в GitLab CI/CD

Файл .gitlab-ci.yml определяет этапы тестирования, сейчас существуют 3 этапа:

  • preflight - загрузка тест-кейсов из репозитория clearing_test
  • build - сборка jar-файлов
  • test - запуск тестирования

Во время запуска тестирования jar-файлы копируются в папку ./clr_test/clearing-all/bin, а sql-файлы в ./clr_test/clearing-all/db

Основное взаимодействие с Docker'ом происходит посредством python-скрипта

Для выбора определенных тест-кейсов можно задать переменную окружения TEST_CASES, например: 5.0.SESN.FOND.TRDT;5.1.SESN.FOND.TRDT.NODEPO (для разделения используется ;)

Данный скрипт копирует следующие файлы:

  • Тестовые файлы в ./clr_test/clearing-all/clearing_testing_utils/
  • Подготовленную базу данных в ./clr_test/db/data

Для обновления базы данных скрипт ищет все файлы updateDDL_*.sql в ./clr_test/clearing-all/db выше чем DDL_VERSION_FROM из скрипта и объединяет их в один sql-файл в ./clr_test/db-updater/combined_update_ddl.sql

Удаляются старые образы:

  • docker rmi -f clr_test-db
  • docker rmi -f clr_test-db-updater
  • docker rmi -f clr_test-clearing_system

Выполняется запуск Docker Compose командой docker compose up --abort-on-container-exit --exit-code-from clearing_system --build --force-recreate

В зависимости от кода выхода Docker заполняется файл clr_test/results.txt

После выполнения скрипта ищется строка со словом failed, если она есть, то тест завершается в ошибкой

Описание создания подготовленной базы данных для тест-кейса

Репозиторий clearing_test содержит индивидуальные директории для каждого из тест-кейса:

  • clearing_testing_utils содержит входные и ожидаемые файлы клиринговой системы;
  • data сохраненное состояние базы данных для рассматриваемого тест-кейса;
  • db содержит, уникальные для конкретного тест-кейса, sql-файлы.

Для начала очистим папку data и добавим в директорию db следующие файлы с сохранением последовательности:

  • DDL.sql
  • DICTIONARIES.sql
  • MARKET.sql
  • export.sql уникален для тест-кейса, уже присутствует в директории
  • test-data.sql уникален для тест-кейса, уже присутствует в директории

В корневой папке создадим файл docker-compose.yml со следующим содержанием:

services:
  test_db:
    image: postgres:14.1-alpine
    restart: always
    security_opt:
      - seccomp:unconfined
    environment:
      POSTGRES_USER: clearing
      POSTGRES_PASSWORD: Aa111111
      POSTGRES_DB: clearing
      POSTGRES_HOST_AUTH_METHOD: trust
    volumes:
      - ./data:/var/lib/postgresql/data
      - ./db:/docker-entrypoint-initdb.d/

Запустим Docker командой docker compose up, после инициализации базы данных остановим контейнер командой docker compose down, сохраненное состояние базы данных будет находиться в директории data. Важно, для сохранения корректной структуры при загрузке в GitLab необходимо добавить пустые файлы в пустые директории. Например, посредством данной PowerShell команды:

Get-ChildItem -Directory -Recurse | Where-Object {
    (Get-ChildItem -Path $_.FullName -File).Count -eq 0 -and (Get-ChildItem -Path $_.FullName -Directory).Count -eq 0
} | ForEach-Object {
    $newFilePath = Join-Path $_.FullName ".gitkeep"
    New-Item -ItemType file -Path $newFilePath -Force | Out-Null
    Write-Host "Created file in: $($_.FullName)"
}

Также, если добавить папки db и data в их соответствующие директории по наименованию тест-кейса, можно обновить базы данных для все тест-кейсов одновременно, например, посредством следующего docker-compose.yml файла:

services:
  1_0_sesn_mkr_curr:
    image: postgres:14.1-alpine
    restart: always
    security_opt:
      - seccomp:unconfined
    environment:
      POSTGRES_USER: clearing
      POSTGRES_PASSWORD: Aa111111
      POSTGRES_DB: clearing
      POSTGRES_HOST_AUTH_METHOD: trust
    volumes:
      - ./1_0_sesn_mkr_curr/data:/var/lib/postgresql/data
      - ./1_0_sesn_mkr_curr/db:/docker-entrypoint-initdb.d/

  1_1_sesn_mkr_curr:
    image: postgres:14.1-alpine
    restart: always
    security_opt:
      - seccomp:unconfined
    environment:
      POSTGRES_USER: clearing
      POSTGRES_PASSWORD: Aa111111
      POSTGRES_DB: clearing
      POSTGRES_HOST_AUTH_METHOD: trust
    volumes:
      - ./1_1_sesn_mkr_curr/data:/var/lib/postgresql/data
      - ./1_1_sesn_mkr_curr/db:/docker-entrypoint-initdb.d/

  1_2_sesn_mkr_curr_tsoper:
    image: postgres:14.1-alpine
    restart: always
    security_opt:
      - seccomp:unconfined
    environment:
      POSTGRES_USER: clearing
      POSTGRES_PASSWORD: Aa111111
      POSTGRES_DB: clearing
      POSTGRES_HOST_AUTH_METHOD: trust
    volumes:
      - ./1_2_sesn_mkr_curr_tsoper/data:/var/lib/postgresql/data
      - ./1_2_sesn_mkr_curr_tsoper/db:/docker-entrypoint-initdb.d/

  2_0_sesn_mkr_medm:
    image: postgres:14.1-alpine
    restart: always
    security_opt:
      - seccomp:unconfined
    environment:
      POSTGRES_USER: clearing
      POSTGRES_PASSWORD: Aa111111
      POSTGRES_DB: clearing
      POSTGRES_HOST_AUTH_METHOD: trust
    volumes:
      - ./2_0_sesn_mkr_medm/data:/var/lib/postgresql/data
      - ./2_0_sesn_mkr_medm/db:/docker-entrypoint-initdb.d/

  3_0_sesn_mkr_finl:
    image: postgres:14.1-alpine
    restart: always
    security_opt:
      - seccomp:unconfined
    environment:
      POSTGRES_USER: clearing
      POSTGRES_PASSWORD: Aa111111
      POSTGRES_DB: clearing
      POSTGRES_HOST_AUTH_METHOD: trust
    volumes:
      - ./3_0_sesn_mkr_finl/data:/var/lib/postgresql/data
      - ./3_0_sesn_mkr_finl/db:/docker-entrypoint-initdb.d/

  5_0_sesn_fond_trdt:
    image: postgres:14.1-alpine
    restart: always
    security_opt:
      - seccomp:unconfined
    environment:
      POSTGRES_USER: clearing
      POSTGRES_PASSWORD: Aa111111
      POSTGRES_DB: clearing
      POSTGRES_HOST_AUTH_METHOD: trust
    volumes:
      - ./5_0_sesn_fond_trdt/data:/var/lib/postgresql/data
      - ./5_0_sesn_fond_trdt/db:/docker-entrypoint-initdb.d/

  5_1_sesn_fond_trdt_nodepo:
    image: postgres:14.1-alpine
    restart: always
    security_opt:
      - seccomp:unconfined
    environment:
      POSTGRES_USER: clearing
      POSTGRES_PASSWORD: Aa111111
      POSTGRES_DB: clearing
      POSTGRES_HOST_AUTH_METHOD: trust
    volumes:
      - ./5_1_sesn_fond_trdt_nodepo/data:/var/lib/postgresql/data
      - ./5_1_sesn_fond_trdt_nodepo/db:/docker-entrypoint-initdb.d/

  6_0_sesn_fond_ipob:
    image: postgres:14.1-alpine
    restart: always
    security_opt:
      - seccomp:unconfined
    environment:
      POSTGRES_USER: clearing
      POSTGRES_PASSWORD: Aa111111
      POSTGRES_DB: clearing
      POSTGRES_HOST_AUTH_METHOD: trust
    volumes:
      - ./6_0_sesn_fond_ipob/data:/var/lib/postgresql/data
      - ./6_0_sesn_fond_ipob/db:/docker-entrypoint-initdb.d/

  7_0_sesn_fond_ipo0:
    image: postgres:14.1-alpine
    restart: always
    security_opt:
      - seccomp:unconfined
    environment:
      POSTGRES_USER: clearing
      POSTGRES_PASSWORD: Aa111111
      POSTGRES_DB: clearing
      POSTGRES_HOST_AUTH_METHOD: trust
    volumes:
      - ./7_0_sesn_fond_ipo0/data:/var/lib/postgresql/data
      - ./7_0_sesn_fond_ipo0/db:/docker-entrypoint-initdb.d/

  8_0_sesn_fond_ipot:
    image: postgres:14.1-alpine
    restart: always
    security_opt:
      - seccomp:unconfined
    environment:
      POSTGRES_USER: clearing
      POSTGRES_PASSWORD: Aa111111
      POSTGRES_DB: clearing
      POSTGRES_HOST_AUTH_METHOD: trust
    volumes:
      - ./8_0_sesn_fond_ipot/data:/var/lib/postgresql/data
      - ./8_0_sesn_fond_ipot/db:/docker-entrypoint-initdb.d/

  9_0_sessn_mult_unit:
    image: postgres:14.1-alpine
    restart: always
    security_opt:
      - seccomp:unconfined
    environment:
      POSTGRES_USER: clearing
      POSTGRES_PASSWORD: Aa111111
      POSTGRES_DB: clearing
      POSTGRES_HOST_AUTH_METHOD: trust
    volumes:
      - ./9_0_sessn_mult_unit/data:/var/lib/postgresql/data
      - ./9_0_sessn_mult_unit/db:/docker-entrypoint-initdb.d/

  9_1_sessn_mult_unit_tcr:
    image: postgres:14.1-alpine
    restart: always
    security_opt:
      - seccomp:unconfined
    environment:
      POSTGRES_USER: clearing
      POSTGRES_PASSWORD: Aa111111
      POSTGRES_DB: clearing
      POSTGRES_HOST_AUTH_METHOD: trust
    volumes:
      - ./9_1_sessn_mult_unit_tcr/data:/var/lib/postgresql/data
      - ./9_1_sessn_mult_unit_tcr/db:/docker-entrypoint-initdb.d/

  9_2_sessn_mult_unit_tkr:
    image: postgres:14.1-alpine
    restart: always
    security_opt:
      - seccomp:unconfined
    environment:
      POSTGRES_USER: clearing
      POSTGRES_PASSWORD: Aa111111
      POSTGRES_DB: clearing
      POSTGRES_HOST_AUTH_METHOD: trust
    volumes:
      - ./9_2_sessn_mult_unit_tkr/data:/var/lib/postgresql/data
      - ./9_2_sessn_mult_unit_tkr/db:/docker-entrypoint-initdb.d/

  9_3_sessn_mult_unit_dmav:
    image: postgres:14.1-alpine
    restart: always
    security_opt:
      - seccomp:unconfined
    environment:
      POSTGRES_USER: clearing
      POSTGRES_PASSWORD: Aa111111
      POSTGRES_DB: clearing
      POSTGRES_HOST_AUTH_METHOD: trust
    volumes:
      - ./9_3_sessn_mult_unit_dmav/data:/var/lib/postgresql/data
      - ./9_3_sessn_mult_unit_dmav/db:/docker-entrypoint-initdb.d/