fix issue561 example adapted to python3.
This commit is contained in:
		
							parent
							
								
									672e42e558
								
							
						
					
					
						commit
						e98f77037e
					
				|  | @ -1,3 +1,8 @@ | |||
| NEXT | ||||
| ----------- | ||||
| 
 | ||||
| - fixed issue561: adapt autouse fixture example for python3. | ||||
| 
 | ||||
| 2.6.1 | ||||
| ----------------------------------- | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,2 +1,2 @@ | |||
| # | ||||
| __version__ = '2.6.1' | ||||
| __version__ = '2.6.2.dev1' | ||||
|  |  | |||
|  | @ -75,25 +75,26 @@ will discover and call the :py:func:`@pytest.fixture <_pytest.python.fixture>` | |||
| marked ``smtp`` fixture function.  Running the test looks like this:: | ||||
| 
 | ||||
|     $ py.test test_smtpsimple.py | ||||
|     =========================== test session starts ============================ | ||||
|     platform linux -- Python 3.4.0 -- py-1.4.23 -- pytest-2.6.1 | ||||
|     ============================= test session starts ============================== | ||||
|     platform linux2 -- Python 2.7.6 -- py-1.4.23 -- pytest-2.6.1 | ||||
|     collected 1 items | ||||
|      | ||||
|     test_smtpsimple.py F | ||||
|      | ||||
|     ================================= FAILURES ================================= | ||||
|     ________________________________ test_ehlo _________________________________ | ||||
|     =================================== FAILURES =================================== | ||||
|     __________________________________ test_ehlo ___________________________________ | ||||
|      | ||||
|     smtp = <smtplib.SMTP object at 0x2ba44047c390> | ||||
|     smtp = <smtplib.SMTP instance at 0x7ff89e00d7e8> | ||||
|      | ||||
|         def test_ehlo(smtp): | ||||
|             response, msg = smtp.ehlo() | ||||
|             assert response == 250 | ||||
|     >       assert "merlinux" in msg | ||||
|     E       TypeError: Type str doesn't support the buffer API | ||||
|             assert "merlinux" in msg | ||||
|     >       assert 0 # for demo purposes | ||||
|     E       assert 0 | ||||
|      | ||||
|     test_smtpsimple.py:11: TypeError | ||||
|     ========================= 1 failed in 0.18 seconds ========================= | ||||
|     test_smtpsimple.py:12: AssertionError | ||||
|     =========================== 1 failed in 0.17 seconds =========================== | ||||
| 
 | ||||
| In the failure traceback we see that the test function was called with a | ||||
| ``smtp`` argument, the ``smtplib.SMTP()`` instance created by the fixture | ||||
|  | @ -192,27 +193,28 @@ We deliberately insert failing ``assert 0`` statements in order to | |||
| inspect what is going on and can now run the tests:: | ||||
| 
 | ||||
|     $ py.test test_module.py | ||||
|     =========================== test session starts ============================ | ||||
|     platform linux -- Python 3.4.0 -- py-1.4.23 -- pytest-2.6.1 | ||||
|     ============================= test session starts ============================== | ||||
|     platform linux2 -- Python 2.7.6 -- py-1.4.23 -- pytest-2.6.1 | ||||
|     collected 2 items | ||||
|      | ||||
|     test_module.py FF | ||||
|      | ||||
|     ================================= FAILURES ================================= | ||||
|     ________________________________ test_ehlo _________________________________ | ||||
|     =================================== FAILURES =================================== | ||||
|     __________________________________ test_ehlo ___________________________________ | ||||
|      | ||||
|     smtp = <smtplib.SMTP object at 0x2b37ace44fd0> | ||||
|     smtp = <smtplib.SMTP instance at 0x7f36c67e3ab8> | ||||
|      | ||||
|         def test_ehlo(smtp): | ||||
|             response = smtp.ehlo() | ||||
|             assert response[0] == 250 | ||||
|     >       assert "merlinux" in response[1] | ||||
|     E       TypeError: Type str doesn't support the buffer API | ||||
|             assert "merlinux" in response[1] | ||||
|     >       assert 0  # for demo purposes | ||||
|     E       assert 0 | ||||
|      | ||||
|     test_module.py:5: TypeError | ||||
|     ________________________________ test_noop _________________________________ | ||||
|     test_module.py:6: AssertionError | ||||
|     __________________________________ test_noop ___________________________________ | ||||
|      | ||||
|     smtp = <smtplib.SMTP object at 0x2b37ace44fd0> | ||||
|     smtp = <smtplib.SMTP instance at 0x7f36c67e3ab8> | ||||
|      | ||||
|         def test_noop(smtp): | ||||
|             response = smtp.noop() | ||||
|  | @ -221,7 +223,7 @@ inspect what is going on and can now run the tests:: | |||
|     E       assert 0 | ||||
|      | ||||
|     test_module.py:11: AssertionError | ||||
|     ========================= 2 failed in 0.18 seconds ========================= | ||||
|     =========================== 2 failed in 0.17 seconds =========================== | ||||
| 
 | ||||
| You see the two ``assert 0`` failing and more importantly you can also see | ||||
| that the same (module-scoped) ``smtp`` object was passed into the two | ||||
|  | @ -269,7 +271,7 @@ Let's execute it:: | |||
|     $ py.test -s -q --tb=no | ||||
|     FFteardown smtp | ||||
|      | ||||
|     2 failed in 0.22 seconds | ||||
|     2 failed in 0.16 seconds | ||||
| 
 | ||||
| We see that the ``smtp`` instance is finalized after the two | ||||
| tests finished execution.  Note that if we decorated our fixture | ||||
|  | @ -309,8 +311,9 @@ We use the ``request.module`` attribute to optionally obtain an | |||
| again, nothing much has changed:: | ||||
| 
 | ||||
|     $ py.test -s -q --tb=no | ||||
|     FF | ||||
|     2 failed in 0.19 seconds | ||||
|     FFteardown smtp | ||||
|      | ||||
|     2 failed in 0.17 seconds | ||||
| 
 | ||||
| Let's quickly create another test module that actually sets the | ||||
| server URL in its module namespace:: | ||||
|  | @ -326,11 +329,11 @@ Running it:: | |||
| 
 | ||||
|     $ py.test -qq --tb=short test_anothersmtp.py | ||||
|     F | ||||
|     ================================= FAILURES ================================= | ||||
|     ______________________________ test_showhelo _______________________________ | ||||
|     =================================== FAILURES =================================== | ||||
|     ________________________________ test_showhelo _________________________________ | ||||
|     test_anothersmtp.py:5: in test_showhelo | ||||
|         assert 0, smtp.helo() | ||||
|     E   AssertionError: (250, b'mail.python.org') | ||||
|     E   AssertionError: (250, 'hq.merlinux.eu') | ||||
| 
 | ||||
| voila! The ``smtp`` fixture function picked up our mail server name | ||||
| from the module namespace. | ||||
|  | @ -374,21 +377,22 @@ So let's just do another run:: | |||
| 
 | ||||
|     $ py.test -q test_module.py | ||||
|     FFFF | ||||
|     ================================= FAILURES ================================= | ||||
|     __________________________ test_ehlo[merlinux.eu] __________________________ | ||||
|     =================================== FAILURES =================================== | ||||
|     ____________________________ test_ehlo[merlinux.eu] ____________________________ | ||||
|      | ||||
|     smtp = <smtplib.SMTP object at 0x2b5a2bc0e048> | ||||
|     smtp = <smtplib.SMTP instance at 0x7f4fdf04cea8> | ||||
|      | ||||
|         def test_ehlo(smtp): | ||||
|             response = smtp.ehlo() | ||||
|             assert response[0] == 250 | ||||
|     >       assert "merlinux" in response[1] | ||||
|     E       TypeError: Type str doesn't support the buffer API | ||||
|             assert "merlinux" in response[1] | ||||
|     >       assert 0  # for demo purposes | ||||
|     E       assert 0 | ||||
|      | ||||
|     test_module.py:5: TypeError | ||||
|     __________________________ test_noop[merlinux.eu] __________________________ | ||||
|     test_module.py:6: AssertionError | ||||
|     ____________________________ test_noop[merlinux.eu] ____________________________ | ||||
|      | ||||
|     smtp = <smtplib.SMTP object at 0x2b5a2bc0e048> | ||||
|     smtp = <smtplib.SMTP instance at 0x7f4fdf04cea8> | ||||
|      | ||||
|         def test_noop(smtp): | ||||
|             response = smtp.noop() | ||||
|  | @ -397,22 +401,22 @@ So let's just do another run:: | |||
|     E       assert 0 | ||||
|      | ||||
|     test_module.py:11: AssertionError | ||||
|     ________________________ test_ehlo[mail.python.org] ________________________ | ||||
|     __________________________ test_ehlo[mail.python.org] __________________________ | ||||
|      | ||||
|     smtp = <smtplib.SMTP object at 0x2b5a2bdb3ac8> | ||||
|     smtp = <smtplib.SMTP instance at 0x7f4fdf07c290> | ||||
|      | ||||
|         def test_ehlo(smtp): | ||||
|             response = smtp.ehlo() | ||||
|             assert response[0] == 250 | ||||
|     >       assert "merlinux" in response[1] | ||||
|     E       TypeError: Type str doesn't support the buffer API | ||||
|     E       assert 'merlinux' in 'mail.python.org\nSIZE 25600000\nETRN\nSTARTTLS\nENHANCEDSTATUSCODES\n8BITMIME\nDSN\nSMTPUTF8' | ||||
|      | ||||
|     test_module.py:5: TypeError | ||||
|     -------------------------- Captured stdout setup --------------------------- | ||||
|     finalizing <smtplib.SMTP object at 0x2b5a2bc0e048> | ||||
|     ________________________ test_noop[mail.python.org] ________________________ | ||||
|     test_module.py:5: AssertionError | ||||
|     ---------------------------- Captured stdout setup ----------------------------- | ||||
|     finalizing <smtplib.SMTP instance at 0x7f4fdf04cea8> | ||||
|     __________________________ test_noop[mail.python.org] __________________________ | ||||
|      | ||||
|     smtp = <smtplib.SMTP object at 0x2b5a2bdb3ac8> | ||||
|     smtp = <smtplib.SMTP instance at 0x7f4fdf07c290> | ||||
|      | ||||
|         def test_noop(smtp): | ||||
|             response = smtp.noop() | ||||
|  | @ -421,7 +425,7 @@ So let's just do another run:: | |||
|     E       assert 0 | ||||
|      | ||||
|     test_module.py:11: AssertionError | ||||
|     4 failed in 6.25 seconds | ||||
|     4 failed in 6.26 seconds | ||||
| 
 | ||||
| We see that our two test functions each ran twice, against the different | ||||
| ``smtp`` instances.  Note also, that with the ``mail.python.org`` | ||||
|  | @ -460,14 +464,14 @@ Here we declare an ``app`` fixture which receives the previously defined | |||
| ``smtp`` fixture and instantiates an ``App`` object with it.  Let's run it:: | ||||
| 
 | ||||
|     $ py.test -v test_appsetup.py | ||||
|     =========================== test session starts ============================ | ||||
|     platform linux -- Python 3.4.0 -- py-1.4.23 -- pytest-2.6.1 -- /home/hpk/p/pytest/.tox/regen/bin/python3.4 | ||||
|     ============================= test session starts ============================== | ||||
|     platform linux2 -- Python 2.7.6 -- py-1.4.23 -- pytest-2.6.1 -- /home/hpk/venv/0/bin/python | ||||
|     collecting ... collected 2 items | ||||
|      | ||||
|     test_appsetup.py::test_smtp_exists[merlinux.eu] PASSED | ||||
|     test_appsetup.py::test_smtp_exists[mail.python.org] PASSED | ||||
|      | ||||
|     ========================= 2 passed in 5.90 seconds ========================= | ||||
|     =========================== 2 passed in 5.46 seconds =========================== | ||||
| 
 | ||||
| Due to the parametrization of ``smtp`` the test will run twice with two | ||||
| different ``App`` instances and respective smtp servers.  There is no | ||||
|  | @ -505,7 +509,7 @@ to show the setup/teardown flow:: | |||
|     @pytest.fixture(scope="module", params=["mod1", "mod2"]) | ||||
|     def modarg(request): | ||||
|         param = request.param | ||||
|         print "create", param | ||||
|         print ("create", param) | ||||
|         def fin(): | ||||
|             print ("fin %s" % param) | ||||
|         return param | ||||
|  | @ -515,30 +519,39 @@ to show the setup/teardown flow:: | |||
|         return request.param | ||||
| 
 | ||||
|     def test_0(otherarg): | ||||
|         print "  test0", otherarg | ||||
|         print ("  test0", otherarg) | ||||
|     def test_1(modarg): | ||||
|         print "  test1", modarg | ||||
|         print ("  test1", modarg) | ||||
|     def test_2(otherarg, modarg): | ||||
|         print "  test2", otherarg, modarg | ||||
|         print ("  test2", otherarg, modarg) | ||||
| 
 | ||||
| Let's run the tests in verbose mode and with looking at the print-output:: | ||||
| 
 | ||||
|     $ py.test -v -s test_module.py | ||||
|     =========================== test session starts ============================ | ||||
|     platform linux -- Python 3.4.0 -- py-1.4.23 -- pytest-2.6.1 -- /home/hpk/p/pytest/.tox/regen/bin/python3.4 | ||||
|     collecting ... collected 0 items / 1 errors | ||||
|     ============================= test session starts ============================== | ||||
|     platform linux2 -- Python 2.7.6 -- py-1.4.23 -- pytest-2.6.1 -- /home/hpk/venv/0/bin/python | ||||
|     collecting ... collected 8 items | ||||
|      | ||||
|     ================================== ERRORS ================================== | ||||
|     _____________________ ERROR collecting test_module.py ______________________ | ||||
|     /home/hpk/p/pytest/.tox/regen/lib/python3.4/site-packages/_pytest/python.py:463: in _importtestmodule | ||||
|         mod = self.fspath.pyimport(ensuresyspath=True) | ||||
|     /home/hpk/p/pytest/.tox/regen/lib/python3.4/site-packages/py/_path/local.py:620: in pyimport | ||||
|         __import__(modname) | ||||
|     E     File "/tmp/doc-exec-184/test_module.py", line 6 | ||||
|     E       print "create", param | ||||
|     E                    ^ | ||||
|     E   SyntaxError: invalid syntax | ||||
|     ========================= 1 error in 0.03 seconds ========================== | ||||
|     test_module.py::test_0[1] ('  test0', 1) | ||||
|     PASSED | ||||
|     test_module.py::test_0[2] ('  test0', 2) | ||||
|     PASSED | ||||
|     test_module.py::test_1[mod1] ('create', 'mod1') | ||||
|     ('  test1', 'mod1') | ||||
|     PASSED | ||||
|     test_module.py::test_2[1-mod1] ('  test2', 1, 'mod1') | ||||
|     PASSED | ||||
|     test_module.py::test_2[2-mod1] ('  test2', 2, 'mod1') | ||||
|     PASSED | ||||
|     test_module.py::test_1[mod2] ('create', 'mod2') | ||||
|     ('  test1', 'mod2') | ||||
|     PASSED | ||||
|     test_module.py::test_2[1-mod2] ('  test2', 1, 'mod2') | ||||
|     PASSED | ||||
|     test_module.py::test_2[2-mod2] ('  test2', 2, 'mod2') | ||||
|     PASSED | ||||
|      | ||||
|     =========================== 8 passed in 0.01 seconds =========================== | ||||
| 
 | ||||
| You can see that the parametrized module-scoped ``modarg`` resource caused | ||||
| an ordering of test execution that lead to the fewest possible "active" resources. The finalizer for the ``mod1`` parametrized resource was executed | ||||
|  |  | |||
							
								
								
									
										2
									
								
								setup.py
								
								
								
								
							
							
						
						
									
										2
									
								
								setup.py
								
								
								
								
							|  | @ -27,7 +27,7 @@ def main(): | |||
|         name='pytest', | ||||
|         description='pytest: simple powerful testing with Python', | ||||
|         long_description=long_description, | ||||
|         version='2.6.1', | ||||
|         version='2.6.2.dev1', | ||||
|         url='http://pytest.org', | ||||
|         license='MIT license', | ||||
|         platforms=['unix', 'linux', 'osx', 'cygwin', 'win32'], | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue