我正在尝试使用pytest和模块化夹具来实现一个非常基本的简单性能测试。
我已经有了一个时间跟踪的固定装置:
@pytest.fixture
def time_tracker():
tick = datetime.now()
yield
tock = datetime.now()
diff = tock - tick
print(f"n runtime: {diff.total_seconds()}")
return diff
我试着做一些类似的事情:
@pytest.fixture
def performance_testing(time_tracking):
diff = time_tracking
if diff > timedelta(seconds=30):
raise ValueError("test is taking too long")
但我对收益率有问题。我认为,当我从time_tracker中让步时,上下文会返回到调用函数,即performance_testing,而不是测试函数本身。
我的错误:
@pytest.fixture
def performance_testing(time_tracker):
diff = time_tracker
> if diff > timedelta(seconds=30):
E TypeError: '>' not supported between instances of 'NoneType' and 'datetime.timedelta'
我知道我可以通过复制代码和添加if diff > timedelta(30)
逻辑来很好地实现这一点,但我想使用模块化固定装置。
这可能吗?如果没有,是否有一个优雅的";pytest";这样做的方式?此外,我对下载pytest插件不感兴趣。
yield
类似于return
,可以采用参数。只写yield tick
而不写yield
。