Pytest 如何为每个测试函数指定 python 版本
Pytest how to specify python version per test function
我正在 运行 进行一些测试,其中一个将异常与其消息进行比较,它看起来像这样,BaseCallback
只是一个 class 具有来自 [= 的抽象方法13=],我正在测试如果没有使用继承定义方法会出现错误,我故意错过了基础 class
强制要求的方法 __call__
from base import BaseCallback
import pytest
def test_base_callback_call():
class MyDummyCallback(BaseCallback):
def __init__(self, metric):
self.metric = metric
def on_step(self, record=None, logbook=None, estimator=None):
print(record)
with pytest.raises(Exception) as excinfo:
callback = MyDummyCallback(metric="fitness")
assert (
str(excinfo.value) == "Can't instantiate abstract class MyDummyCallback with abstract methods __call__ "
)
问题是我同时测试了几个 python 版本,它适用于
python 3.6、3.7 和 3.8 但在 python 3.9 中,断言消息从
“无法使用抽象 methods call 实例化抽象 class MyDummyCallback ”
到“无法用抽象 方法 调用 实例化抽象 class MyDummyCallback “
所以它使我的测试失败,因为缺少 S
有没有办法在此函数中设置有效的 python 版本(比如从 3.6 到 3.8)并为 python 3.9 创建另一个测试?或者处理此类更改的建议方法是什么?
我通过检查 2 条消息中的 1 条来扭转局面,如果至少存在 1 条则测试通过,但感觉有点奇怪
pytest 允许您使用 skipif
装饰器有条件地跳过测试。
@pytest.mark.skipif(sys.version_info >= (3, 9))
def test_base_callback_call():
...
我正在 运行 进行一些测试,其中一个将异常与其消息进行比较,它看起来像这样,BaseCallback
只是一个 class 具有来自 [= 的抽象方法13=],我正在测试如果没有使用继承定义方法会出现错误,我故意错过了基础 class
__call__
from base import BaseCallback
import pytest
def test_base_callback_call():
class MyDummyCallback(BaseCallback):
def __init__(self, metric):
self.metric = metric
def on_step(self, record=None, logbook=None, estimator=None):
print(record)
with pytest.raises(Exception) as excinfo:
callback = MyDummyCallback(metric="fitness")
assert (
str(excinfo.value) == "Can't instantiate abstract class MyDummyCallback with abstract methods __call__ "
)
问题是我同时测试了几个 python 版本,它适用于 python 3.6、3.7 和 3.8 但在 python 3.9 中,断言消息从 “无法使用抽象 methods call 实例化抽象 class MyDummyCallback ” 到“无法用抽象 方法 调用 实例化抽象 class MyDummyCallback “
所以它使我的测试失败,因为缺少 S
有没有办法在此函数中设置有效的 python 版本(比如从 3.6 到 3.8)并为 python 3.9 创建另一个测试?或者处理此类更改的建议方法是什么?
我通过检查 2 条消息中的 1 条来扭转局面,如果至少存在 1 条则测试通过,但感觉有点奇怪
pytest 允许您使用 skipif
装饰器有条件地跳过测试。
@pytest.mark.skipif(sys.version_info >= (3, 9))
def test_base_callback_call():
...