请考虑参数化的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内置有一些功能可以帮助您吗?