python - 参数化 pytest - 也将参数传递给 setup 和 teardown
问题描述
如何将相同的参数传递给设置和拆卸函数,就像我传递给测试函数一样?
import pytest
test_data = [("3+5", 8), ("2+4", 6), ("6*9", 42)]
@pytest.mark.parametrize("test_input,expected", test_data)
def test_eval(test_input, expected):
assert eval(test_input) == expected
def setup():
print("setup")
def teardown():
print("teardown")
在我的真实用例中,我将根据传递给测试函数的参数初始化和清理数据库。
我已经阅读了示例,但似乎没有一个涵盖所有设置、测试和拆卸都被参数化的情况。
解决方案
用于fixture
设置和拆卸,您可以将参数发送给它
test_data = [("3+5", 8), ("2+4", 6), ("6*9", 42)]
@pytest.fixture(scope='function', autouse=True)
def setup_and_teardown(test_input, expected):
print("setup")
print('Parameters:', test_input, expected)
yield
print("teardown")
@pytest.mark.parametrize("test_input,expected", test_data)
def test_eval(test_input, expected):
assert eval(test_input) == expected
print("*************************************")
输出:
setup
test_input: 3+5 expected: 8
PASSED [ 33%]*************************************
teardown
setup
test_input: 2+4 expected: 6
PASSED [ 66%]*************************************
teardown
setup
test_input: 6*9 expected: 42
FAILED [100%]
Tests\Example_test.py:34 (test_eval[6*9-42])
54 != 42
Expected :42
Actual :54
<Click to see difference>
test_input = '6*9', expected = 42
@pytest.mark.parametrize("test_input,expected", test_data)
def test_eval(test_input, expected):
> assert eval(test_input) == expected
E assert 54 == 42
推荐阅读
- c - 为什么子进程管道显示在具有不同管道详细信息的父进程中
- react-native - 从 saga 中的 socket.io 事件中发送动作
- android - 应为 BEGIN_OBJECT,但在第 1 行第 1 列应用程序崩溃时为 STRING
- laravel - 背景图像在 foreach 循环中不起作用
- r - Removing tick marks, tick=FALSE do not seem to work
- javascript - Magento - 前端和后端没有 js 文件
- c# - 如何在 .net 核心中添加 ws-security 标头?
- angular - Angular - 如何使用自定义输入组件子组件测试容器组件?
- llvm - Enable a llvm pass for Os but not O2
- java - 我如何在java中发送带有“soap”的文件