Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Running tests with coverage using django-jenkins

I've got a couple of Django projects that I work on, and I use Jenkins for continuous integration purposes. I've had that arrangement up and running for a while and it works well.

I'd like to be able to generate automated test coverage reports and have Jenkins handle them as well. It looked to me like django-jenkins was the way to go for that, so I installed it and coverage.

Here's the relevant sections of my settings.py:

# Jenkins integration
INSTALLED_APPS += ('django_jenkins',)
JENKINS_TASKS = ( 
    'django_jenkins.tasks.with_coverage',
    'django_jenkins.tasks.run_pylint',
    'django_jenkins.tasks.django_tests',
)
PROJECT_APPS = ['myapp']

Now, I can run python manage.py jtest, and it works as expected. However, if I run python manage.py jenkins, it errors:

Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/home/matthew/Projects/blah/venv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 399, in execute_from_command_line
    utility.execute()
  File "/home/matthew/Projects/blah/venv/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/matthew/Projects/blah/venv/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/matthew/Projects/blah/venv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 76, in load_command_class
    return module.Command()
  File "/home/matthew/Projects/blah/venv/local/lib/python2.7/site-packages/django_jenkins/management/commands/__init__.py", line 61, in __init__
    for module_name in self.get_task_list()]
  File "/home/matthew/Projects/blah/venv/local/lib/python2.7/site-packages/django/utils/importlib.py", line 40, in import_module
    __import__(name)
ImportError: No module named django_tests

I'm using the standard Django TestCase and LiveServerTestCase classes as the basis of my tests. Any idea where I'm going wrong here? The documentation seems to imply django_tests has been removed, but I can't find any indication as to how you run the Django tests now.

I'm using Django 1.6.2.

like image 282
Matthew Daly Avatar asked Feb 26 '14 14:02

Matthew Daly


2 Answers

Just realised I've been a bit of a numpty. All I needed to do was drop the django_tests line, like this:

# Jenkins integration
INSTALLED_APPS += ('django_jenkins',)
JENKINS_TASKS = ( 
    'django_jenkins.tasks.with_coverage',
    'django_jenkins.tasks.run_pylint',
)
PROJECT_APPS = ['myapp']

And django-jenkins will run the tests without having to explicitly request that it does so.

like image 131
Matthew Daly Avatar answered Nov 18 '22 08:11

Matthew Daly


There is a change in the latest version of django_jenkins (0.18.0) so that the django_jenkins.tasks.with_coverage Jenkins Task is also no longer needed.

Instead, you execute the test run as follows:

python manage.py jenkins --enable-coverage

or

python3 manage.py jenkins --enable-coverage

You can find out more on the project's GitHub Repo.

like image 22
trevorrobertsjr Avatar answered Nov 18 '22 08:11

trevorrobertsjr