| = Testing Readme = |
| |
| So, you want to see what's broken? Eeeexcellent. |
| |
| If you are running python < 2.4.4, please see the troubleshooting section. |
| |
| == Quick Start == |
| |
| First thing to do is run the tests. If you have genshi and twill |
| installed on your system, you should be able to run the tests like |
| this: {{{ PYTHONPATH=. ./trac/test.py }}} |
| |
| == Slow Start == |
| |
| If you want to test against specific versions of genshi, twill, |
| pygments, etc., you can set those up like this: |
| {{{ |
| myworktree/trac |
| /pygments-0.8 |
| /twill-0.9 |
| /genshi-0.4.4 |
| }}} |
| |
| Run `python setup egg_info` in those subdirectories as needed. Then |
| you can run: |
| {{{ |
| PYTHONPATH=.:../twill-0.9:../genshi-0.4.4:../pygments-0.8 ./trac/test.py |
| }}} |
| |
| If you want to run just the functional tests, you can do that by |
| running |
| {{{ |
| PYTHONPATH=.:../twill-0.9:../genshi-0.4.4:../pygments-0.8 ./trac/tests/functional/testcases.py |
| }}} |
| |
| And to run everything except the functional tests, |
| {{{ |
| PYTHONPATH=. ./trac/test.py --skip-functional-tests |
| }}} |
| |
| |
| NOTE: Unlike most unittests, the functional tests share a test fixture |
| across tests. This means that you can't(*) run just one of the tests |
| by itself. But you can run a sub-set of the functional tests: |
| {{{ |
| PYTHONPATH=.:../twill-0.9:../genshi-0.4.4:../pygments-0.8 ./trac/tests/functional/__init__.py |
| PYTHONPATH=.:../twill-0.9:../genshi-0.4.4:../pygments-0.8 ./trac/ticket/tests/functional.py |
| PYTHONPATH=.:../twill-0.9:../genshi-0.4.4:../pygments-0.8 ./trac/versioncontrol/tests/functional.py |
| }}} |
| |
| Note that that there is a set of functional tests that are run |
| regardless of what subset you choose; these tests setup the shared |
| fixture. |
| |
| |
| (*) Unless you modify the code to comment out the other functional |
| tests. The test fixture is setup and torn down by |
| `FunctionalTestSuite`, and it runs the tests added to it with |
| `_tester` and `_testenv` set in the testcase objects. |
| |
| The functional tests require subversion, and use a random local port |
| 8000-8999 for the test web server. |
| |
| == Testing output and byproducts == |
| |
| There is some logging done: |
| testing.log :: |
| output from trac environment creation, tracd, and some svn commands |
| functional-testing.log :: |
| output from twill |
| |
| The test fixture is left behind in 'testenv' so you can inspect it |
| when debugging a problem. |
| {{{ |
| testenv/htpasswd -- the password/authentication for the test fixture. password = username |
| /repo -- the Subversion repository |
| /trac -- the Trac environment |
| }}} |
| (Note that running the tests again will automatically delete this test |
| environment and create a new one. If you want to save a test |
| environment, you will need to rename this directory before running the |
| tests again.) |
| |
| The command to serve the test environment is: |
| {{{ |
| PYTHONPATH=.:../twill-0.9:../genshi-0.4.4:../pygments-0.8 \ |
| ./trac/web/standalone.py --basic-auth=trac,testenv/htpasswd, -s \ |
| --port=8888 testenv/trac |
| }}} |
| This is particularly useful when a test fails and you want to explore |
| the environment to debug the problem. |
| |
| == Test Coverage == |
| |
| You can now determine statement coverage of unittests and functional |
| tests. But you'll have to run them separately for now. |
| |
| `figleaf` will need to be on your `PATH`. Set the `FIGLEAF` |
| environment variable to the figleaf command. |
| |
| Create a figleaf-exclude file with filename patterns to exclude. For |
| example: |
| {{{ |
| /usr/lib/python.*/.*.py |
| .*.html |
| }}} |
| |
| Then run the tests something like this: |
| {{{ |
| export FIGLEAF=figleaf |
| figleaf ./trac/test.py -v --skip-functional-tests |
| mv .figleaf .figleaf.unittests |
| python trac/tests/functional/testcases.py -v |
| mv .figleaf .figleaf.functional |
| figleaf2html --exclude-patterns=../figleaf-exclude .figleaf.functional .figleaf.unittests |
| }}} |
| Also, this is very slow; on a decent machine, 10 minutes for the functional tests is normal. |
| |
| To run without figleaf, be sure to unset `FIGLEAF`. |
| |
| ----------------------------------------------------------------------------- |
| |
| == Troubleshooting == |
| |
| 1. trac-admin is failing on initenv with this exception: |
| {{{ |
| raise Exception('Failed with exitcode %s running trac-admin with %r' % (retval, args)) |
| Exception: Failed with exitcode 1 running trac-admin with ('initenv', 'testenv', 'sqlite:db/trac.db', 'svn', '..../testenv/repo') |
| }}} |
| This can be caused by not having run `python setup.py egg_info` in |
| the genshi tree. |
| |
| 2. Windows needs an implementation of crypt or fcrypt. Carey Evans' |
| pure python version works, but prints warnings on Python 2.3 (they |
| can be ignored). See http://carey.geek.nz/code/python-fcrypt/ |
| |