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

275 lines
No EOL
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Описание тестирования клиринговой системы
## Описание проведения тестирования в 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 со следующим содержанием:
```yaml
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 файла:
```yaml
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/
```