1 new commit in pytest:
https://bitbucket.org/hpk42/pytest/commits/5d0b6123d654/
Changeset: 5d0b6123d654
User: hpk42
Date: 2013-05-28 10:32:54
Summary: allow to specify parametrize inputs as a comma-separated string
add Wouter to changelog and to authors
Affected #: 7 files
diff -r 705c35908c8351c5f30977553f7af48ea3b578fa -r
5d0b6123d6541ad497cc592d72b9ed50a7c26915 AUTHORS
--- a/AUTHORS
+++ b/AUTHORS
@@ -7,6 +7,7 @@
Benjamin Peterson
Floris Bruynooghe
Jason R. Coombs
+Wouter van Ackooy
Samuele Pedroni
Brianna Laugher
Carl Friedrich Bolz
diff -r 705c35908c8351c5f30977553f7af48ea3b578fa -r
5d0b6123d6541ad497cc592d72b9ed50a7c26915 CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -4,6 +4,13 @@
- fix issue 308 - allow to mark/xfail/skip individual parameter sets
when parametrizing. Thanks Brianna Laugher.
+- simplify parametrize() signature: allow to pass a CSV-separated string
+ to specify argnames. For example:
``pytest.mark.parametrize("input,expected", [(1,2), (2,3)])`` is possible now
in addition to the prior
+ ``pytest.mark.parametrize(("input", "expected"), ...)``.
+
+- fix issue 306 - cleanup of -k/-m options to only match markers/test
+ names/keywords respectively. Thanks Wouter van Ackooy.
+
- (experimental) allow fixture functions to be
implemented as context managers. Thanks Andreas Pelme,
Vladimir Keleshev.
diff -r 705c35908c8351c5f30977553f7af48ea3b578fa -r
5d0b6123d6541ad497cc592d72b9ed50a7c26915 _pytest/__init__.py
--- a/_pytest/__init__.py
+++ b/_pytest/__init__.py
@@ -1,2 +1,2 @@
#
-__version__ = '2.4.0.dev2'
+__version__ = '2.4.0.dev3'
diff -r 705c35908c8351c5f30977553f7af48ea3b578fa -r
5d0b6123d6541ad497cc592d72b9ed50a7c26915 _pytest/python.py
--- a/_pytest/python.py
+++ b/_pytest/python.py
@@ -649,7 +649,8 @@
during the collection phase. If you need to setup expensive resources
see about setting indirect=True to do it rather at test setup time.
- :arg argnames: an argument name or a list of argument names
+ :arg argnames: a comma-separated string denoting one or more argument
+ names, or a list/tuple of argument strings.
:arg argvalues: The list of argvalues determines how often a
test is invoked with different argument values. If only one
@@ -688,7 +689,8 @@
argvalues = unwrapped_argvalues
if not isinstance(argnames, (tuple, list)):
- argnames = (argnames,)
+ argnames = [x.strip() for x in argnames.split(",") if x.strip()]
+ if len(argnames) == 1:
argvalues = [(val,) for val in argvalues]
if not argvalues:
argvalues = [(_notexists,) * len(argnames)]
diff -r 705c35908c8351c5f30977553f7af48ea3b578fa -r
5d0b6123d6541ad497cc592d72b9ed50a7c26915 doc/en/parametrize.txt
--- a/doc/en/parametrize.txt
+++ b/doc/en/parametrize.txt
@@ -30,7 +30,7 @@
.. regendoc: wipe
-.. versionadded:: 2.2
+.. versionadded:: 2.2, improved in 2.4
The builtin ``pytest.mark.parametrize`` decorator enables
parametrization of arguments for a test function. Here is a typical example
@@ -39,7 +39,7 @@
# content of test_expectation.py
import pytest
- @pytest.mark.parametrize(("input", "expected"), [
+ @pytest.mark.parametrize("input,expected", [
("3+5", 8),
("2+4", 6),
("6*9", 42),
@@ -47,23 +47,24 @@
def test_eval(input, expected):
assert eval(input) == expected
-Here, the ``@parametrize`` decorator defines three different argument
-sets for the two ``(input, output)`` arguments of the ``test_eval`` function
-which will thus run three times::
+Here, the ``@parametrize`` decorator defines three different ``(input,output)``
+tuples so that that the ``test_eval`` function will run three times using
+them in turn::
$ py.test
- =========================== test session starts
============================
- platform linux2 -- Python 2.7.3 -- pytest-2.3.5
+ ============================= test session starts
==============================
+ platform linux2 -- Python 2.7.3 -- pytest-2.4.0.dev3
+ plugins: xdist, cache, cli, pep8, xprocess, cov, capturelog, bdd-splinter,
rerunfailures, instafail, localserver
collected 3 items
test_expectation.py ..F
- ================================= FAILURES
=================================
- ____________________________ test_eval[6*9-42]
_____________________________
+ =================================== FAILURES
===================================
+ ______________________________ test_eval[6*9-42]
_______________________________
input = '6*9', expected = 42
- @pytest.mark.parametrize(("input", "expected"), [
+ @pytest.mark.parametrize("input,expected", [
("3+5", 8),
("2+4", 6),
("6*9", 42),
@@ -74,19 +75,21 @@
E + where 54 = eval('6*9')
test_expectation.py:8: AssertionError
- ==================== 1 failed, 2 passed in 0.01 seconds
====================
+ ====================== 1 failed, 2 passed in 0.02 seconds
======================
-As expected only one pair of input/output values fails the simple test
function.
-And as usual with test function arguments, you can see the ``input`` and
``output`` values in the traceback.
+As designed in this example, only one pair of input/output values fails
+the simple test function. And as usual with test function arguments,
+you can see the ``input`` and ``output`` values in the traceback.
-Note that there ways how you can mark a class or a module,
-see :ref:`mark`.
+Note that you could also use the parametrize marker on a class or a module
+(see :ref:`mark`) which would invoke several functions with the argument sets.
-It is also possible to mark individual test instances within parametrize::
+It is also possible to mark individual test instances within parametrize,
+for example with the builtin ``mark.xfail``::
# content of test_expectation.py
import pytest
- @pytest.mark.parametrize(("input", "expected"), [
+ @pytest.mark.parametrize("input,expected", [
("3+5", 8),
("2+4", 6),
pytest.mark.xfail(("6*9", 42)),
@@ -94,6 +97,27 @@
def test_eval(input, expected):
assert eval(input) == expected
+Let's run this::
+
+ $ py.test
+ ============================= test session starts
==============================
+ platform linux2 -- Python 2.7.3 -- pytest-2.4.0.dev3
+ plugins: xdist, cache, cli, pep8, xprocess, cov, capturelog, bdd-splinter,
rerunfailures, instafail, localserver
+ collected 3 items
+
+ test_expectation.py ..x
+
+ ===================== 2 passed, 1 xfailed in 0.02 seconds
======================
+
+The one parameter set which caused a failure previously now
+shows up as an "xfailed (expected to fail)" test.
+
+.. note::
+
+ In versions prior to 2.4 one needed to specify the argument
+ names as a tuple. This remains valid but the simpler ``"name1,name2,..."``
+ comma-separated-string syntax is now advertised fist because
+ it's easier to write, produces less line noise.
.. _`pytest_generate_tests`:
@@ -140,15 +164,15 @@
$ py.test -q --stringinput="!" test_strings.py
F
- ================================= FAILURES
=================================
- ___________________________ test_valid_string[!]
___________________________
+ =================================== FAILURES
===================================
+ _____________________________ test_valid_string[!]
_____________________________
stringinput = '!'
def test_valid_string(stringinput):
> assert stringinput.isalpha()
- E assert <built-in method isalpha of str object at 0x2ba729dab300>()
- E + where <built-in method isalpha of str object at
0x2ba729dab300> = '!'.isalpha
+ E assert <built-in method isalpha of str object at 0x7fd657390fd0>()
+ E + where <built-in method isalpha of str object at
0x7fd657390fd0> = '!'.isalpha
test_strings.py:3: AssertionError
@@ -160,8 +184,8 @@
$ py.test -q -rs test_strings.py
s
- ========================= short test summary info
==========================
- SKIP [1]
/home/hpk/p/pytest/.tox/regen/local/lib/python2.7/site-packages/_pytest/python.py:974:
got empty parameter set, function test_valid_string at
/tmp/doc-exec-240/test_strings.py:1
+ =========================== short test summary info
============================
+ SKIP [1] /home/hpk/p/pytest/_pytest/python.py:999: got empty parameter
set, function test_valid_string at /tmp/doc-exec-2/test_strings.py:1
For further examples, you might want to look at :ref:`more
parametrization examples <paramexamples>`.
diff -r 705c35908c8351c5f30977553f7af48ea3b578fa -r
5d0b6123d6541ad497cc592d72b9ed50a7c26915 setup.py
--- a/setup.py
+++ b/setup.py
@@ -12,7 +12,7 @@
name='pytest',
description='py.test: simple powerful testing with Python',
long_description = long_description,
- version='2.4.0.dev2',
+ version='2.4.0.dev3',
url='http://pytest.org',
license='MIT license',
platforms=['unix', 'linux', 'osx', 'cygwin', 'win32'],
diff -r 705c35908c8351c5f30977553f7af48ea3b578fa -r
5d0b6123d6541ad497cc592d72b9ed50a7c26915 testing/python/metafunc.py
--- a/testing/python/metafunc.py
+++ b/testing/python/metafunc.py
@@ -221,6 +221,16 @@
"*6 fail*",
])
+ def test_parametrize_CSV(self, testdir):
+ testdir.makepyfile("""
+ import pytest
+ @pytest.mark.parametrize("x, y,", [(1,2), (2,3)])
+ def test_func(x, y):
+ assert x+1 == y
+ """)
+ reprec = testdir.inline_run()
+ reprec.assertoutcome(passed=2)
+
def test_parametrize_class_scenarios(self, testdir):
testdir.makepyfile("""
# same as doc/en/example/parametrize scenario example
Repository URL: https://bitbucket.org/hpk42/pytest/
--
This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
_______________________________________________
pytest-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pytest-commit