我正在嘗試迭代pytest函式,后期系結的問題pytest僅將測驗應用于最后一個函式。
對于一個簡化的示例,我撰寫了以下test.py檔案:
import pytest
def func_1(x):
return (x 10)
def func_2(y):
return (y-10)
func_1_test_cases = {'func_1': (10, 20)}
func_2_test_cases = {'func_2': (10, 0)}
# Iterating over the functions
for func in ['func_1', 'func_2']:
@pytest.mark.parametrize('param, expected',
globals()[func '_test_cases'].values(),
ids=list(globals()[func
'_test_cases'].keys()))
def test(param, expected):
eval(func '(param) == expected')
我閱讀了有關后期系結問題的更多資訊,并應用了以下建議:
def test(param, expected, func=func):
eval(func '(param) == expected')
使用命令時:
pytest test.py -v
pytest報告僅收集 list( func_2) 中的最后一個函式:
插件: timeout-1.4.2, anyio-2.2.0, pudb-0.7.0 收集了 1 項
1.py::test[
func_2] 已通過 [100%]================================================== ============================ 1 在 0.01 秒內通過 ================== ================================================== ==========
func_1從未收集過
使用pytest. 我希望pytest報告收集兩個函式并回傳它們的狀態。我真的需要解決這個問題。
uj5u.com熱心網友回復:
這不會直接回答您關于定義多個具有相同名稱的測驗的問題,但是對于您發布的特定示例,將函式本身作為測驗引數之一包含會容易得多:
import pytest
def func_1(x):
return (x 10)
def func_2(y):
return (y-10)
@pytest.mark.parametrize(
'func,param,expected', [
pytest.param(func_1, 10, 20, id='func_1'),
pytest.param(func_2, 10, 0, id='func_2'),
],
)
def test(func, param, expected):
assert func(param) == expected
請注意:您的測驗函式沒有assert,因此無論eval(func '(param) == expected')是真還是假,它都會通過。
uj5u.com熱心網友回復:
受到 Kale 回答的啟發,我相信沒有什么好方法可以遍歷pytest parametize裝飾器(如果我錯了,希望有人糾正我)。
唯一實用的解決方案是在引數串列中包含函式 ID。
這是一個接近我想要的修改后的代碼。
import pytest
def func_1(x):
return (x 10)
def func_2(y):
return (y-10)
func_test_cases = {'func_1': (10, 20, 'func_1'), 'func_2': (10, 3, 'func_2')}
@pytest.mark.parametrize('param, expected, func',
func_test_cases.values(), ids=func_test_cases.keys())
def test(param, expected, func):
assert eval(func '(param) == expected')
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/350406.html
上一篇:Angular:如何為Angular應用程式中的功能創建測驗模塊?
下一篇:級聯從SQL中的多個表中洗掉行
