问题
I am successfully put ssh-key
to docker runner and it can git clone
to do dependencies installation.
If I use ordinary build-in python manage.py test
it works fine.
But I am now working with pytest
. I can run pytest
on ly command line and got results normal.
$ pytest
===================================================================================== test session starts =====================================================================================
platform darwin -- Python 3.6.4, pytest-3.2.5, py-1.5.2, pluggy-0.4.0
Django settings: poinkbackend.config.settings.local (from ini file)
rootdir: /Users/sarit/Code/poink, inifile: pytest.ini
plugins: django-3.1.2
collected 66 items
poinkbackend/apps/activities/tests.py ..
poinkbackend/apps/amendments/tests.py ........
poinkbackend/apps/branches/tests.py ....
poinkbackend/apps/company_perms/tests.py ......
poinkbackend/apps/news/tests.py ......
poinkbackend/apps/orders/tests.py .....
poinkbackend/apps/poinks/tests.py .
poinkbackend/apps/redemptions/tests.py ..s....
poinkbackend/apps/rewards/tests.py ..
poinkbackend/apps/roles/tests.py ........
poinkbackend/apps/userprofiles/tests.py ............ss...
But when I execute in the gitlab-ci
. I use docker
as a runner
.
Update 1:
I confirm. I have pytest.ini
in the top directory.
pytest.ini
:
[pytest]
DJANGO_SETTINGS_MODULE = poinkbackend.config.settings.local
python_files = tests.py test_*.py *_tests.py
Successfully built django-dirtyfields django-reversion django-s3-folder-storage olefile simplegeneric
Installing collected packages: django-geoposition, pytz, django, py-moneyed, django-money, appnope, jmespath, six, python-dateutil, docutils, botocore, s3transfer, boto3, certifi, chardet, django-storages, collectfast, decorator, django-choices, django-cors-headers, django-countries, sqlparse, django-debug-toolbar, django-dirtyfields, django-environ, typing, django-extensions, django-filter, django-guardian, django-reversion, django-s3-folder-storage, pyjwt, djangorestframework-jwt, djangorestframework, freezegun, greenlet, gevent, gunicorn, idna, ipython-genutils, pygments, simplegeneric, pickleshare, ptyprocess, pexpect, traitlets, wcwidth, prompt-toolkit, parso, jedi, ipython, model-mommy, olefile, pillow, psycopg2, py, pytest, pytest-django, urllib3, requests, rest-framework-generic-relations, werkzeug
Running setup.py develop for django-geoposition
Running setup.py develop for django-money
Successfully installed appnope-0.1.0 boto3-1.4.7 botocore-1.7.47 certifi-2017.11.5 chardet-3.0.4 collectfast-0.5.2 decorator-4.1.2 django-1.11.7 django-choices-1.6.0 django-cors-headers-2.1.0 django-countries-5.0 django-debug-toolbar-1.9.1 django-dirtyfields-1.3 django-environ-0.4.4 django-extensions-1.9.7 django-filter-1.1.0 django-geoposition django-guardian-1.4.9 django-money django-reversion-2.0.10 django-s3-folder-storage-0.5 django-storages-1.6.5 djangorestframework-3.7.3 djangorestframework-jwt-1.11.0 docutils-0.14 freezegun-0.3.9 gevent-1.2.2 greenlet-0.4.12 gunicorn-19.7.1 idna-2.6 ipython-6.2.1 ipython-genutils-0.2.0 jedi-0.11.0 jmespath-0.9.3 model-mommy-1.4.0 olefile-0.44 parso-0.1.0 pexpect-4.3.0 pickleshare-0.7.4 pillow-4.3.0 prompt-toolkit-1.0.15 psycopg2-2.7.3.2 ptyprocess-0.5.2 py-1.5.2 py-moneyed-0.7.0 pygments-2.2.0 pyjwt-1.5.3 pytest-3.2.5 pytest-django-3.1.2 python-dateutil-2.6.1 pytz-2017.3 requests-2.18.4 rest-framework-generic-relations-1.1.0 s3transfer-0.1.11 simplegeneric-0.8.1 six-1.11.0 sqlparse-0.2.4 traitlets-4.3.2 typing-3.6.2 urllib3-1.22 wcwidth-0.1.7 werkzeug-0.12.2
$ pwd
/builds/sarit/poink
$ ls
DockerFileBackend
README.md
delete_migrations.sh
docker-compose.yml
f2
frontend
manage.py
poinkbackend
pytest.ini
renew_db.sh
requirements.in
requirements.txt
src
static
static_files
test_gitlab.sh
$ pytest
============================= test session starts ==============================
platform linux -- Python 3.6.4, pytest-3.2.5, py-1.5.2, pluggy-0.4.0
Django settings: poinkbackend.config.settings.local (from ini file)
rootdir: /builds/sarit/poink, inifile: pytest.ini
plugins: django-3.1.2
collected 0 items / 1 errors
==================================== ERRORS ====================================
______________________________ ERROR collecting _______________________________
/usr/local/lib/python3.6/site-packages/_pytest/config.py:342: in _getconftestmodules
return self._path2confmods[path]
E KeyError: local('/builds/sarit/poink/src/django-money/tests')
During handling of the above exception, another exception occurred:
/usr/local/lib/python3.6/site-packages/_pytest/config.py:373: in _importconftest
return self._conftestpath2mod[conftestpath]
E KeyError: local('/builds/sarit/poink/src/django-money/tests/conftest.py')
During handling of the above exception, another exception occurred:
/usr/local/lib/python3.6/site-packages/_pytest/config.py:379: in _importconftest
mod = conftestpath.pyimport()
/usr/local/lib/python3.6/site-packages/py/_path/local.py:668: in pyimport
__import__(modname)
<frozen importlib._bootstrap>:971: in _find_and_load
???
<frozen importlib._bootstrap>:955: in _find_and_load_unlocked
???
<frozen importlib._bootstrap>:656: in _load_unlocked
???
<frozen importlib._bootstrap>:626: in _load_backward_compatible
???
/usr/local/lib/python3.6/site-packages/_pytest/assertion/rewrite.py:212: in load_module
py.builtin.exec_(co, mod.__dict__)
src/django-money/tests/conftest.py:9: in <module>
from tests.testapp.models import InheritorModel, ModelWithDefaultAsInt
src/django-money/tests/testapp/models.py:21: in <module>
class ModelWithVanillaMoneyField(models.Model):
/usr/local/lib/python3.6/site-packages/django/db/models/base.py:118: in __new__
"INSTALLED_APPS." % (module, name)
E RuntimeError: Model class tests.testapp.models.ModelWithVanillaMoneyField doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
During handling of the above exception, another exception occurred:
/usr/local/lib/python3.6/site-packages/py/_path/common.py:377: in visit
for x in Visitor(fil, rec, ignore, bf, sort).gen(self):
/usr/local/lib/python3.6/site-packages/py/_path/common.py:429: in gen
for p in self.gen(subdir):
/usr/local/lib/python3.6/site-packages/py/_path/common.py:429: in gen
for p in self.gen(subdir):
/usr/local/lib/python3.6/site-packages/py/_path/common.py:418: in gen
dirs = self.optsort([p for p in entries
/usr/local/lib/python3.6/site-packages/py/_path/common.py:419: in <listcomp>
if p.check(dir=1) and (rec is None or rec(p))])
/usr/local/lib/python3.6/site-packages/_pytest/main.py:737: in _recurse
ihook = self.gethookproxy(path)
/usr/local/lib/python3.6/site-packages/_pytest/main.py:641: in gethookproxy
my_conftestmodules = pm._getconftestmodules(fspath)
/usr/local/lib/python3.6/site-packages/_pytest/config.py:356: in _getconftestmodules
mod = self._importconftest(conftestpath)
/usr/local/lib/python3.6/site-packages/_pytest/config.py:381: in _importconftest
raise ConftestImportFailure(conftestpath, sys.exc_info())
E _pytest.config.ConftestImportFailure: RuntimeError("Model class tests.testapp.models.ModelWithVanillaMoneyField doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.",)
E File "<frozen importlib._bootstrap>", line 971, in _find_and_load
E File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
E File "<frozen importlib._bootstrap>", line 656, in _load_unlocked
E File "<frozen importlib._bootstrap>", line 626, in _load_backward_compatible
E File "/usr/local/lib/python3.6/site-packages/_pytest/assertion/rewrite.py", line 212, in load_module
E py.builtin.exec_(co, mod.__dict__)
E File "/builds/sarit/poink/src/django-money/tests/conftest.py", line 9, in <module>
E from tests.testapp.models import InheritorModel, ModelWithDefaultAsInt
E File "/builds/sarit/poink/src/django-money/tests/testapp/models.py", line 21, in <module>
E class ModelWithVanillaMoneyField(models.Model):
E File "/usr/local/lib/python3.6/site-packages/django/db/models/base.py", line 118, in __new__
E "INSTALLED_APPS." % (module, name)
!!!!!!!!!!!!!!!!!!! Interrupted: 1 errors during collection !!!!!!!!!!!!!!!!!!!!
=========================== 1 error in 0.57 seconds ============================
ERROR: Job failed: exit code 1
.gitlab-ci.yml
image: python:3.6
services:
- postgres:latest
variables:
POSTGRES_DB: poinkdb
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
before_script:
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- ssh-keyscan github.com >> ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
- git config --global user.email "sarit@elcolie.com"
- git config --global user.name "sarit"
- python -V
- pip install -r requirements.txt
test:
tags:
- poink
- Elcolie
variables:
DATABASE_URL : "postgres://postgres:postgres@postgres:5432/poinkdb"
script:
- pytest
Questions:
Update2:
Update3:
- How to use
gitlab-ci
runpytest
by usingdocker runner
?
回答1:
Thanks to https://github.com/nicoddemus
His quote on my question on last line show me the /src
which is not my directory. It was created on the way.
My pitfall is runner
create python dependencies in /src
not in the other hidden directories
[pytest]
DJANGO_SETTINGS_MODULE = poinkbackend.config.settings.local
python_files = tests.py test_*.py *_tests.py
norecursedirs = src
来源:https://stackoverflow.com/questions/47966456/docker-runner-pytest-does-not-collect-testcases