Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get pytest-django to only run tests for a single app

Tags:

django

pytest

I was hoping that, by default, pytest-django would run the same tests that ./manage.py test does. Instead it runs all the Django tests and basically every python file it finds.

Here's my pytest.ini:

[pytest]
python_files=*.py
norecursedirs = .*, CVS, _darcs, {arch}, *.egg, django, south

I'd love to be able to do something like `py.test main.tests.TestAccess' to run a single test case. Any thoughts on how to accomplish this?

I attempted -k but, even with that option, I see many other files being run that I'm not interested in testing. Here's some output:

(vgmdash33-env)The-Judge:vgmdash joshuafialkoff$ py.test -k nothing_by_this_name
==================================== test session starts ====================================
platform darwin -- Python 3.3.5 -- py-1.4.26 -- pytest-2.6.4
plugins: bdd, django
collected 18 items / 19 errors 

========================================== ERRORS ===========================================
_____________________________ ERROR collecting temp_scripts.py ______________________________
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/_pytest/python.py:463: in _importtestmodule
    mod = self.fspath.pyimport(ensuresyspath=True)
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/py/_path/local.py:641: in pyimport
    __import__(modname)
E     File "/Users/joshuafialkoff/Documents/setaris/vgmdash/temp_scripts.py", line 10
E       wget --http-user='xxx.com\xxx' --http-password=xxxxxx http://xxx.xxx.com
E                                                                        ^
E   SyntaxError: invalid syntax
___________________________ ERROR collecting fabfile/__init__.py ____________________________
fabfile/__init__.py:1: in <module>
    from django_fabric_aws import *
E   ImportError: No module named 'django_fabric_aws'
_______________________ ERROR collecting fabfile/django_fabric_aws.py _______________________
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/py/_path/local.py:629: in pyimport
    __import__(pkgpath.basename)
fabfile/__init__.py:1: in <module>
    from django_fabric_aws import *
E   ImportError: No module named 'django_fabric_aws'
_________________________ ERROR collecting fabfile/project_conf.py __________________________
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/py/_path/local.py:629: in pyimport
    __import__(pkgpath.basename)
fabfile/__init__.py:1: in <module>
    from django_fabric_aws import *
E   ImportError: No module named 'django_fabric_aws'
_____________________________ ERROR collecting fabfile/tasks.py _____________________________
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/py/_path/local.py:629: in pyimport
    __import__(pkgpath.basename)
fabfile/__init__.py:1: in <module>
    from django_fabric_aws import *
E   ImportError: No module named 'django_fabric_aws'
____________________ ERROR collecting fabfile/templates/gunicorn.conf.py ____________________
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/py/_path/local.py:641: in pyimport
    __import__(modname)
E   ImportError: No module named 'gunicorn.conf'
_____________________________ ERROR collecting vgmdash/urls.py ______________________________
vgmdash/urls.py:5: in <module>
    from django.contrib import admin
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/django/contrib/admin/__init__.py:4: in <module>
    from django.contrib.admin.helpers import ACTION_CHECKBOX_NAME
<frozen importlib._bootstrap>:1565: in _find_and_load
    ???
<frozen importlib._bootstrap>:1532: in _find_and_load_unlocked
    ???
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/_pytest/assertion/rewrite.py:159: in load_module
    py.builtin.exec_(co, mod.__dict__)
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/django/contrib/admin/helpers.py:4: in <module>
    from django.contrib.admin.utils import (flatten_fieldsets, lookup_field,
<frozen importlib._bootstrap>:1565: in _find_and_load
    ???
<frozen importlib._bootstrap>:1532: in _find_and_load_unlocked
    ???
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/_pytest/assertion/rewrite.py:159: in load_module
    py.builtin.exec_(co, mod.__dict__)
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/django/contrib/admin/utils.py:6: in <module>
    from django.contrib.auth import get_permission_codename
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/django/contrib/auth/__init__.py:9: in <module>
    from django.middleware.csrf import rotate_token
<frozen importlib._bootstrap>:1565: in _find_and_load
    ???
<frozen importlib._bootstrap>:1532: in _find_and_load_unlocked
    ???
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/_pytest/assertion/rewrite.py:159: in load_module
    py.builtin.exec_(co, mod.__dict__)
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/django/middleware/csrf.py:14: in <module>
    from django.utils.cache import patch_vary_headers
<frozen importlib._bootstrap>:1565: in _find_and_load
    ???
<frozen importlib._bootstrap>:1532: in _find_and_load_unlocked
    ???
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/_pytest/assertion/rewrite.py:159: in load_module
    py.builtin.exec_(co, mod.__dict__)
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/django/utils/cache.py:26: in <module>
    from django.core.cache import caches
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/django/core/cache/__init__.py:34: in <module>
    if DEFAULT_CACHE_ALIAS not in settings.CACHES:
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/django/conf/__init__.py:46: in __getattr__
    self._setup(name)
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/django/conf/__init__.py:40: in _setup
    % (desc, ENVIRONMENT_VARIABLE))
E   django.core.exceptions.ImproperlyConfigured: Requested setting CACHES, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
___________________ ERROR collecting vgmdash/apps/activity/formatters.py ____________________
vgmdash/apps/activity/formatters.py:25: in <module>
    formatter.register(...)
E   TypeError: register() missing 2 required positional arguments: 'field_name' and 'format_func'
_____________________ ERROR collecting vgmdash/apps/activity/models.py ______________________
vgmdash/apps/activity/models.py:22: in <module>
    class Log(model_url_mixin_factory(), models.Model):
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/django/db/models/base.py:286: in __new__
    new_class._meta.apps.register_model(new_class._meta.app_label, new_class)
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/django/apps/registry.py:213: in register_model
    (model_name, app_label, app_models[model_name], model))
E   RuntimeError: Conflicting 'log' models in application 'activity': <class 'activity.models.Log'> and <class 'vgmdash.apps.activity.models.Log'>.
_____________________ ERROR collecting vgmdash/apps/authstats/models.py _____________________
vgmdash/apps/authstats/models.py:13: in <module>
    class UserStats(models.Model):
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/django/db/models/base.py:286: in __new__
    new_class._meta.apps.register_model(new_class._meta.app_label, new_class)
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/django/apps/registry.py:213: in register_model
    (model_name, app_label, app_models[model_name], model))
E   RuntimeError: Conflicting 'userstats' models in application 'authstats': <class 'authstats.models.UserStats'> and <class 'vgmdash.apps.authstats.models.UserStats'>.
_____________________ ERROR collecting vgmdash/apps/fileshare/models.py _____________________
vgmdash/apps/fileshare/models.py:14: in <module>
    class FileShare(models.Model):
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/django/db/models/base.py:286: in __new__
    new_class._meta.apps.register_model(new_class._meta.app_label, new_class)
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/django/apps/registry.py:213: in register_model
    (model_name, app_label, app_models[model_name], model))
E   RuntimeError: Conflicting 'fileshare' models in application 'fileshare': <class 'fileshare.models.FileShare'> and <class 'vgmdash.apps.fileshare.models.FileShare'>.
________________________ ERROR collecting vgmdash/apps/main/admin.py ________________________
vgmdash/apps/main/admin.py:4: in <module>
    admin.site.register(Transaction)
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/django/contrib/admin/sites.py:84: in register
    raise AlreadyRegistered('The model %s is already registered' % model.__name__)
E   django.contrib.admin.sites.AlreadyRegistered: The model Transaction is already registered
_______________________ ERROR collecting vgmdash/apps/main/loggers.py _______________________
vgmdash/apps/main/loggers.py:12: in <module>
    class ClientDetail(LogDetail):
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/django/db/models/base.py:286: in __new__
    new_class._meta.apps.register_model(new_class._meta.app_label, new_class)
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/django/apps/registry.py:213: in register_model
    (model_name, app_label, app_models[model_name], model))
E   RuntimeError: Conflicting 'clientdetail' models in application 'main': <class 'main.loggers.ClientDetail'> and <class 'vgmdash.apps.main.loggers.ClientDetail'>.
_______________________ ERROR collecting vgmdash/apps/main/models.py ________________________
vgmdash/apps/main/models.py:44: in <module>
    class Manufacturer(model_url_mixin_factory(), models.Model):
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/django/db/models/base.py:286: in __new__
    new_class._meta.apps.register_model(new_class._meta.app_label, new_class)
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/django/apps/registry.py:213: in register_model
    (model_name, app_label, app_models[model_name], model))
E   RuntimeError: Conflicting 'manufacturer' models in application 'main': <class 'main.models.Manufacturer'> and <class 'vgmdash.apps.main.models.Manufacturer'>.
_________________ ERROR collecting vgmdash/apps/main/features/steps/auth.py _________________
vgmdash/apps/main/features/steps/auth.py:7: in <module>
    use_step_matcher(re)
E   NameError: name 're' is not defined
________________ ERROR collecting vgmdash/apps/main/features/steps/browse.py ________________
vgmdash/apps/main/features/steps/browse.py:1: in <module>
    @when('I run a (?P<import_type>.*) import using "(?P<fn>.*)"')
E   NameError: name 'when' is not defined
_______________ ERROR collecting vgmdash/apps/main/features/steps/objects.py ________________
vgmdash/apps/main/features/steps/objects.py:9: in <module>
    use_step_matcher(re)
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/behave/matchers.py:209: in use_step_matcher
    current_matcher = matcher_mapping[name]
E   KeyError: <module 're' from '/Users/joshuafialkoff/Envs/vgmdash33-env/lib/python3.3/re.py'>
______________________ ERROR collecting vgmdash/apps/myauth/models.py _______________________
vgmdash/apps/myauth/models.py:16: in <module>
    class User(model_url_mixin_factory(token_field='username'), UserBase):
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/django/db/models/base.py:253: in __new__
    new_class.add_to_class(field.name, copy.deepcopy(field))
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/django/db/models/base.py:300: in add_to_class
    value.contribute_to_class(cls, name)
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/django/db/models/fields/related.py:2241: in contribute_to_class
    self.rel.through = create_many_to_many_intermediary_model(self, cls)
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/django/db/models/fields/related.py:1847: in create_many_to_many_intermediary_model
    to: models.ForeignKey(to_model, related_name='%s+' % name, db_tablespace=field.db_tablespace, db_constraint=field.rel.db_constraint)
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/django/db/models/base.py:286: in __new__
    new_class._meta.apps.register_model(new_class._meta.app_label, new_class)
../../../Envs/vgmdash33-env/lib/python3.3/site-packages/django/apps/registry.py:213: in register_model
    (model_name, app_label, app_models[model_name], model))
E   RuntimeError: Conflicting 'user_groups' models in application 'myauth': <class 'myauth.models.User_groups'> and <class 'vgmdash.apps.myauth.models.User_groups'>.
______________ ERROR collecting vgmdash/apps/myauth/migrations/0001_initial.py ______________
vgmdash/apps/myauth/migrations/0001_initial.py:2: in <module>
    from south.utils import datetime_utils as datetime
E   ImportError: No module named 'south'
====================== 18 tests deselected by '-knothing_by_this_name' ======================
=================== 18 deselected, 2 warnings, 19 error in 10.19 seconds ====================
like image 958
Josh Avatar asked Dec 19 '14 20:12

Josh


2 Answers

I see more options

1) use the path

 py.test <path_to_my_app>

py.test will search for test only in that subdir

or

 py.test <path_to_file>::<test>

will execute only

2) decorate each test with a specific marker

@pytest.mark.app1
def test_bla_bla():
    ....

and run with

    py.test -m app1

3) use -k passing the test funnction name

like image 94
sax Avatar answered Sep 25 '22 00:09

sax


You can run a single test using the option -k.

like image 43
Dominic Rodger Avatar answered Sep 24 '22 00:09

Dominic Rodger