После завершения тестов они должны вывести оба файла XML ...
Если основной функцией вашей задачи является чтение или создание файлов для локальной файловой системы, частолучше запустить его за пределами докера. В случае интеграционных тестов это даже довольно просто: вместо того, чтобы запускать тесты внутри контейнера Docker и указывать на конечные точки других контейнеров, запускайте тесты на хосте и указывайте на их опубликованные порты. Если ваша тестовая среда может запускать команды docker-compose
, то вы можете запустить стек контейнеров в качестве тестового устройства.
Если по какой-то причине у них есть для запуска в Docker, то вы можете связатьсмонтировать каталог хоста в контейнер для получения файлов результатов. docker-compose run
поддерживает дополнительные -v
тома монтирования, так что вы должны иметь возможность запускать что-то вроде
docker-compose run -v $PWD/my_service_tests:/output my_service ..
Я бы хотел остановить и удалить не толькоконтейнер, на котором я выполнял тесты, но все контейнеры, которые были запущены, потому что он зависел от них.
Я не думаю, что в Docker Compose есть такая опция;это не , что умный. Рассмотрим случай, когда два разных теста выполняются одновременно, каждый из которых запускает отдельный тестовый контейнер, но совместно использует контейнер базы данных. Первый тест не может остановить контейнер базы данных, потому что второй тест использует его, но Compose действительно не знает об этом.
Если вы не возражаете запускать полный изолированный стек для каждого запуска теста,тогда вы можете использовать опцию docker-compose -p
, чтобы сделать это. Затем вы можете использовать docker-compose rm
для очистки всего, для этого конкретного теста.
docker-compose -p test1 run -v $PWD/test1:/output my_service ...
docker-compose -p test1 stop
docker-compose -p test1 rm