Running qiBuild test suite

All in one step

Create a virtualenv to run your tests:


            
             virtualenv venv
source venv/bin/activate

            
           

Install qibuild with the “–editable” option, so that your changes are reflected without the need to call pip install again


            
             cd /path/to/qibuild
pip install --editable .

            
           

Install all the test dependencies:


            
             cd /path/to/qibuild
pip install -r requirements.txt

            
           

Finally, run make :


            
             cd /path/to/qibuild/python
make

            
           

This will use pylint to check for obvious errors, then run the full test suite.

Sometimes pylint is mistaken, you can fix this by adding a small comment to disable the check, using the pylint error code:


            
             # pylint:disable-msg=E1101

            
           

Running the test suite

This is on a build farm but only for linux and python2.7, so it is possible that some tests will fail.

If you do find a failing test, please open a bug.

If you find a bug, a nice way to make it easier to fix it is to write a failing test and mark it as ‘skipped’


            
             @pytest.skip("See bug # ....")
def test_subtle_bug(self):
   res = do_something_complicated()
   # Should be 42 but for some reason is 41 ...
   assert res == 42

            
           

This way when the bug is fixed we just have to remove the @pytest.skip and we are sure the bug never occurs again.

Running only some tests

You can use py.test like this:

  • Just for a given python package:

             
              cd python
py.test qisrc

             
            
  • Just for a given test file:

             
              py.test qisrc/test/test_git.py

             
            
  • Just for a given test name:

             
              py.test qisrc/test/test_git.py -k set_tracking_branch

             
            

Note about debuggers

If you are using ipdb or pdb to insert break points in the code like this:


             
              # in foo.py
def test_my_complicated_function():
    from IPython.core.debugger import Tracer; debug_here=Tracer()
    debug_here()

             
            

You will get an error message when you run py.test

The solution is to use the -s option of py.test :


             
              $ py.test foo.py -s

             
            

Exiting the virtualenv when you are done

Simply type


            
             $ deactivate

            
           

Feel free to remove the virtualenv folder


            
             $ rm -fr venv