Запуск отдельных тестовых функций с помощью docker compose - PullRequest
0 голосов
/ 08 декабря 2018

У меня запущено и работает мое флеш-веб-приложение в Docker, и я пытаюсь выполнить некоторые юнит-тесты, и у меня возникают проблемы с их выполнением.Пока мои контейнеры работают, я запускаю следующее:

docker-compose run app python3 manage.py test

, чтобы попытаться выполнить мою функцию test в manage.py:

import unittest
from flask.cli import FlaskGroup
from myapp import app, db


cli = FlaskGroup(app)

@cli.command()
def recreate_db():
    db.drop_all()
    db.create_all()
    db.session.commit()

@cli.command()
def test():
    """ Runs the tests without code coverage"""
    tests = unittest.TestLoader().discover('myapp/tests', pattern='test*.py')
    result = unittest.TextTestRunner(verbosity=2).run(tests)
    if result.wasSuccessful():
        return 0
    return 1

if __name__ == '__main__':
    cli()

Но так как у меня естьstart.sh в моем Dockerfile он просто выполняет мой Gunicorn start.sh, но он не запускает мой тест.Я просто вижу следующее в консоли, но никаких следов моей функции test().

[2018-12-08 01:21:08 +0000] [1] [INFO] Starting gunicorn 19.9.0
[2018-12-08 01:21:08 +0000] [1] [DEBUG] Arbiter booted
[2018-12-08 01:21:08 +0000] [1] [INFO] Listening at: http://0.0.0.0:5000 (1)
[2018-12-08 01:21:08 +0000] [1] [INFO] Using worker: sync
[2018-12-08 01:21:08 +0000] [9] [INFO] Booting worker with pid: 9
[2018-12-08 01:21:08 +0000] [11] [INFO] Booting worker with pid: 11
[2018-12-08 01:21:08 +0000] [13] [INFO] Booting worker with pid: 13
[2018-12-08 01:21:08 +0000] [1] [DEBUG] 3 workers

start.sh:

#!/bin/sh

# Wait until MySQL is ready
while ! mysqladmin ping -h"db" -P"3306" --silent; do
    echo "Waiting for MySQL to be up..."
    sleep 1
done

source venv/bin/activate
# Start Gunicorn processes
echo Starting Gunicorn.

exec gunicorn -b 0.0.0.0:5000 wsgi --reload --chdir usb_app --timeout 9999 --workers 3 --access-logfile - --error-logfile - --capture-output --log-level debug

Кто-нибудь знает, почему или как я могу выполнитьфункция тестирования в существующем контейнере без необходимости повторного запуска рабочих Gunicorn?

1 Ответ

0 голосов
/ 08 декабря 2018

Полагаю, start.sh - ваша точка входа.Если нет, вы можете сделать это в качестве точки входа вместо того, чтобы указывать CMD.

Мы можем переопределить скрипт точки входа, используя аргумент --entrypoint, я делаю это, как показано ниже -

docker-compose run --rm --entrypoint "python3 manage.py test" app
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...