Coveralls: Ошибка - в моем приложении нет источника, использующего контейнер Docker - PullRequest
0 голосов
/ 08 июля 2019

Я пытался интегрировать покрытие кода в мое приложение Django .. Сборка прошла успешно, и все тесты выполнены успешно, но когда я проверяю coveralls.io или codecov.io, данных нет .. Я искал все, добавил .coveragerc, но все равно ничего не помогает.

Dockerfile

FROM python:3.7-alpine
MAINTAINER abhie-lp

ENV PYTHONUNBUFFERED 1
COPY ./requirements.txt /requirements.txt

RUN apk add --update --no-cache jpeg-dev
RUN apk add --update --no-cache --virtual .tmp-build-deps \
        gcc libc-dev musl-dev zlib zlib-dev
RUN pip install -r /requirements.txt
RUN apk del .tmp-build-deps

RUN mkdir /app
WORKDIR /app
COPY ./app /app

RUN mkdir -p /vol/web/media
RUN mkdir -p /vol/web/static
RUN adduser -D ABHIE
RUN chown -R ABHIE:ABHIE /vol/
RUN chmod -R 755 /vol/web
USER ABHIE

docker-compose.yml

version: "3"

services:
  app:
    build:
      context: .
    ports:
      - "8000:8000"
    volumes:
      - ./app:/app
    command: >
      sh -c "python manage.py wait_for_db && 
             python manage.py migrate && 
             python manage.py runserver 0.0.0.0:8000"

.travis.yml

language: python
python:
  - "3.6"

services:
  - docker

before_script:
  - pip install docker-compose
  - pip install coveralls
  - pip install codecov
  - docker-compose run --user='root' app chmod -R 777 .

script:
  - docker-compose run app sh -c "coverage run --source=. manage.py test"
  - docker-compose run app sh -c "flake8"

after_success:
  - coveralls
  - codecov

.coveragerc

[run]
source = /home/travis/build/abhie-lp/recipe-app-api/app
parallel = True
data_file = /home/travis/build/abhie-lp/recipe-app-api/app/.coverage

[paths]
source = 
  /home/travis/build/abhie-lp/recipe-app-api
  /app/

1 Ответ

0 голосов
/ 08 июля 2019

Существуют три основные проблемы в настройке теста, которые вы показываете:

  1. Объявление volumes: в файле docker-compose.yml скрывает содержимое дерева /app в вашем изображении.Это означает, что ваша тестовая установка не тестирует созданный образ.

  2. Ваши команды pip install устанавливают дополнительные пакеты в среде Python хоста, но они не будут видны внутриКонтейнер Docker.

  3. Каждая команда docker-compose run запускает новый контейнер с новой эфемерной файловой системой, поэтому после docker-compose run coverage файловая система временного контейнера, в которой был отчет о покрытии, теряется.

Надеемся, что для базовых показателей покрытия тестами ваши настройки модульных тестов не особенно чувствительны к запуску в Docker, развертыванию по другому пути или с другой рабочей станции разработчика.Установкой, которую я успешно использовал, является запуск модульных тестов и таких вещей, как покрытие кода вне Docker, и только создание и публикация образа Docker в качестве последнего шага.Хотя стоит провести некоторые интеграционные тесты для встроенного образа, вы должны иметь возможность управлять ими из-за пределов Docker, не требуя каких-либо изменений в самом образе.

Если для вас важно запускать эти тесты изнутриDocker, вам нужно либо добавить эти инструменты только для разработки в ваш рабочий образ, либо сделать все (установить дополнительные инструменты, запустить тесты и извлечь результаты) с помощью одной команды docker-compose run.Однострочник может выглядеть как

docker-compose run \
  -v $PWD:/coverage \
  sh -c 'pip install coverage && COVERAGE_FILE=/coverage/.coverage coverage run --source=. manage.py test'

Вы также можете разбить это на скрипт, который либо COPYed, либо привязывается к вашему контейнеру

docker-compose run -v $PWD:/coverage /coverage/cov-pytest

, который может быть более удобен в обслуживании.и немного проще вручную проверить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...