前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Python测试框架pytest(07)fixture - 参数化params、和parametrize结合、ids

Python测试框架pytest(07)fixture - 参数化params、和parametrize结合、ids

作者头像
wangmcn
发布2022-07-26 14:16:20
发布2022-07-26 14:16:20
50400
代码可运行
举报
文章被收录于专栏:AllTests软件测试AllTests软件测试
运行总次数:0
代码可运行

Python测试框架pytest(07)

fixture

参数化params、和parametrize结合、ids

目录

  • 1、fixture参数化params
  • 2、fixture和parametrize结合的参数化
  • 3、fixture中的ids

1、fixture参数化params

params 是一个列表,用来存放我们要参数化的值。

执行每个值的列表,可以通过 request.param

1、创建test_fixture_4.py文件

脚本代码:

代码语言:javascript
代码运行次数:0
运行
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
微信公众号:AllTests软件测试
"""
import pytest

test_param = [(1,2), ("a","b"), (False,False), (int,int)]
@pytest.fixture(params=test_param)
def fixturefun(request):
    test = request.param
    return test

def test_case(fixturefun):
    assert fixturefun[0] == fixturefun[1]

2、运行结果:

执行4次。

2、fixture和parametrize结合的参数化

1、创建test_fixture_5.py文件

脚本代码:

代码语言:javascript
代码运行次数:0
运行
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
微信公众号:AllTests软件测试
"""
import pytest

test_param = [(1,2), ("a","b"), (False,False), (int,int)]
@pytest.fixture()
def fixturefun(request):
    test = request.param
    return test

@pytest.mark.parametrize("fixturefun", test_param, indirect=True) # indirect=True,声明fixturefun不是参数,而是一个函数。
def test_case(fixturefun):
    assert fixturefun[0] == fixturefun[1]

2、运行结果:

(1)传单个参数

1、创建test_fixture_8.py文件

脚本代码:

代码语言:javascript
代码运行次数:0
运行
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
微信公众号:AllTests软件测试
"""
import pytest

data = ["AllTests", "wangmcn"]
ids = [f"test_name: {name}" for name in data]

@pytest.fixture()
def login(request):
    name = request.param
    print(f"账号:{name}")
    return name

@pytest.mark.parametrize("login", data, ids=ids, indirect=True)
def test_case(login):
    print(f"测试用例登录账号:{login}")

@pytest.mark.parametrize添加indirect=True参数是为了把login当成一个函数去执行,而不是一个参数,并且将data当做参数传入函数。

函数test_case(login),这里的login是获取fixture返回的值。

2、运行结果:

(2)多个参数(字典)

1、创建test_fixture_9.py文件

脚本代码:

代码语言:javascript
代码运行次数:0
运行
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
微信公众号:AllTests软件测试
"""
import pytest

data = [
    {"name": "AllTests", "pwd": "123456"},
    {"name": "wangmcn", "pwd": "admin"}
]

@pytest.fixture()
def login(request):
    param = request.param
    print(f"账号:{param['name']},密码:{param['pwd']}")
    return param

@pytest.mark.parametrize("login", data, indirect=True)
def test_case(login):
    print(f"测试用例登录账号:{login['name']},测试用例登录密码:{login['pwd']}")

2、运行结果:

(3)多个fixture(一个装饰器)

1、创建test_fixture_10.py文件

脚本代码:

代码语言:javascript
代码运行次数:0
运行
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
微信公众号:AllTests软件测试
"""
import pytest

data = [
    ("AllTests", "123456"),
    ("wangmcn", "admin")
]

@pytest.fixture(scope="module")
def input_name(request):
    name = request.param
    print("账号:%s" % name)
    return name

@pytest.fixture(scope="module")
def input_pwd(request):
    pwd = request.param
    print("密码:%s" % pwd)
    return pwd

@pytest.mark.parametrize("input_name, input_pwd", data, indirect=True)
def test_case(input_name, input_pwd):
    print("测试用例登录账号密码:", input_name, input_pwd)

2、运行结果:

(4)多个fixture(叠加装饰器)

1、创建test_fixture_11.py文件

脚本代码:

代码语言:javascript
代码运行次数:0
运行
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
微信公众号:AllTests软件测试
"""
import pytest

name = ["AllTests", "wangmcn"]
pwd = ["123456", "admin"]

@pytest.fixture(scope="function")
def input_name(request):
    param_name = request.param
    print("账号:%s" % param_name)
    return param_name

@pytest.fixture(scope="function")
def input_pwd(request):
    param_pwd = request.param
    print("密码:%s" % param_pwd)
    return param_pwd

@pytest.mark.parametrize("input_name", name, indirect=True)
@pytest.mark.parametrize("input_pwd", pwd, indirect=True)
def test_case(input_name, input_pwd):
    print("测试用例登录账号密码:", input_name, input_pwd)

测试用例数:2*2=4条

2、运行结果:

3、fixture中的ids

ids 也是要结合着 params 一起使用的。当有多个 params 时,针对每一个 param,可以指定一个 id,然后这个 id 会变成测试用例名字的一部分。

1、创建test_fixture_6.py文件

脚本代码:

代码语言:javascript
代码运行次数:0
运行
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
微信公众号:AllTests软件测试
"""
import pytest

@pytest.fixture(params=["参数1", "参数2"], ids=["id-01", "id-02"])
def fixturefun(request):
    return request.param

def test_case(fixturefun):
    print(fixturefun)

2、运行结果:

可以看到用例带了id:id-01、id-02

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AllTests软件测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档