在pytest参数中继续前面的示例

时间:2018-11-03 14:34:41

标签: pytest

请考虑参数化的pytest测试,该测试可重复使用相同的复数 例如多次。为了使示例代码尽可能简单, 我用很长的整数模拟了“复杂”的例子。

from operator import add
from pytest   import mark

parm = mark.parametrize

@parm(' left,       right, result',
      ((9127384955, 1,     9127384956),
       (9127384955, 2,     9127384957),
       (9127384955, 3,     9127384958),
       (9127384955, 4,     9127384959),
       (4729336234, 1,     4729336235),
       (4729336234, 2,     4729336236),
       (4729336234, 3,     4729336237),
       (4729336234, 4,     4729336238),
      ))
def test_one(left, right, result):
    assert add(left, right) == result

前四个(和后四个)示例对left使用完全相同的值,但:

  • 我必须仔细阅读示例以了解这一点

  • 此重复很冗长

我想明确地说,完全一样 该示例已被重用,并且省去了自己重复多次相同示例的麻烦。 (当然,我可以将示例绑定到全局变量,然后使用该变量,但是该变量必须在我的示例集合之外的某个较远的地方进行绑定,并且我想在上下文中查看实际示例而不是在其他地方寻找它。

这是一个实现,使我可以使用我认为完全可以接受的语法对此进行明确表示,但是实现本身却很可怕:它使用全局变量,并且没有机会进行分布式测试执行。 / p>

class idem: pass

@parm(' left,       right, result',
      ((9127384955, 1,     9127384956),
       (  idem    , 2,     9127384957),
       (  idem    , 3,     9127384958),
       (  idem    , 4,     9127384959),
       (4729336234, 1,     4729336235),
       (  idem    , 2,     4729336236),
       (  idem    , 3,     4729336237),
       (  idem    , 4,     4729336238),
      ))
def test_two(left, right, result):
    global previous_left
    if left is idem: left          = previous_left
    else           : previous_left = left
    assert add(left, right) == result

如何以更可靠的方式实施此想法? pytest内置有一些功能可以帮助您吗?

0 个答案:

没有答案