jezdez / django-discover-runner Goto Github PK
View Code? Open in Web Editor NEWA Django test runner based on unittest2's test discovery.
Home Page: http://pypi.python.org/pypi/django-discover-runner
License: Other
A Django test runner based on unittest2's test discovery.
Home Page: http://pypi.python.org/pypi/django-discover-runner
License: Other
Hello,
Where can I setup a model for tests only? (For testing abstract models)
In django 1.5 (without installing this app, obviously), I can define the model in tests.py
.
With django-nose models defined in test files are installed automatically as well.
Does the discover-runner support this in any way? Without explicitly calling syncdb from the tests?
Thank you!
Is it possible to configure django-discover-runner so that it stops running tests after it encounters a test failure or error?
Add signal to DiscoverRunner which allows other apps to get the number of failed tests.
Original discussion here: https://twitter.com/jezdez/status/322755071878234112
What I want to do is to write an app which would generate system notifications when tests fail/succeed. With my hacked-up version this is what I get:
For this I need to get the number of failed tests from discover runner.
HI,
I just got django-discover-runner from pypi. Sadly, there is no license file included, as distributed via github clone.
For several reasons it'd be great, if you also could include the license in the package (tarball) to be downloaded e.g. from pypi. Thanks.
Using ./manage.py test full.dotted.path.to.test_module
syntax it is possible to all tests in a module. However, it is not possible to run a specific test inside the test module. This issue proposes that ./manage.py test full.dotted.path.to.test_module.test_specific
syntax be supported, which runs the test test_specific
inside of test_module
only.
This is useful for picking a particular Selenium test to run for development.
Wheel uploaded to PyPI contains management command, that references non-existing TEST_DISCOVER_ROOT
, so running ./manage.py test
is not possible.
The source package does not have management command at all and everything works OK.
This is what I get when package is installed via wheel:
$ ./manage.py test
Traceback (most recent call last):
File "./manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/home/paczkowski/.virtualenvs/itemizer/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 453, in execute_from_command_line
utility.execute()
File "/home/paczkowski/.virtualenvs/itemizer/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 392, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/paczkowski/.virtualenvs/itemizer/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 272, in fetch_command
klass = load_command_class(app_name, subcommand)
File "/home/paczkowski/.virtualenvs/itemizer/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 77, in load_command_class
module = import_module('%s.management.commands.%s' % (app_name, name))
File "/home/paczkowski/.virtualenvs/itemizer/local/lib/python2.7/site-packages/django/utils/importlib.py", line 35, in import_module
__import__(name)
File "/home/paczkowski/.virtualenvs/itemizer/local/lib/python2.7/site-packages/discover_runner/management/commands/test.py", line 7, in <module>
class Command(TestCommand):
File "/home/paczkowski/.virtualenvs/itemizer/local/lib/python2.7/site-packages/discover_runner/management/commands/test.py", line 11, in Command
default=settings.TEST_DISCOVER_ROOT,
AttributeError: 'module' object has no attribute 'TEST_DISCOVER_ROOT'
I'm wondering if there's any way to use both django-discover-runner and unittest-xml-reporting?
Thanks
From PyCharm (JetBrains IDEA IDE), I'm used to re-runnin only failed tests as it speeds up the testing enormously. However, when using django-discover-runner, this functionality is broken. PyCharm provides the tests to be run in the same way as Django expects them. This app.tests.MyTestCase
is provided as app.MyTestCase
.
[python-path] /Applications/PyCharm.app/helpers/pycharm/django_test_manage.py test app.MyTest.test_method [project-path]
So could django-discover-runner also discover tests when provided as using the 'Django convention'?
It would be nice to have an exclude pattern as an alternative to the include pattern.
Hi,
I have a problem with django-discover-runner and custom model's abtrsact class.
Example:
from django.db import models
class ModelAbstract(models.base.ModelBase):
def __new__(cls, name, bases, attrs):
dateable = False
if 'Meta' in attrs:
if hasattr(attrs['Meta'], 'dateable'):
dateable = attrs['Meta'].dateable
delattr(attrs['Meta'], 'dateable')
super_new = super(ModelAbstract, cls).__new__(cls, name, bases, attrs)
if hasattr(super_new, '_meta') and not super_new._meta.abstract:
if hasattr(super_new._meta, 'dateable'):
dateable = super_new._meta.dateable
else:
super_new._meta.dateable = dateable
if dateable:
super_new.add_to_class('created_date',
models.DateTimeField('created at', auto_now_add=True))
return super_new
class BaseModel(models.Model):
__metaclass__ = ModelAbstract
class Meta:
abstract = True
class MyModel(BaseModel):
name = models.CharField(max_length=100)
class Meta:
dateable = True
from django.test import TestCase
from .models import MyModel
class SetUpProjectTestCase(TestCase):
def setUp(self):
self.obj = MyModel()
self.obj.name = '...'
self.obj.save()
def tearDown(self):
self.obj.delete()
INSTALLED_APPS = (
'discover_runner',
'myapp',
)
TEST_RUNNER = 'discover_runner.DiscoverRunner'
python manage.py test --settings=mysettings
Creating test database for alias 'default'...
DatabaseError: duplicate column name: created_date
:(
python manage.py test myapp --settings=mysettings
OK
python manage.py test --settings=mysettings
OK
python manage.py test myapp --settings=mysettings
OK
What is wrong with django-discover-runner and test for whole project?
(First-up, many thanks for this excellent tool).
Here's my basic setup (all tests in one directory with sub directories for each apps tests:
- manage.py
- project/
-- appA/
--- stuff.py
-- tests/
--- appA/
---- test_for_stuff.py
I was writing a new test file, and I had an import error (I'd written from appA import X
, instead of from appA.models import X
)
When I ran the test by running:
./manage.py test project.appA.tests.test_for_stuff
I got the following error:
File "/home/bird/Dev/aptivate/econsensus/django/econsensus/.ve/local/lib/python2.7/site-packages/django/test/simple.py", line 380, in run_tests
suite = self.build_suite(test_labels, extra_tests)
File "/home/bird/Dev/aptivate/econsensus/django/econsensus/.ve/local/lib/python2.7/site-packages/discover_runner/runner.py", line 40, in build_suite
suite = self.test_loader.loadTestsFromNames(test_labels)
File "/usr/lib/python2.7/unittest/loader.py", line 128, in loadTestsFromNames
suites = [self.loadTestsFromName(name, module) for name in names]
File "/usr/lib/python2.7/unittest/loader.py", line 100, in loadTestsFromName
parent, obj = obj, getattr(obj, part)
AttributeError: 'module' object has no attribute 'test_for_stuff'
I was a little confused by this because I thoguht it was trying to tell me my test_for_stuff file wasn't there.
I would have expected an ImportError.
I have 10+ apps that I want to test and I'm trying to get it to work with django-discover-runner.
If I run one, it looks fine:
± % ./manage.py test content --configuration=Test
Creating test database for alias 'default'...
/home/django/.virtualenvs/astrobiology-alpha/local/lib/python2.7/site-packages/django/utils/hashcompat.py:9: DeprecationWarning: django.utils.hashcompat is deprecated; use hashlib instead
DeprecationWarning)
.../home/django/.virtualenvs/astrobiology-alpha/local/lib/python2.7/site-packages/django/utils/text.py:221: DeprecationWarning: This function has been deprecated. Use the Truncator class in django.utils.text instead.
'in django.utils.text instead.', category=DeprecationWarning)
............
----------------------------------------------------------------------
Ran 15 tests in 2.784s
OK
Destroying test database for alias 'default'...
Tests are in file 'test_models.py' in content/tests/
If I run another one, it also looks fine:
± % ./manage.py test groups --configuration=Test
/home/django/.virtualenvs/astrobiology-alpha/local/lib/python2.7/site-packages/django/utils/hashcompat.py:9: DeprecationWarning: django.utils.hashcompat is deprecated; use hashlib instead
DeprecationWarning)
Creating test database for alias 'default'...
..........E.....
======================================================================
ERROR: test_team_members (tests.test_models.TeamTest)
----------------------------------------------------------------------
Traceback (most recent call last):
.
.
.
IntegrityError: duplicate key value violates unique constraint "reports_naiprojectreport_pkey"
----------------------------------------------------------------------
Ran 16 tests in 0.442s
FAILED (errors=1)
Destroying test database for alias 'default'...
Ok, failed test, but it still found and ran them.
Test file test_models.py in groups/tests/
Let's try running both:
± % ./manage.py test content groups --configuration=Test --traceback
Creating test database for alias 'default'...
/home/django/.virtualenvs/astrobiology-alpha/local/lib/python2.7/site-packages/django/utils/hashcompat.py:9: DeprecationWarning: django.utils.hashcompat is deprecated; use hashlib instead
DeprecationWarning)
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
Destroying test database for alias 'default'...
Am I doing something wrong? The above should be valid, right?
Here is my Test configuration:
class Test(Base):
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'NAME': 'astrobiology_' + BUILD,
'USER': 'astrobiology',
'PASSWORD': 'xxxxxxxxxx',
},
}
@property
def INSTALLED_APPS(self):
return (
#'django_coverage',
'django_nose',
'discover_runner',
'django_jenkins',
) + super(Test, self).INSTALLED_APPS
JENKINS_TASKS = (
'django_jenkins.tasks.with_coverage',
'django_jenkins.tasks.django_tests', # select one django or
'django_jenkins.tasks.dir_tests', # directory tests discovery
'django_jenkins.tasks.run_pep8',
#'django_jenkins.tasks.run_flake8',
'django_jenkins.tasks.run_pyflakes',
'django_jenkins.tasks.run_graphmodels',
'django_jenkins.tasks.run_pylint',
'django_jenkins.tasks.run_csslint',
'django_jenkins.tasks.run_sloccount',
'django_jenkins.tasks.run_jshint',
'django_jenkins.tasks.lettuce_tests',
)
TEST_RUNNER = 'discover_runner.DiscoverRunner'
#TEST_DISCOVER_TOP_LEVEL = TEST_DISCOVER_ROOT = PROJECT_ROOT
#JENKINS_TEST_RUNNER = 'django_jenkins.nose_runner.CINoseTestSuiteRunner'
DATABASE_ROUTERS = []
Is there anything I'm doing wrong?
Thanks!
Hi,
It looks like this test runner doesn't validate models before starting the tests.
I have one test that passes with Django's default test runner while it fails with django-discover-runner.
The exception is:
ValueError: Cannot create form field for 'vat' yet, because its related model 'vat.VAT' has not been loaded yet
I will try to make a test project since this one isn't open sourced.
I'm using Django 1.5 on Python 2.7.
$ cat config/settings.py | grep TEST_
TEST_RUNNER = 'discover_runner.DiscoverRunner'
TEST_DISCOVER_TOP_LEVEL = PROJECT_ROOT
TEST_DISCOVER_ROOT = PROJECT_ROOT
TEST_DISCOVER_PATTERN = 'test*.py'
$ ./manage.py test
Traceback (most recent call last):
File "./manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/home/danilo/.virtualenvs/pcf/lib/python2.7/site-packages/django/core/management/__init__.py", line 453, in execute_from_command_line
utility.execute()
File "/home/danilo/.virtualenvs/pcf/lib/python2.7/site-packages/django/core/management/__init__.py", line 392, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/danilo/.virtualenvs/pcf/lib/python2.7/site-packages/django/core/management/commands/test.py", line 49, in run_from_argv
super(Command, self).run_from_argv(argv)
File "/home/danilo/.virtualenvs/pcf/lib/python2.7/site-packages/django/core/management/base.py", line 218, in run_from_argv
parser = self.create_parser(argv[0], argv[1])
File "/home/danilo/.virtualenvs/pcf/lib/python2.7/site-packages/django/core/management/commands/test.py", line 52, in create_parser
test_runner_class = get_runner(settings, self.test_runner)
File "/home/danilo/.virtualenvs/pcf/lib/python2.7/site-packages/django/test/utils.py", line 129, in get_runner
test_module = __import__(test_module_name, {}, {}, test_path[-1])
TypeError: Item in ``from list'' not a string
Using the normal Django test runner, everything works. Is this error related to django-discover-runner?
Is it possible to specify individual test methods on the command line? If I try it like this:
python manage.py test myapp.tests.MyTestClass.test_my_method
Then I get an error like this:
TypeError: unbound method test_my_method() must be called with MyTestClass instance as first argument (got nothing instead)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.