update examples with 2.2.4 version, ReST fixes

This commit is contained in:
holger krekel 2012-05-22 18:30:34 +02:00
parent 76ec623b22
commit f5f3fe54d5
18 changed files with 169 additions and 169 deletions

View File

@ -5,6 +5,7 @@ Release announcements
.. toctree:: .. toctree::
:maxdepth: 2 :maxdepth: 2
release-2.2.4
release-2.2.2 release-2.2.2
release-2.2.1 release-2.2.1
release-2.2.0 release-2.2.0

View File

@ -23,7 +23,7 @@ you will see the return value of the function call::
$ py.test test_assert1.py $ py.test test_assert1.py
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 1 items collecting ... collected 1 items
test_assert1.py F test_assert1.py F
@ -37,7 +37,7 @@ you will see the return value of the function call::
E + where 3 = f() E + where 3 = f()
test_assert1.py:5: AssertionError test_assert1.py:5: AssertionError
========================= 1 failed in 0.02 seconds ========================= ========================= 1 failed in 0.01 seconds =========================
py.test has support for showing the values of the most common subexpressions py.test has support for showing the values of the most common subexpressions
including calls, attributes, comparisons, and binary and unary including calls, attributes, comparisons, and binary and unary
@ -105,7 +105,7 @@ if you run this module::
$ py.test test_assert2.py $ py.test test_assert2.py
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 1 items collecting ... collected 1 items
test_assert2.py F test_assert2.py F
@ -124,7 +124,7 @@ if you run this module::
E '5' E '5'
test_assert2.py:5: AssertionError test_assert2.py:5: AssertionError
========================= 1 failed in 0.03 seconds ========================= ========================= 1 failed in 0.01 seconds =========================
Special comparisons are done for a number of cases: Special comparisons are done for a number of cases:
@ -181,7 +181,7 @@ the conftest file::
E vals: 1 != 2 E vals: 1 != 2
test_foocompare.py:8: AssertionError test_foocompare.py:8: AssertionError
1 failed in 0.02 seconds 1 failed in 0.01 seconds
.. _assert-details: .. _assert-details:
.. _`assert introspection`: .. _`assert introspection`:

View File

@ -28,7 +28,7 @@ You can ask for available builtin or project-custom
$ py.test --funcargs $ py.test --funcargs
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collected 0 items collected 0 items
pytestconfig pytestconfig
the pytest config object with access to command line opts. the pytest config object with access to command line opts.
@ -76,7 +76,5 @@ You can ask for available builtin or project-custom
See http://docs.python.org/library/warnings.html for information See http://docs.python.org/library/warnings.html for information
on warning categories. on warning categories.
cov
A pytest funcarg that provides access to the underlying coverage object.
============================= in 0.01 seconds ============================= ============================= in 0.00 seconds =============================

View File

@ -64,7 +64,7 @@ of the failing function and hide the other one::
$ py.test $ py.test
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 2 items collecting ... collected 2 items
test_module.py .F test_module.py .F
@ -78,8 +78,8 @@ of the failing function and hide the other one::
test_module.py:9: AssertionError test_module.py:9: AssertionError
----------------------------- Captured stdout ------------------------------ ----------------------------- Captured stdout ------------------------------
setting up <function test_func2 at 0x1013230c8> setting up <function test_func2 at 0x20160c8>
==================== 1 failed, 1 passed in 0.03 seconds ==================== ==================== 1 failed, 1 passed in 0.01 seconds ====================
Accessing captured output from a test function Accessing captured output from a test function
--------------------------------------------------- ---------------------------------------------------

View File

@ -44,10 +44,9 @@ then you can just invoke ``py.test`` without command line options::
$ py.test $ py.test
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 1 items collecting ... collected 1 items
mymodule.py . mymodule.py .
========================= 1 passed in 0.51 seconds ========================= ========================= 1 passed in 0.02 seconds =========================
[?1034h

View File

@ -26,25 +26,25 @@ You can then restrict a test run to only run tests marked with ``webtest``::
$ py.test -v -m webtest $ py.test -v -m webtest
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 -- /Users/hpk/venv/0/bin/python platform linux2 -- Python 2.7.1 -- pytest-2.2.4 -- /home/hpk/venv/0/bin/python
collecting ... collected 2 items collecting ... collected 2 items
test_server.py:3: test_send_http PASSED test_server.py:3: test_send_http PASSED
=================== 1 tests deselected by "-m 'webtest'" =================== =================== 1 tests deselected by "-m 'webtest'" ===================
================== 1 passed, 1 deselected in 0.01 seconds ================== ================== 1 passed, 1 deselected in 0.00 seconds ==================
Or the inverse, running all tests except the webtest ones:: Or the inverse, running all tests except the webtest ones::
$ py.test -v -m "not webtest" $ py.test -v -m "not webtest"
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 -- /Users/hpk/venv/0/bin/python platform linux2 -- Python 2.7.1 -- pytest-2.2.4 -- /home/hpk/venv/0/bin/python
collecting ... collected 2 items collecting ... collected 2 items
test_server.py:6: test_something_quick PASSED test_server.py:6: test_something_quick PASSED
================= 1 tests deselected by "-m 'not webtest'" ================= ================= 1 tests deselected by "-m 'not webtest'" =================
================== 1 passed, 1 deselected in 0.02 seconds ================== ================== 1 passed, 1 deselected in 0.00 seconds ==================
Registering markers Registering markers
------------------------------------- -------------------------------------
@ -143,38 +143,38 @@ the given argument::
$ py.test -k send_http # running with the above defined examples $ py.test -k send_http # running with the above defined examples
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 4 items collecting ... collected 4 items
test_server.py . test_server.py .
=================== 3 tests deselected by '-ksend_http' ==================== =================== 3 tests deselected by '-ksend_http' ====================
================== 1 passed, 3 deselected in 0.02 seconds ================== ================== 1 passed, 3 deselected in 0.01 seconds ==================
And you can also run all tests except the ones that match the keyword:: And you can also run all tests except the ones that match the keyword::
$ py.test -k-send_http $ py.test -k-send_http
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 4 items collecting ... collected 4 items
test_mark_classlevel.py .. test_mark_classlevel.py ..
test_server.py . test_server.py .
=================== 1 tests deselected by '-k-send_http' =================== =================== 1 tests deselected by '-k-send_http' ===================
================== 3 passed, 1 deselected in 0.03 seconds ================== ================== 3 passed, 1 deselected in 0.01 seconds ==================
Or to only select the class:: Or to only select the class::
$ py.test -kTestClass $ py.test -kTestClass
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 4 items collecting ... collected 4 items
test_mark_classlevel.py .. test_mark_classlevel.py ..
=================== 2 tests deselected by '-kTestClass' ==================== =================== 2 tests deselected by '-kTestClass' ====================
================== 2 passed, 2 deselected in 0.03 seconds ================== ================== 2 passed, 2 deselected in 0.01 seconds ==================
.. _`adding a custom marker from a plugin`: .. _`adding a custom marker from a plugin`:
@ -223,23 +223,23 @@ the test needs::
$ py.test -E stage2 $ py.test -E stage2
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 1 items collecting ... collected 1 items
test_someenv.py s test_someenv.py s
======================== 1 skipped in 0.02 seconds ========================= ======================== 1 skipped in 0.00 seconds =========================
and here is one that specifies exactly the environment needed:: and here is one that specifies exactly the environment needed::
$ py.test -E stage1 $ py.test -E stage1
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 1 items collecting ... collected 1 items
test_someenv.py . test_someenv.py .
========================= 1 passed in 0.02 seconds ========================= ========================= 1 passed in 0.00 seconds =========================
The ``--markers`` option always gives you a list of available markers:: The ``--markers`` option always gives you a list of available markers::
@ -291,7 +291,7 @@ Let's run this without capturing output and see what we get::
$ py.test -q -s $ py.test -q -s
collecting ... collected 2 items collecting ... collected 2 items
.. ..
2 passed in 0.02 seconds 2 passed in 0.01 seconds
glob args=('function',) kwargs={'x': 3} glob args=('function',) kwargs={'x': 3}
glob args=('class',) kwargs={'x': 2} glob args=('class',) kwargs={'x': 2}
glob args=('module',) kwargs={'x': 1} glob args=('module',) kwargs={'x': 1}

View File

@ -49,7 +49,7 @@ You can now run the test::
$ py.test test_sample.py $ py.test test_sample.py
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 1 items collecting ... collected 1 items
test_sample.py F test_sample.py F
@ -57,7 +57,7 @@ You can now run the test::
================================= FAILURES ================================= ================================= FAILURES =================================
_______________________________ test_answer ________________________________ _______________________________ test_answer ________________________________
mysetup = <conftest.MySetup instance at 0x101322fc8> mysetup = <conftest.MySetup instance at 0x17f21b8>
def test_answer(mysetup): def test_answer(mysetup):
app = mysetup.myapp() app = mysetup.myapp()
@ -66,7 +66,7 @@ You can now run the test::
E assert 54 == 42 E assert 54 == 42
test_sample.py:4: AssertionError test_sample.py:4: AssertionError
========================= 1 failed in 0.72 seconds ========================= ========================= 1 failed in 0.01 seconds =========================
This means that our ``mysetup`` object was successfully instantiated This means that our ``mysetup`` object was successfully instantiated
and ``mysetup.app()`` returned an initialized ``MyApp`` instance. and ``mysetup.app()`` returned an initialized ``MyApp`` instance.
@ -122,14 +122,14 @@ Running it yields::
$ py.test test_ssh.py -rs $ py.test test_ssh.py -rs
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 1 items collecting ... collected 1 items
test_ssh.py s test_ssh.py s
========================= short test summary info ========================== ========================= short test summary info ==========================
SKIP [1] /Users/hpk/tmp/doc-exec-153/conftest.py:22: specify ssh host with --ssh SKIP [1] /tmp/doc-exec-220/conftest.py:22: specify ssh host with --ssh
======================== 1 skipped in 0.02 seconds ========================= ======================== 1 skipped in 0.01 seconds =========================
If you specify a command line option like ``py.test --ssh=python.org`` the test will execute as expected. If you specify a command line option like ``py.test --ssh=python.org`` the test will execute as expected.

View File

@ -27,7 +27,7 @@ now execute the test specification::
nonpython $ py.test test_simple.yml nonpython $ py.test test_simple.yml
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 2 items collecting ... collected 2 items
test_simple.yml .F test_simple.yml .F
@ -37,7 +37,7 @@ now execute the test specification::
usecase execution failed usecase execution failed
spec failed: 'some': 'other' spec failed: 'some': 'other'
no further details known at this point. no further details known at this point.
==================== 1 failed, 1 passed in 0.48 seconds ==================== ==================== 1 failed, 1 passed in 0.06 seconds ====================
You get one dot for the passing ``sub1: sub1`` check and one failure. You get one dot for the passing ``sub1: sub1`` check and one failure.
Obviously in the above ``conftest.py`` you'll want to implement a more Obviously in the above ``conftest.py`` you'll want to implement a more
@ -56,7 +56,7 @@ consulted when reporting in ``verbose`` mode::
nonpython $ py.test -v nonpython $ py.test -v
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 -- /Users/hpk/venv/0/bin/python platform linux2 -- Python 2.7.1 -- pytest-2.2.4 -- /home/hpk/venv/0/bin/python
collecting ... collected 2 items collecting ... collected 2 items
test_simple.yml:1: usecase: ok PASSED test_simple.yml:1: usecase: ok PASSED
@ -67,17 +67,17 @@ consulted when reporting in ``verbose`` mode::
usecase execution failed usecase execution failed
spec failed: 'some': 'other' spec failed: 'some': 'other'
no further details known at this point. no further details known at this point.
==================== 1 failed, 1 passed in 0.10 seconds ==================== ==================== 1 failed, 1 passed in 0.06 seconds ====================
While developing your custom test collection and execution it's also While developing your custom test collection and execution it's also
interesting to just look at the collection tree:: interesting to just look at the collection tree::
nonpython $ py.test --collectonly nonpython $ py.test --collectonly
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 2 items collecting ... collected 2 items
<YamlFile 'test_simple.yml'> <YamlFile 'test_simple.yml'>
<YamlItem 'ok'> <YamlItem 'ok'>
<YamlItem 'hello'> <YamlItem 'hello'>
============================= in 0.18 seconds ============================= ============================= in 0.07 seconds =============================

View File

@ -54,7 +54,7 @@ function is called three times. Let's run it::
E + where 54 = eval('6*9') E + where 54 = eval('6*9')
test_expectation.py:8: AssertionError test_expectation.py:8: AssertionError
1 failed, 2 passed in 0.03 seconds 1 failed, 2 passed in 0.01 seconds
As expected only one pair of input/output values fails the simple test function. As expected only one pair of input/output values fails the simple test function.
@ -96,7 +96,7 @@ This means that we only run 2 tests if we do not pass ``--all``::
$ py.test -q test_compute.py $ py.test -q test_compute.py
collecting ... collected 2 items collecting ... collected 2 items
.. ..
2 passed in 0.03 seconds 2 passed in 0.01 seconds
We run only two computations, so we see two dots. We run only two computations, so we see two dots.
let's run the full monty:: let's run the full monty::
@ -114,7 +114,7 @@ let's run the full monty::
E assert 4 < 4 E assert 4 < 4
test_compute.py:3: AssertionError test_compute.py:3: AssertionError
1 failed, 4 passed in 0.05 seconds 1 failed, 4 passed in 0.02 seconds
As expected when running the full range of ``param1`` values As expected when running the full range of ``param1`` values
we'll get an error on the last one. we'll get an error on the last one.
@ -154,19 +154,19 @@ this is a fully self-contained example which you can run with::
$ py.test test_scenarios.py $ py.test test_scenarios.py
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 2 items collecting ... collected 2 items
test_scenarios.py .. test_scenarios.py ..
========================= 2 passed in 0.02 seconds ========================= ========================= 2 passed in 0.01 seconds =========================
If you just collect tests you'll also nicely see 'advanced' and 'basic' as variants for the test function:: If you just collect tests you'll also nicely see 'advanced' and 'basic' as variants for the test function::
$ py.test --collectonly test_scenarios.py $ py.test --collectonly test_scenarios.py
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 2 items collecting ... collected 2 items
<Module 'test_scenarios.py'> <Module 'test_scenarios.py'>
<Class 'TestSampleWithScenarios'> <Class 'TestSampleWithScenarios'>
@ -174,7 +174,7 @@ If you just collect tests you'll also nicely see 'advanced' and 'basic' as varia
<Function 'test_demo[basic]'> <Function 'test_demo[basic]'>
<Function 'test_demo[advanced]'> <Function 'test_demo[advanced]'>
============================= in 0.05 seconds ============================= ============================= in 0.00 seconds =============================
Deferring the setup of parametrized resources Deferring the setup of parametrized resources
--------------------------------------------------- ---------------------------------------------------
@ -222,13 +222,13 @@ Let's first see how it looks like at collection time::
$ py.test test_backends.py --collectonly $ py.test test_backends.py --collectonly
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 2 items collecting ... collected 2 items
<Module 'test_backends.py'> <Module 'test_backends.py'>
<Function 'test_db_initialized[d1]'> <Function 'test_db_initialized[d1]'>
<Function 'test_db_initialized[d2]'> <Function 'test_db_initialized[d2]'>
============================= in 0.01 seconds ============================= ============================= in 0.00 seconds =============================
And then when we run the test:: And then when we run the test::
@ -238,7 +238,7 @@ And then when we run the test::
================================= FAILURES ================================= ================================= FAILURES =================================
_________________________ test_db_initialized[d2] __________________________ _________________________ test_db_initialized[d2] __________________________
db = <conftest.DB2 instance at 0x101323710> db = <conftest.DB2 instance at 0x1d4eb00>
def test_db_initialized(db): def test_db_initialized(db):
# a dummy test # a dummy test
@ -247,7 +247,7 @@ And then when we run the test::
E Failed: deliberately failing for demo purposes E Failed: deliberately failing for demo purposes
test_backends.py:6: Failed test_backends.py:6: Failed
1 failed, 1 passed in 0.03 seconds 1 failed, 1 passed in 0.01 seconds
The first invocation with ``db == "DB1"`` passed while the second with ``db == "DB2"`` failed. Our ``pytest_funcarg__db`` factory has instantiated each of the DB values during the setup phase while the ``pytest_generate_tests`` generated two according calls to the ``test_db_initialized`` during the collection phase. The first invocation with ``db == "DB1"`` passed while the second with ``db == "DB2"`` failed. Our ``pytest_funcarg__db`` factory has instantiated each of the DB values during the setup phase while the ``pytest_generate_tests`` generated two according calls to the ``test_db_initialized`` during the collection phase.
@ -295,14 +295,14 @@ argument sets to use for each test function. Let's run it::
================================= FAILURES ================================= ================================= FAILURES =================================
________________________ TestClass.test_equals[1-2] ________________________ ________________________ TestClass.test_equals[1-2] ________________________
self = <test_parametrize.TestClass instance at 0x101326368>, a = 1, b = 2 self = <test_parametrize.TestClass instance at 0x10d2e18>, a = 1, b = 2
def test_equals(self, a, b): def test_equals(self, a, b):
> assert a == b > assert a == b
E assert 1 == 2 E assert 1 == 2
test_parametrize.py:18: AssertionError test_parametrize.py:18: AssertionError
1 failed, 2 passed in 0.03 seconds 1 failed, 2 passed in 0.01 seconds
Indirect parametrization with multiple resources Indirect parametrization with multiple resources
-------------------------------------------------------------- --------------------------------------------------------------
@ -322,8 +322,7 @@ Running it results in some skips if we don't have all the python interpreters in
. $ py.test -rs -q multipython.py . $ py.test -rs -q multipython.py
collecting ... collected 75 items collecting ... collected 75 items
ssssssssssssssssss.........ssssss.........ssssss.........ssssssssssssssssss ............sss............sss............sss............ssssssssssssssssss
========================= short test summary info ========================== ========================= short test summary info ==========================
SKIP [24] /Users/hpk/p/pytest/doc/example/multipython.py:36: 'python2.8' not found SKIP [27] /home/hpk/p/pytest/doc/example/multipython.py:36: 'python2.8' not found
SKIP [24] /Users/hpk/p/pytest/doc/example/multipython.py:36: 'python2.4' not found 48 passed, 27 skipped in 1.71 seconds
27 passed, 48 skipped in 7.76 seconds

View File

@ -43,7 +43,7 @@ then the test collection looks like this::
$ py.test --collectonly $ py.test --collectonly
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 2 items collecting ... collected 2 items
<Module 'check_myapp.py'> <Module 'check_myapp.py'>
<Class 'CheckMyApp'> <Class 'CheckMyApp'>
@ -51,7 +51,7 @@ then the test collection looks like this::
<Function 'check_simple'> <Function 'check_simple'>
<Function 'check_complex'> <Function 'check_complex'>
============================= in 0.01 seconds ============================= ============================= in 0.00 seconds =============================
Interpreting cmdline arguments as Python packages Interpreting cmdline arguments as Python packages
----------------------------------------------------- -----------------------------------------------------
@ -82,7 +82,7 @@ You can always peek at the collection tree without running tests like this::
. $ py.test --collectonly pythoncollection.py . $ py.test --collectonly pythoncollection.py
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 3 items collecting ... collected 3 items
<Module 'pythoncollection.py'> <Module 'pythoncollection.py'>
<Function 'test_function'> <Function 'test_function'>
@ -91,4 +91,4 @@ You can always peek at the collection tree without running tests like this::
<Function 'test_method'> <Function 'test_method'>
<Function 'test_anothermethod'> <Function 'test_anothermethod'>
============================= in 0.01 seconds ============================= ============================= in 0.00 seconds =============================

View File

@ -13,7 +13,7 @@ get on the terminal - we are working on that):
assertion $ py.test failure_demo.py assertion $ py.test failure_demo.py
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 39 items collecting ... collected 39 items
failure_demo.py FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF failure_demo.py FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
@ -30,7 +30,7 @@ get on the terminal - we are working on that):
failure_demo.py:15: AssertionError failure_demo.py:15: AssertionError
_________________________ TestFailing.test_simple __________________________ _________________________ TestFailing.test_simple __________________________
self = <failure_demo.TestFailing object at 0x101490690> self = <failure_demo.TestFailing object at 0x2e4dd50>
def test_simple(self): def test_simple(self):
def f(): def f():
@ -40,13 +40,13 @@ get on the terminal - we are working on that):
> assert f() == g() > assert f() == g()
E assert 42 == 43 E assert 42 == 43
E + where 42 = <function f at 0x101462b90>() E + where 42 = <function f at 0x2e73c80>()
E + and 43 = <function g at 0x101462c08>() E + and 43 = <function g at 0x2e73cf8>()
failure_demo.py:28: AssertionError failure_demo.py:28: AssertionError
____________________ TestFailing.test_simple_multiline _____________________ ____________________ TestFailing.test_simple_multiline _____________________
self = <failure_demo.TestFailing object at 0x101490b10> self = <failure_demo.TestFailing object at 0x2e4d7d0>
def test_simple_multiline(self): def test_simple_multiline(self):
otherfunc_multi( otherfunc_multi(
@ -66,19 +66,19 @@ get on the terminal - we are working on that):
failure_demo.py:11: AssertionError failure_demo.py:11: AssertionError
___________________________ TestFailing.test_not ___________________________ ___________________________ TestFailing.test_not ___________________________
self = <failure_demo.TestFailing object at 0x101490210> self = <failure_demo.TestFailing object at 0x2e4d390>
def test_not(self): def test_not(self):
def f(): def f():
return 42 return 42
> assert not f() > assert not f()
E assert not 42 E assert not 42
E + where 42 = <function f at 0x101462aa0>() E + where 42 = <function f at 0x2d36cf8>()
failure_demo.py:38: AssertionError failure_demo.py:38: AssertionError
_________________ TestSpecialisedExplanations.test_eq_text _________________ _________________ TestSpecialisedExplanations.test_eq_text _________________
self = <failure_demo.TestSpecialisedExplanations object at 0x101490a10> self = <failure_demo.TestSpecialisedExplanations object at 0x2e4db10>
def test_eq_text(self): def test_eq_text(self):
> assert 'spam' == 'eggs' > assert 'spam' == 'eggs'
@ -89,7 +89,7 @@ get on the terminal - we are working on that):
failure_demo.py:42: AssertionError failure_demo.py:42: AssertionError
_____________ TestSpecialisedExplanations.test_eq_similar_text _____________ _____________ TestSpecialisedExplanations.test_eq_similar_text _____________
self = <failure_demo.TestSpecialisedExplanations object at 0x10148d9d0> self = <failure_demo.TestSpecialisedExplanations object at 0x2e6cbd0>
def test_eq_similar_text(self): def test_eq_similar_text(self):
> assert 'foo 1 bar' == 'foo 2 bar' > assert 'foo 1 bar' == 'foo 2 bar'
@ -102,7 +102,7 @@ get on the terminal - we are working on that):
failure_demo.py:45: AssertionError failure_demo.py:45: AssertionError
____________ TestSpecialisedExplanations.test_eq_multiline_text ____________ ____________ TestSpecialisedExplanations.test_eq_multiline_text ____________
self = <failure_demo.TestSpecialisedExplanations object at 0x10148d590> self = <failure_demo.TestSpecialisedExplanations object at 0x2e6cdd0>
def test_eq_multiline_text(self): def test_eq_multiline_text(self):
> assert 'foo\nspam\nbar' == 'foo\neggs\nbar' > assert 'foo\nspam\nbar' == 'foo\neggs\nbar'
@ -115,7 +115,7 @@ get on the terminal - we are working on that):
failure_demo.py:48: AssertionError failure_demo.py:48: AssertionError
______________ TestSpecialisedExplanations.test_eq_long_text _______________ ______________ TestSpecialisedExplanations.test_eq_long_text _______________
self = <failure_demo.TestSpecialisedExplanations object at 0x10148dc90> self = <failure_demo.TestSpecialisedExplanations object at 0x2e6cad0>
def test_eq_long_text(self): def test_eq_long_text(self):
a = '1'*100 + 'a' + '2'*100 a = '1'*100 + 'a' + '2'*100
@ -132,7 +132,7 @@ get on the terminal - we are working on that):
failure_demo.py:53: AssertionError failure_demo.py:53: AssertionError
_________ TestSpecialisedExplanations.test_eq_long_text_multiline __________ _________ TestSpecialisedExplanations.test_eq_long_text_multiline __________
self = <failure_demo.TestSpecialisedExplanations object at 0x10148d910> self = <failure_demo.TestSpecialisedExplanations object at 0x2e6cb50>
def test_eq_long_text_multiline(self): def test_eq_long_text_multiline(self):
a = '1\n'*100 + 'a' + '2\n'*100 a = '1\n'*100 + 'a' + '2\n'*100
@ -156,7 +156,7 @@ get on the terminal - we are working on that):
failure_demo.py:58: AssertionError failure_demo.py:58: AssertionError
_________________ TestSpecialisedExplanations.test_eq_list _________________ _________________ TestSpecialisedExplanations.test_eq_list _________________
self = <failure_demo.TestSpecialisedExplanations object at 0x10148b9d0> self = <failure_demo.TestSpecialisedExplanations object at 0x2dca1d0>
def test_eq_list(self): def test_eq_list(self):
> assert [0, 1, 2] == [0, 1, 3] > assert [0, 1, 2] == [0, 1, 3]
@ -166,7 +166,7 @@ get on the terminal - we are working on that):
failure_demo.py:61: AssertionError failure_demo.py:61: AssertionError
______________ TestSpecialisedExplanations.test_eq_list_long _______________ ______________ TestSpecialisedExplanations.test_eq_list_long _______________
self = <failure_demo.TestSpecialisedExplanations object at 0x10148b750> self = <failure_demo.TestSpecialisedExplanations object at 0x2dcad10>
def test_eq_list_long(self): def test_eq_list_long(self):
a = [0]*100 + [1] + [3]*100 a = [0]*100 + [1] + [3]*100
@ -178,7 +178,7 @@ get on the terminal - we are working on that):
failure_demo.py:66: AssertionError failure_demo.py:66: AssertionError
_________________ TestSpecialisedExplanations.test_eq_dict _________________ _________________ TestSpecialisedExplanations.test_eq_dict _________________
self = <failure_demo.TestSpecialisedExplanations object at 0x10148bdd0> self = <failure_demo.TestSpecialisedExplanations object at 0x2dca3d0>
def test_eq_dict(self): def test_eq_dict(self):
> assert {'a': 0, 'b': 1} == {'a': 0, 'b': 2} > assert {'a': 0, 'b': 1} == {'a': 0, 'b': 2}
@ -191,7 +191,7 @@ get on the terminal - we are working on that):
failure_demo.py:69: AssertionError failure_demo.py:69: AssertionError
_________________ TestSpecialisedExplanations.test_eq_set __________________ _________________ TestSpecialisedExplanations.test_eq_set __________________
self = <failure_demo.TestSpecialisedExplanations object at 0x10148b1d0> self = <failure_demo.TestSpecialisedExplanations object at 0x2dca710>
def test_eq_set(self): def test_eq_set(self):
> assert set([0, 10, 11, 12]) == set([0, 20, 21]) > assert set([0, 10, 11, 12]) == set([0, 20, 21])
@ -207,7 +207,7 @@ get on the terminal - we are working on that):
failure_demo.py:72: AssertionError failure_demo.py:72: AssertionError
_____________ TestSpecialisedExplanations.test_eq_longer_list ______________ _____________ TestSpecialisedExplanations.test_eq_longer_list ______________
self = <failure_demo.TestSpecialisedExplanations object at 0x10148bf10> self = <failure_demo.TestSpecialisedExplanations object at 0x2dca490>
def test_eq_longer_list(self): def test_eq_longer_list(self):
> assert [1,2] == [1,2,3] > assert [1,2] == [1,2,3]
@ -217,7 +217,7 @@ get on the terminal - we are working on that):
failure_demo.py:75: AssertionError failure_demo.py:75: AssertionError
_________________ TestSpecialisedExplanations.test_in_list _________________ _________________ TestSpecialisedExplanations.test_in_list _________________
self = <failure_demo.TestSpecialisedExplanations object at 0x10148b390> self = <failure_demo.TestSpecialisedExplanations object at 0x2dca510>
def test_in_list(self): def test_in_list(self):
> assert 1 in [0, 2, 3, 4, 5] > assert 1 in [0, 2, 3, 4, 5]
@ -226,7 +226,7 @@ get on the terminal - we are working on that):
failure_demo.py:78: AssertionError failure_demo.py:78: AssertionError
__________ TestSpecialisedExplanations.test_not_in_text_multiline __________ __________ TestSpecialisedExplanations.test_not_in_text_multiline __________
self = <failure_demo.TestSpecialisedExplanations object at 0x101483e50> self = <failure_demo.TestSpecialisedExplanations object at 0x2db86d0>
def test_not_in_text_multiline(self): def test_not_in_text_multiline(self):
text = 'some multiline\ntext\nwhich\nincludes foo\nand a\ntail' text = 'some multiline\ntext\nwhich\nincludes foo\nand a\ntail'
@ -244,7 +244,7 @@ get on the terminal - we are working on that):
failure_demo.py:82: AssertionError failure_demo.py:82: AssertionError
___________ TestSpecialisedExplanations.test_not_in_text_single ____________ ___________ TestSpecialisedExplanations.test_not_in_text_single ____________
self = <failure_demo.TestSpecialisedExplanations object at 0x101483c10> self = <failure_demo.TestSpecialisedExplanations object at 0x2db8450>
def test_not_in_text_single(self): def test_not_in_text_single(self):
text = 'single foo line' text = 'single foo line'
@ -257,7 +257,7 @@ get on the terminal - we are working on that):
failure_demo.py:86: AssertionError failure_demo.py:86: AssertionError
_________ TestSpecialisedExplanations.test_not_in_text_single_long _________ _________ TestSpecialisedExplanations.test_not_in_text_single_long _________
self = <failure_demo.TestSpecialisedExplanations object at 0x101483ed0> self = <failure_demo.TestSpecialisedExplanations object at 0x2db8910>
def test_not_in_text_single_long(self): def test_not_in_text_single_long(self):
text = 'head ' * 50 + 'foo ' + 'tail ' * 20 text = 'head ' * 50 + 'foo ' + 'tail ' * 20
@ -270,7 +270,7 @@ get on the terminal - we are working on that):
failure_demo.py:90: AssertionError failure_demo.py:90: AssertionError
______ TestSpecialisedExplanations.test_not_in_text_single_long_term _______ ______ TestSpecialisedExplanations.test_not_in_text_single_long_term _______
self = <failure_demo.TestSpecialisedExplanations object at 0x101483310> self = <failure_demo.TestSpecialisedExplanations object at 0x2db88d0>
def test_not_in_text_single_long_term(self): def test_not_in_text_single_long_term(self):
text = 'head ' * 50 + 'f'*70 + 'tail ' * 20 text = 'head ' * 50 + 'f'*70 + 'tail ' * 20
@ -289,7 +289,7 @@ get on the terminal - we are working on that):
i = Foo() i = Foo()
> assert i.b == 2 > assert i.b == 2
E assert 1 == 2 E assert 1 == 2
E + where 1 = <failure_demo.Foo object at 0x101483f50>.b E + where 1 = <failure_demo.Foo object at 0x2db8d90>.b
failure_demo.py:101: AssertionError failure_demo.py:101: AssertionError
_________________________ test_attribute_instance __________________________ _________________________ test_attribute_instance __________________________
@ -299,8 +299,8 @@ get on the terminal - we are working on that):
b = 1 b = 1
> assert Foo().b == 2 > assert Foo().b == 2
E assert 1 == 2 E assert 1 == 2
E + where 1 = <failure_demo.Foo object at 0x101483210>.b E + where 1 = <failure_demo.Foo object at 0x2db8f50>.b
E + where <failure_demo.Foo object at 0x101483210> = <class 'failure_demo.Foo'>() E + where <failure_demo.Foo object at 0x2db8f50> = <class 'failure_demo.Foo'>()
failure_demo.py:107: AssertionError failure_demo.py:107: AssertionError
__________________________ test_attribute_failure __________________________ __________________________ test_attribute_failure __________________________
@ -316,7 +316,7 @@ get on the terminal - we are working on that):
failure_demo.py:116: failure_demo.py:116:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <failure_demo.Foo object at 0x101483450> self = <failure_demo.Foo object at 0x2db8dd0>
def _get_b(self): def _get_b(self):
> raise Exception('Failed to get attrib') > raise Exception('Failed to get attrib')
@ -332,15 +332,15 @@ get on the terminal - we are working on that):
b = 2 b = 2
> assert Foo().b == Bar().b > assert Foo().b == Bar().b
E assert 1 == 2 E assert 1 == 2
E + where 1 = <failure_demo.Foo object at 0x101483150>.b E + where 1 = <failure_demo.Foo object at 0x2db8c10>.b
E + where <failure_demo.Foo object at 0x101483150> = <class 'failure_demo.Foo'>() E + where <failure_demo.Foo object at 0x2db8c10> = <class 'failure_demo.Foo'>()
E + and 2 = <failure_demo.Bar object at 0x101483350>.b E + and 2 = <failure_demo.Bar object at 0x2db8b90>.b
E + where <failure_demo.Bar object at 0x101483350> = <class 'failure_demo.Bar'>() E + where <failure_demo.Bar object at 0x2db8b90> = <class 'failure_demo.Bar'>()
failure_demo.py:124: AssertionError failure_demo.py:124: AssertionError
__________________________ TestRaises.test_raises __________________________ __________________________ TestRaises.test_raises __________________________
self = <failure_demo.TestRaises instance at 0x1014a6758> self = <failure_demo.TestRaises instance at 0x2d93cf8>
def test_raises(self): def test_raises(self):
s = 'qwe' s = 'qwe'
@ -352,10 +352,10 @@ get on the terminal - we are working on that):
> int(s) > int(s)
E ValueError: invalid literal for int() with base 10: 'qwe' E ValueError: invalid literal for int() with base 10: 'qwe'
<0-codegen /Users/hpk/p/pytest/_pytest/python.py:976>:1: ValueError <0-codegen /home/hpk/p/pytest/_pytest/python.py:978>:1: ValueError
______________________ TestRaises.test_raises_doesnt _______________________ ______________________ TestRaises.test_raises_doesnt _______________________
self = <failure_demo.TestRaises instance at 0x1014b03f8> self = <failure_demo.TestRaises instance at 0x2e69c20>
def test_raises_doesnt(self): def test_raises_doesnt(self):
> raises(IOError, "int('3')") > raises(IOError, "int('3')")
@ -364,7 +364,7 @@ get on the terminal - we are working on that):
failure_demo.py:136: Failed failure_demo.py:136: Failed
__________________________ TestRaises.test_raise ___________________________ __________________________ TestRaises.test_raise ___________________________
self = <failure_demo.TestRaises instance at 0x1014a8998> self = <failure_demo.TestRaises instance at 0x2d96098>
def test_raise(self): def test_raise(self):
> raise ValueError("demo error") > raise ValueError("demo error")
@ -373,7 +373,7 @@ get on the terminal - we are working on that):
failure_demo.py:139: ValueError failure_demo.py:139: ValueError
________________________ TestRaises.test_tupleerror ________________________ ________________________ TestRaises.test_tupleerror ________________________
self = <failure_demo.TestRaises instance at 0x1014a27a0> self = <failure_demo.TestRaises instance at 0x2d96e60>
def test_tupleerror(self): def test_tupleerror(self):
> a,b = [1] > a,b = [1]
@ -382,7 +382,7 @@ get on the terminal - we are working on that):
failure_demo.py:142: ValueError failure_demo.py:142: ValueError
______ TestRaises.test_reinterpret_fails_with_print_for_the_fun_of_it ______ ______ TestRaises.test_reinterpret_fails_with_print_for_the_fun_of_it ______
self = <failure_demo.TestRaises instance at 0x1014a5518> self = <failure_demo.TestRaises instance at 0x2d99b90>
def test_reinterpret_fails_with_print_for_the_fun_of_it(self): def test_reinterpret_fails_with_print_for_the_fun_of_it(self):
l = [1,2,3] l = [1,2,3]
@ -395,7 +395,7 @@ get on the terminal - we are working on that):
l is [1, 2, 3] l is [1, 2, 3]
________________________ TestRaises.test_some_error ________________________ ________________________ TestRaises.test_some_error ________________________
self = <failure_demo.TestRaises instance at 0x1014a1320> self = <failure_demo.TestRaises instance at 0x2d9b998>
def test_some_error(self): def test_some_error(self):
> if namenotexi: > if namenotexi:
@ -420,10 +420,10 @@ get on the terminal - we are working on that):
> assert 1 == 0 > assert 1 == 0
E assert 1 == 0 E assert 1 == 0
<2-codegen 'abc-123' /Users/hpk/p/pytest/doc/example/assertion/failure_demo.py:162>:2: AssertionError <2-codegen 'abc-123' /home/hpk/p/pytest/doc/example/assertion/failure_demo.py:162>:2: AssertionError
____________________ TestMoreErrors.test_complex_error _____________________ ____________________ TestMoreErrors.test_complex_error _____________________
self = <failure_demo.TestMoreErrors instance at 0x1014a6638> self = <failure_demo.TestMoreErrors instance at 0x2e5b6c8>
def test_complex_error(self): def test_complex_error(self):
def f(): def f():
@ -452,7 +452,7 @@ get on the terminal - we are working on that):
failure_demo.py:5: AssertionError failure_demo.py:5: AssertionError
___________________ TestMoreErrors.test_z1_unpack_error ____________________ ___________________ TestMoreErrors.test_z1_unpack_error ____________________
self = <failure_demo.TestMoreErrors instance at 0x1014a42d8> self = <failure_demo.TestMoreErrors instance at 0x2d9a998>
def test_z1_unpack_error(self): def test_z1_unpack_error(self):
l = [] l = []
@ -462,7 +462,7 @@ get on the terminal - we are working on that):
failure_demo.py:179: ValueError failure_demo.py:179: ValueError
____________________ TestMoreErrors.test_z2_type_error _____________________ ____________________ TestMoreErrors.test_z2_type_error _____________________
self = <failure_demo.TestMoreErrors instance at 0x1014a0128> self = <failure_demo.TestMoreErrors instance at 0x2dc87a0>
def test_z2_type_error(self): def test_z2_type_error(self):
l = 3 l = 3
@ -472,19 +472,19 @@ get on the terminal - we are working on that):
failure_demo.py:183: TypeError failure_demo.py:183: TypeError
______________________ TestMoreErrors.test_startswith ______________________ ______________________ TestMoreErrors.test_startswith ______________________
self = <failure_demo.TestMoreErrors instance at 0x1014a0ef0> self = <failure_demo.TestMoreErrors instance at 0x2dc55a8>
def test_startswith(self): def test_startswith(self):
s = "123" s = "123"
g = "456" g = "456"
> assert s.startswith(g) > assert s.startswith(g)
E assert <built-in method startswith of str object at 0x1014951c0>('456') E assert <built-in method startswith of str object at 0x2daf3f0>('456')
E + where <built-in method startswith of str object at 0x1014951c0> = '123'.startswith E + where <built-in method startswith of str object at 0x2daf3f0> = '123'.startswith
failure_demo.py:188: AssertionError failure_demo.py:188: AssertionError
__________________ TestMoreErrors.test_startswith_nested ___________________ __________________ TestMoreErrors.test_startswith_nested ___________________
self = <failure_demo.TestMoreErrors instance at 0x1014a4170> self = <failure_demo.TestMoreErrors instance at 0x2dc8518>
def test_startswith_nested(self): def test_startswith_nested(self):
def f(): def f():
@ -492,15 +492,15 @@ get on the terminal - we are working on that):
def g(): def g():
return "456" return "456"
> assert f().startswith(g()) > assert f().startswith(g())
E assert <built-in method startswith of str object at 0x1014951c0>('456') E assert <built-in method startswith of str object at 0x2daf3f0>('456')
E + where <built-in method startswith of str object at 0x1014951c0> = '123'.startswith E + where <built-in method startswith of str object at 0x2daf3f0> = '123'.startswith
E + where '123' = <function f at 0x1014aea28>() E + where '123' = <function f at 0x2e50aa0>()
E + and '456' = <function g at 0x101477c80>() E + and '456' = <function g at 0x2e52cf8>()
failure_demo.py:195: AssertionError failure_demo.py:195: AssertionError
_____________________ TestMoreErrors.test_global_func ______________________ _____________________ TestMoreErrors.test_global_func ______________________
self = <failure_demo.TestMoreErrors instance at 0x1014b3ab8> self = <failure_demo.TestMoreErrors instance at 0x2e69098>
def test_global_func(self): def test_global_func(self):
> assert isinstance(globf(42), float) > assert isinstance(globf(42), float)
@ -510,18 +510,18 @@ get on the terminal - we are working on that):
failure_demo.py:198: AssertionError failure_demo.py:198: AssertionError
_______________________ TestMoreErrors.test_instance _______________________ _______________________ TestMoreErrors.test_instance _______________________
self = <failure_demo.TestMoreErrors instance at 0x1014a2878> self = <failure_demo.TestMoreErrors instance at 0x2d96fc8>
def test_instance(self): def test_instance(self):
self.x = 6*7 self.x = 6*7
> assert self.x != 42 > assert self.x != 42
E assert 42 != 42 E assert 42 != 42
E + where 42 = <failure_demo.TestMoreErrors instance at 0x1014a2878>.x E + where 42 = <failure_demo.TestMoreErrors instance at 0x2d96fc8>.x
failure_demo.py:202: AssertionError failure_demo.py:202: AssertionError
_______________________ TestMoreErrors.test_compare ________________________ _______________________ TestMoreErrors.test_compare ________________________
self = <failure_demo.TestMoreErrors instance at 0x10149da70> self = <failure_demo.TestMoreErrors instance at 0x2d9e170>
def test_compare(self): def test_compare(self):
> assert globf(10) < 5 > assert globf(10) < 5
@ -531,7 +531,7 @@ get on the terminal - we are working on that):
failure_demo.py:205: AssertionError failure_demo.py:205: AssertionError
_____________________ TestMoreErrors.test_try_finally ______________________ _____________________ TestMoreErrors.test_try_finally ______________________
self = <failure_demo.TestMoreErrors instance at 0x101493908> self = <failure_demo.TestMoreErrors instance at 0x2d9ef80>
def test_try_finally(self): def test_try_finally(self):
x = 1 x = 1
@ -540,4 +540,4 @@ get on the terminal - we are working on that):
E assert 1 == 0 E assert 1 == 0
failure_demo.py:210: AssertionError failure_demo.py:210: AssertionError
======================== 39 failed in 1.05 seconds ========================= ======================== 39 failed in 0.17 seconds =========================

View File

@ -53,7 +53,7 @@ Let's run this without supplying our new command line option::
test_sample.py:6: AssertionError test_sample.py:6: AssertionError
----------------------------- Captured stdout ------------------------------ ----------------------------- Captured stdout ------------------------------
first first
1 failed in 0.50 seconds 1 failed in 0.01 seconds
And now with supplying a command line option:: And now with supplying a command line option::
@ -76,7 +76,7 @@ And now with supplying a command line option::
test_sample.py:6: AssertionError test_sample.py:6: AssertionError
----------------------------- Captured stdout ------------------------------ ----------------------------- Captured stdout ------------------------------
second second
1 failed in 0.02 seconds 1 failed in 0.01 seconds
Ok, this completes the basic pattern. However, one often rather Ok, this completes the basic pattern. However, one often rather
wants to process command line options outside of the test and wants to process command line options outside of the test and
@ -109,13 +109,13 @@ directory with the above conftest.py::
$ py.test $ py.test
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
gw0 I gw0 I / gw1 I / gw2 I / gw3 I
gw0 [0] gw0 [0] / gw1 [0] / gw2 [0] / gw3 [0]
scheduling tests via LoadScheduling scheduling tests via LoadScheduling
============================= in 5.12 seconds ============================= ============================= in 0.52 seconds =============================
.. _`excontrolskip`: .. _`excontrolskip`:
@ -156,25 +156,25 @@ and when running it will see a skipped "slow" test::
$ py.test -rs # "-rs" means report details on the little 's' $ py.test -rs # "-rs" means report details on the little 's'
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 2 items collecting ... collected 2 items
test_module.py .s test_module.py .s
========================= short test summary info ========================== ========================= short test summary info ==========================
SKIP [1] /Users/hpk/tmp/doc-exec-158/conftest.py:9: need --runslow option to run SKIP [1] /tmp/doc-exec-225/conftest.py:9: need --runslow option to run
=================== 1 passed, 1 skipped in 0.09 seconds ==================== =================== 1 passed, 1 skipped in 0.01 seconds ====================
Or run it including the ``slow`` marked test:: Or run it including the ``slow`` marked test::
$ py.test --runslow $ py.test --runslow
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 2 items collecting ... collected 2 items
test_module.py .. test_module.py ..
========================= 2 passed in 0.02 seconds ========================= ========================= 2 passed in 0.01 seconds =========================
Writing well integrated assertion helpers Writing well integrated assertion helpers
-------------------------------------------------- --------------------------------------------------
@ -213,7 +213,7 @@ Let's run our little function::
E Failed: not configured: 42 E Failed: not configured: 42
test_checkconfig.py:8: Failed test_checkconfig.py:8: Failed
1 failed in 0.07 seconds 1 failed in 0.01 seconds
Detect if running from within a py.test run Detect if running from within a py.test run
-------------------------------------------------------------- --------------------------------------------------------------
@ -261,11 +261,11 @@ which will add the string to the test header accordingly::
$ py.test $ py.test
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
project deps: mylib-1.1 project deps: mylib-1.1
collecting ... collected 0 items collecting ... collected 0 items
============================= in 0.01 seconds ============================= ============================= in 0.00 seconds =============================
.. regendoc:wipe .. regendoc:wipe
@ -284,21 +284,21 @@ which will add info only when run with "--v"::
$ py.test -v $ py.test -v
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 -- /Users/hpk/venv/0/bin/python platform linux2 -- Python 2.7.1 -- pytest-2.2.4 -- /home/hpk/venv/0/bin/python
info1: did you know that ... info1: did you know that ...
did you? did you?
collecting ... collected 0 items collecting ... collected 0 items
============================= in 0.03 seconds ============================= ============================= in 0.00 seconds =============================
and nothing when run plainly:: and nothing when run plainly::
$ py.test $ py.test
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 0 items collecting ... collected 0 items
============================= in 0.01 seconds ============================= ============================= in 0.00 seconds =============================
profiling test duration profiling test duration
-------------------------- --------------------------
@ -327,7 +327,7 @@ Now we can profile which test functions execute the slowest::
$ py.test --durations=3 $ py.test --durations=3
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 3 items collecting ... collected 3 items
test_some_are_slow.py ... test_some_are_slow.py ...
@ -335,5 +335,5 @@ Now we can profile which test functions execute the slowest::
========================= slowest 3 test durations ========================= ========================= slowest 3 test durations =========================
0.20s call test_some_are_slow.py::test_funcslow2 0.20s call test_some_are_slow.py::test_funcslow2
0.10s call test_some_are_slow.py::test_funcslow1 0.10s call test_some_are_slow.py::test_funcslow1
0.00s call test_some_are_slow.py::test_funcfast 0.00s setup test_some_are_slow.py::test_funcslow2
========================= 3 passed in 0.33 seconds ========================= ========================= 3 passed in 0.31 seconds =========================

View File

@ -62,7 +62,7 @@ Running the test looks like this::
$ py.test test_simplefactory.py $ py.test test_simplefactory.py
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 1 items collecting ... collected 1 items
test_simplefactory.py F test_simplefactory.py F
@ -77,7 +77,7 @@ Running the test looks like this::
E assert 42 == 17 E assert 42 == 17
test_simplefactory.py:5: AssertionError test_simplefactory.py:5: AssertionError
========================= 1 failed in 0.03 seconds ========================= ========================= 1 failed in 0.01 seconds =========================
This means that indeed the test function was called with a ``myfuncarg`` This means that indeed the test function was called with a ``myfuncarg``
argument value of ``42`` and the assert fails. Here is how py.test argument value of ``42`` and the assert fails. Here is how py.test
@ -167,7 +167,7 @@ Running this will generate ten invocations of ``test_func`` passing in each of t
$ py.test test_example.py $ py.test test_example.py
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 10 items collecting ... collected 10 items
test_example.py .........F test_example.py .........F
@ -182,7 +182,7 @@ Running this will generate ten invocations of ``test_func`` passing in each of t
E assert 9 < 9 E assert 9 < 9
test_example.py:6: AssertionError test_example.py:6: AssertionError
==================== 1 failed, 9 passed in 0.07 seconds ==================== ==================== 1 failed, 9 passed in 0.02 seconds ====================
Obviously, only when ``numiter`` has the value of ``9`` does the test fail. Note that the ``pytest_generate_tests(metafunc)`` hook is called during Obviously, only when ``numiter`` has the value of ``9`` does the test fail. Note that the ``pytest_generate_tests(metafunc)`` hook is called during
the test collection phase which is separate from the actual test running. the test collection phase which is separate from the actual test running.
@ -190,7 +190,7 @@ Let's just look at what is collected::
$ py.test --collectonly test_example.py $ py.test --collectonly test_example.py
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 10 items collecting ... collected 10 items
<Module 'test_example.py'> <Module 'test_example.py'>
<Function 'test_func[0]'> <Function 'test_func[0]'>
@ -204,13 +204,13 @@ Let's just look at what is collected::
<Function 'test_func[8]'> <Function 'test_func[8]'>
<Function 'test_func[9]'> <Function 'test_func[9]'>
============================= in 0.01 seconds ============================= ============================= in 0.00 seconds =============================
If you want to select only the run with the value ``7`` you could do:: If you want to select only the run with the value ``7`` you could do::
$ py.test -v -k 7 test_example.py # or -k test_func[7] $ py.test -v -k 7 test_example.py # or -k test_func[7]
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 -- /Users/hpk/venv/0/bin/python platform linux2 -- Python 2.7.1 -- pytest-2.2.4 -- /home/hpk/venv/0/bin/python
collecting ... collected 10 items collecting ... collected 10 items
test_example.py:5: test_func[7] PASSED test_example.py:5: test_func[7] PASSED

View File

@ -22,10 +22,9 @@ Installation options::
To check your installation has installed the correct version:: To check your installation has installed the correct version::
$ py.test --version $ py.test --version
This is py.test version 2.2.2, imported from /Users/hpk/p/pytest/pytest.pyc This is py.test version 2.2.4, imported from /home/hpk/p/pytest/pytest.py
setuptools registered plugins: setuptools registered plugins:
pytest-xdist-1.8 at /Users/hpk/p/pytest-xdist/xdist/plugin.pyc pytest-xdist-1.8 at /home/hpk/p/pytest-xdist/xdist/plugin.pyc
pytest-cov-1.4 at /Users/hpk/venv/0/lib/python2.7/site-packages/pytest_cov.pyc
If you get an error checkout :ref:`installation issues`. If you get an error checkout :ref:`installation issues`.
@ -47,7 +46,7 @@ That's it. You can execute the test function now::
$ py.test $ py.test
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 1 items collecting ... collected 1 items
test_sample.py F test_sample.py F
@ -61,7 +60,7 @@ That's it. You can execute the test function now::
E + where 4 = func(3) E + where 4 = func(3)
test_sample.py:5: AssertionError test_sample.py:5: AssertionError
========================= 1 failed in 0.02 seconds ========================= ========================= 1 failed in 0.01 seconds =========================
py.test found the ``test_answer`` function by following :ref:`standard test discovery rules <test discovery>`, basically detecting the ``test_`` prefixes. We got a failure report because our little ``func(3)`` call did not return ``5``. py.test found the ``test_answer`` function by following :ref:`standard test discovery rules <test discovery>`, basically detecting the ``test_`` prefixes. We got a failure report because our little ``func(3)`` call did not return ``5``.
@ -96,7 +95,7 @@ Running it with, this time in "quiet" reporting mode::
$ py.test -q test_sysexit.py $ py.test -q test_sysexit.py
collecting ... collected 1 items collecting ... collected 1 items
. .
1 passed in 0.01 seconds 1 passed in 0.00 seconds
.. todo:: For further ways to assert exceptions see the `raises` .. todo:: For further ways to assert exceptions see the `raises`
@ -127,7 +126,7 @@ run the module by passing its filename::
================================= FAILURES ================================= ================================= FAILURES =================================
____________________________ TestClass.test_two ____________________________ ____________________________ TestClass.test_two ____________________________
self = <test_class.TestClass instance at 0x1013225a8> self = <test_class.TestClass instance at 0x1a956c8>
def test_two(self): def test_two(self):
x = "hello" x = "hello"
@ -135,7 +134,7 @@ run the module by passing its filename::
E assert hasattr('hello', 'check') E assert hasattr('hello', 'check')
test_class.py:8: AssertionError test_class.py:8: AssertionError
1 failed, 1 passed in 0.03 seconds 1 failed, 1 passed in 0.01 seconds
The first test passed, the second failed. Again we can easily see The first test passed, the second failed. Again we can easily see
the intermediate values used in the assertion, helping us to the intermediate values used in the assertion, helping us to
@ -164,7 +163,7 @@ before performing the test function call. Let's just run it::
================================= FAILURES ================================= ================================= FAILURES =================================
_____________________________ test_needsfiles ______________________________ _____________________________ test_needsfiles ______________________________
tmpdir = local('/Users/hpk/tmp/pytest-20/test_needsfiles0') tmpdir = local('/tmp/pytest-22/test_needsfiles0')
def test_needsfiles(tmpdir): def test_needsfiles(tmpdir):
print tmpdir print tmpdir
@ -173,8 +172,8 @@ before performing the test function call. Let's just run it::
test_tmpdir.py:3: AssertionError test_tmpdir.py:3: AssertionError
----------------------------- Captured stdout ------------------------------ ----------------------------- Captured stdout ------------------------------
/Users/hpk/tmp/pytest-20/test_needsfiles0 /tmp/pytest-22/test_needsfiles0
1 failed in 0.11 seconds 1 failed in 0.01 seconds
Before the test runs, a unique-per-test-invocation temporary directory Before the test runs, a unique-per-test-invocation temporary directory
was created. More info at :ref:`tmpdir handling`. was created. More info at :ref:`tmpdir handling`.

View File

@ -130,7 +130,7 @@ Running it with the report-on-xfail option gives this output::
example $ py.test -rx xfail_demo.py example $ py.test -rx xfail_demo.py
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 6 items collecting ... collected 6 items
xfail_demo.py xxxxxx xfail_demo.py xxxxxx
@ -147,7 +147,7 @@ Running it with the report-on-xfail option gives this output::
XFAIL xfail_demo.py::test_hello6 XFAIL xfail_demo.py::test_hello6
reason: reason reason: reason
======================== 6 xfailed in 0.16 seconds ========================= ======================== 6 xfailed in 0.03 seconds =========================
.. _`evaluation of skipif/xfail conditions`: .. _`evaluation of skipif/xfail conditions`:

View File

@ -28,7 +28,7 @@ Running this would result in a passed test except for the last
$ py.test test_tmpdir.py $ py.test test_tmpdir.py
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 1 items collecting ... collected 1 items
test_tmpdir.py F test_tmpdir.py F
@ -36,7 +36,7 @@ Running this would result in a passed test except for the last
================================= FAILURES ================================= ================================= FAILURES =================================
_____________________________ test_create_file _____________________________ _____________________________ test_create_file _____________________________
tmpdir = local('/Users/hpk/tmp/pytest-21/test_create_file0') tmpdir = local('/tmp/pytest-23/test_create_file0')
def test_create_file(tmpdir): def test_create_file(tmpdir):
p = tmpdir.mkdir("sub").join("hello.txt") p = tmpdir.mkdir("sub").join("hello.txt")
@ -47,7 +47,7 @@ Running this would result in a passed test except for the last
E assert 0 E assert 0
test_tmpdir.py:7: AssertionError test_tmpdir.py:7: AssertionError
========================= 1 failed in 0.07 seconds ========================= ========================= 1 failed in 0.02 seconds =========================
.. _`base temporary directory`: .. _`base temporary directory`:

View File

@ -24,7 +24,7 @@ Running it yields::
$ py.test test_unittest.py $ py.test test_unittest.py
=========================== test session starts ============================ =========================== test session starts ============================
platform darwin -- Python 2.7.1 -- pytest-2.2.2 platform linux2 -- Python 2.7.1 -- pytest-2.2.4
collecting ... collected 1 items collecting ... collected 1 items
test_unittest.py F test_unittest.py F
@ -42,7 +42,7 @@ Running it yields::
test_unittest.py:8: AssertionError test_unittest.py:8: AssertionError
----------------------------- Captured stdout ------------------------------ ----------------------------- Captured stdout ------------------------------
hello hello
========================= 1 failed in 0.15 seconds ========================= ========================= 1 failed in 0.01 seconds =========================
.. _`unittest.py style`: http://docs.python.org/library/unittest.html .. _`unittest.py style`: http://docs.python.org/library/unittest.html

View File

@ -174,14 +174,18 @@ You can specify additional plugins to ``pytest.main``::
# content of myinvoke.py # content of myinvoke.py
import pytest import pytest
class MyPlugin: class MyPlugin:
def pytest_addoption(self, parser): def pytest_sessionfinish(self):
raise pytest.UsageError("hi from our plugin") print("*** test run reporting finishing")
pytest.main(plugins=[MyPlugin()]) pytest.main("-qq", plugins=[MyPlugin()])
Running it will exit quickly:: Running it will show that ``MyPlugin`` was added and its
hook was invoked::
$ python myinvoke.py $ python myinvoke.py
ERROR: hi from our plugin collecting ... collected 0 items
in 0.00 seconds
*** test run reporting finishing
.. include:: links.inc .. include:: links.inc