Асинхронный запуск докер-контейнеров с python - PullRequest
0 голосов
/ 04 мая 2018

Я переместил наш тестовый фреймворк в док-контейнер. Одна из моих целей - сделать так, чтобы мы могли раскрутить 1 контейнер за тест и затем сообщить о его результатах.

У меня это работает со следующим [пожалуйста, помните, что это WIP]: api_test_runner.py

import subprocess
from api_test_list import single_test_list

for test in single_test_list:

    command = subprocess.check_output(['docker', 'run', '-e', 'USER=root', '-e', 'TEST=' + test, 'api_test_container'])
    print(command)

Он запускает список тестов и раскручивает контейнер для каждого, но ожидает остановки одного контейнера, прежде чем перейти к следующему тесту:

(py3_api_automation) remmac05674:api_automation$ python api_test_runner.py
b'============================= test session starts ==============================\nplatform linux -- Python 3.6.4, pytest-3.2.5, py-1.5.2, pluggy-0.4.0\nrootdir: /app, inifile:\nplugins: xdist-1.20.1, forked-0.2, cloud-2.0.0\ncollected 1 item\n\ntest_1.py .\n\n=========================== 1 passed in 1.81 seconds ===========================\n'
b'============================= test session starts ==============================\nplatform linux -- Python 3.6.4, pytest-3.2.5, py-1.5.2, pluggy-0.4.0\nrootdir: /app, inifile:\nplugins: xdist-1.20.1, forked-0.2, cloud-2.0.0\ncollected 1 item\n\ntest_2.py .

Я пытаюсь разобраться в том, как заставить python выполнить список тестов и запустить контейнер для каждого из них, а не ждать завершения других контейнеров.

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Если вы не хотите ждать каждого из них, вам придется либо запускать каждую команду 'docker run' с -d (и записывать вывод в файл), либо разветвлять каждый докер независимо от запуска вашего тестового сценария

0 голосов
/ 04 мая 2018

Для тех, кто заинтересован, я обновил свой скрипт для использования .Popen

for test in single_test_list:

    command = subprocess.Popen(['docker', 'run', '-e', 'USER=root', '-e', 'TEST=' + test, 'api_test_container'])
    print(command)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...