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

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

作者头像
wangmcn
发布于 2022-07-26 06:16:20
发布于 2022-07-26 06: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
运行
AI代码解释
复制
#!/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
运行
AI代码解释
复制
#!/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
运行
AI代码解释
复制
#!/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
运行
AI代码解释
复制
#!/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
运行
AI代码解释
复制
#!/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
运行
AI代码解释
复制
#!/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
运行
AI代码解释
复制
#!/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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Pytest 系列(28)- 参数化 parametrize + @allure.title() 动态生成标题
https://www.cnblogs.com/poloyy/category/1690628.html
小菠萝测试笔记
2020/10/30
1.3K0
Pytest 系列(28)- 参数化 parametrize + @allure.title() 动态生成标题
Python测试框架pytest(06)fixture - 依赖、重命名、request、pytestconfig
添加了 @pytest.fixture,如果 fixture 还想依赖其他 fixture,需要用函数传参的方式,不能用 @pytest.mark.usefixtures() 的方式,否则会不生效。
wangmcn
2022/07/26
5550
Python测试框架pytest(06)fixture - 依赖、重命名、request、pytestconfig
Pytest系列(10) - fixture 传参数 request的详细使用
https://www.cnblogs.com/poloyy/category/1690628.html
小菠萝测试笔记
2020/06/09
3K0
Python 自动化测试(三): pytest 参数化测试用例构建
在之前的文章中主要分享了 pytest 的实用特性,接下来讲 Pytest 参数化用例的构建。
霍格沃兹测试开发
2020/10/27
3.1K0
Pytest系列(9) - 参数化@pytest.mark.parametrize
https://www.cnblogs.com/poloyy/category/1690628.html
小菠萝测试笔记
2020/06/09
1.2K0
Pytest系列(9) - 参数化@pytest.mark.parametrize
pytest文档67-在 pytest.mark.parametrize 中使用 fixture
测试用例参数化的时候,使用 pytest.mark.parametrize 参数化传测试数据,如果我们想引用前面 不同fixture 返回的数据当测试用例的入参,目前没好的解决办法。 可以用fixture 参数化 prams 来间接解决这个问题
上海-悠悠
2020/12/17
1.6K0
自动化测试中使用Pytest Fixture?推荐10种常见用法!
Pytest 是一个功能强大的 Python 测试框架,其中的Fixture 是 Pytest 中的一个重要功能。它允许你设置一些特定的测试环境或准备测试数据,这些环境和数据可以在多个测试用例中重复使用。通过使用fixture,你可以避免在每个测试函数中编写重复的设置和清理代码,使得测试更加干净、简洁,并提高代码的可维护性。
测试开发技术
2024/10/11
1890
自动化测试中使用Pytest Fixture?推荐10种常见用法!
pytest学习和使用13-Pytest的fixture如何使用request传入参数?
1 使用场景当我们为了提高用例的复用性,会用到不同的fixture,比如登陆场景;但是如果登陆场景,我们使用不同的账号进行测试,那如何来做?此时不能使用fixture把账号直接写死,需要通过传参的方式来实现。2 传单个参数# -*- coding:utf-8 -*-# 作者:NoamaNelson# 日期:2022/12/27 # 文件名称:test_request.py# 作用:fixture传参# 联系:VX(NoamaNelson)# 博客:https://blog.csdn.net/NoamaNel
虫无涯
2023/02/17
7570
软件测试/测试开发全日制|Pytest测试框架fixture作为参数使用
测试用例参数化的时候,使用 pytest.mark.parametrize() 参数化传测试数据,如果我们想引用前面不同fixture返回的数据当测试用例的入参。这个时候我们就可以用fixture 参数化 prams 来间接解决这个问题,本文就来给大家介绍一下如何使用fixture来实现参数化。
霍格沃兹测试开发Muller老师
2024/01/12
1670
Python测试框架pytest(08)fixture - conftest.py、yield、addfinalizer
conftest.py 文件名称是固定的,pytest 会自动识别该文件,可以理解成一个专门存放 fixture 的配置文件。
wangmcn
2022/07/26
3810
Python测试框架pytest(08)fixture - conftest.py、yield、addfinalizer
Python测试框架pytest(14)用例执行后的几种状态
代码有异常,且和raised的异常类匹配,所以是XFAIL(算测试通过的一种,表示符合期望捕捉到的异常),并不算FAILED
wangmcn
2022/07/26
6200
Python测试框架pytest(14)用例执行后的几种状态
Pytest fixture及conftest详解
最近一段时间准备写一篇《自动化测试框架一键动态切换测试环境》的实践总结,但由于要涉及到pytest fixture相关知识,遂决定先写一篇pytest fixture的基础介绍。
大刚测试开发实战
2022/11/14
1.7K0
Pytest fixture及conftest详解
Pytest 学习(二十五)- 解决pytest参数化测试标题都一样问题
一、前言 使用参数化测试化后,allure的报告如下显示: 源代码如下: # -*- coding: utf-8 -*- # @Time : 2020/12/13 17:27 # @Author
软件测试君
2020/12/22
3360
Python测试框架pytest(17)参数化parametrize
@pytest.mark.parametrize 允许在测试函数或类中定义多组参数和 fixtures。
wangmcn
2022/07/26
7050
Python测试框架pytest(17)参数化parametrize
pytest封神之路第五步 参数化进阶
用过unittest的朋友,肯定知道可以借助DDT实现参数化。用过JMeter的朋友,肯定知道JMeter自带了4种参数化方式(见参考资料)。pytest同样支持参数化,而且很简单很实用。
dongfanger
2020/09/25
1K0
Python测试框架pytest(22)插件 - pytest-xdist(分布式执行)
当测试用例非常多的时候,一条条按顺序执行测试用例,是很浪费测试时间的。这时候就可以用到 pytest-xdist,让自动化测试用例可以分布式执行,从而大大节省测试时间。
wangmcn
2022/07/26
1.2K0
Python测试框架pytest(22)插件 - pytest-xdist(分布式执行)
Python测试框架pytest(23)插件 - pytest-picked、pytest-lazy-fixture
自动化测试用例一般编写完后且又执行通过,都会提交到 git 仓库里。但是每次新增用例后,希望只执行未提交到 git 仓库里的用例。
wangmcn
2022/07/26
3010
Python测试框架pytest(23)插件 - pytest-picked、pytest-lazy-fixture
Python测试框架pytest(04)fixture - 测试用例调用fixture、fixture传递测试数据
setup、teardown 可以实现在执行用例前或结束后加入一些操作,但这种都是针对整个脚本全局的。
wangmcn
2022/07/26
5110
Python测试框架pytest(04)fixture - 测试用例调用fixture、fixture传递测试数据
pytest测试框架系列(3)-fixture和参数化
f ixture翻译过来就是固件装置,主要来配置测试资源,fixture是通过装饰器标注的。
搁浅同学
2022/07/21
9980
pytest测试框架系列(3)-fixture和参数化
Python测试框架pytest(15)skip、skipif、xfail跳过用例
@pytest.mark.skip 可以标记无法在某些平台上运行的测试功能,或者希望失败的测试功能。
wangmcn
2022/07/26
6890
Python测试框架pytest(15)skip、skipif、xfail跳过用例
推荐阅读
相关推荐
Pytest 系列(28)- 参数化 parametrize + @allure.title() 动态生成标题
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验