# 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