【python学习】15.参数化用例

pytest可使用pytest.mark.parametrize 对方法进行参数化

代码示例

import pytest

search_list = ['java', 'C#', 'go']


# 单参数
@pytest.mark.parametrize('name', search_list)
def test_search(name):
    assert name in search_list


# 参数化传入多个参数
# 需注意,参数化的名字需要同  方法参数名一致
# 传入多组参数,使用列表传入,参数用列表、或元祖的方式传入
# 给方法命名,使用ids,ids 参数个数和 参数数量一致
@pytest.mark.parametrize('test,expected', [('3+5', 7), ('1+9', 10), ('2+5', 7), ('7+9', 16)],
                         ids=['测试1', '测试2', '测试3', '测试4'])
def test_mark_more(test, expected):
    # eval 把字符串转换成 表达式
    assert eval(test) == expected

# 笛卡尔积参数
@pytest.mark.parametrize('a',[1,2,3,4],ids=['变量a=1', '变量a=2', '变量a=3', '变量a=4'])
@pytest.mark.parametrize('b',['a','b','c','d'],ids=['变量b=a', '变量b=b', '变量b=c', '变量b=d'])
def test_dikaer(a,b):
    print(f'变量1{a},变量2{b}')

对于ids执行后,不显示中文 的问题,可在testcase目录下
新建一个文件:conftest.py,加上后,再执行就可以显示中文了
代码如下,

from typing import List
def pytest_collection_modifyitems(
    session: "Session", config: "Config", items: List["Item"]
) -> None:
    for item in items:
        item.name = item.name.encode('utf-8').decode('unicode-escape')
        item._nodeid = item.nodeid.encode('utf-8').decode('unicode-escape')
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容