前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >pytest学习和使用13-Pytest的fixture如何使用request传入参数?

pytest学习和使用13-Pytest的fixture如何使用request传入参数?

原创
作者头像
虫无涯
发布于 2023-02-17 02:44:01
发布于 2023-02-17 02:44:01
75700
代码可运行
举报
文章被收录于专栏:全栈测试技术全栈测试技术
运行总次数:0
代码可运行

1 使用场景

  • 当我们为了提高用例的复用性,会用到不同的fixture,比如登陆场景;
  • 但是如果登陆场景,我们使用不同的账号进行测试,那如何来做?
  • 此时不能使用fixture把账号直接写死,需要通过传参的方式来实现。

2 传单个参数

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2022/12/27 
# 文件名称:test_request.py
# 作用:fixture传参
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import pytest

# 传一个参数
@pytest.fixture()
def user_login(request):
    user_name = request.param
    return user_name


data = ["user_name01", "user_name02"]


@pytest.mark.parametrize("user_login", data, indirect=True)
def test_login(user_login):
    print(f"登陆用户的名称为:{user_login}")


if __name__ == '__main__':
    pytest.main(["-s", "test_request.py"])
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
test_request.py::test_login[user_name01] PASSED
[ 50%]登陆用户的名称为:user_name01

test_request.py::test_login[user_name02] PASSED   
[100%]登陆用户的名称为:user_name02


============================== 2 passed in 0.03s ==============================
  • 其中indirect=True 参数是为了把 user_login 当成一个函数去执行,而不是一个参数,并且将data当做参数传入函数。

3 传多个参数

  • 传多个参数,需要通过字典去传。
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2022/12/27 
# 文件名称:test_request01.py
# 作用:fixture传参
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import pytest

# 传多个参数
@pytest.fixture()
def user_login(request):
    user_name = request.param
    return user_name


data = [{"user_name": "user_name01", "passwd": "passwd01"},
        {"user_name": "user_name02", "passwd": "passwd02"}
        ]


@pytest.mark.parametrize("user_login", data, indirect=True)
def test_login(user_login):
    print(f"登陆用户的名称为:{user_login['user_name']},登陆的密码: {user_login['passwd']}")


if __name__ == '__main__':
    pytest.main(["-s", "test_request01.py"])
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
test_request01.py::test_login[user_login0] PASSED   
[ 50%]登陆用户的名称为:user_name01,登陆的密码: passwd01

test_request01.py::test_login[user_login1] PASSED   
[100%]登陆用户的名称为:user_name02,登陆的密码: passwd02


============================== 2 passed in 0.04s ==============================

4 多个fixtrue

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# -*- coding:utf-8 -*-
# 作者:NoamaNelson
# 日期:2022/12/27 
# 文件名称:test_request02.py
# 作用:fixture传参
# 联系:VX(NoamaNelson)
# 博客:https://blog.csdn.net/NoamaNelson

import pytest

# 传多个fixture
@pytest.fixture()
def user_name(request):
    name = request.param
    return name

@pytest.fixture()
def user_pwd(request):
    pwd = request.param
    return pwd


data = [("user_name01", "pwd01"), ("user_name02", "pwd02")]


@pytest.mark.parametrize("user_name, user_pwd", data, indirect=True)
def test_login(user_name, user_pwd):
    print(f"登陆信息为{user_name}, {user_pwd}")


if __name__ == '__main__':
    pytest.main(["-s", "test_request02.py"])
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
test_request02.py::test_login[user_name01-pwd01] PASSED      
[ 50%]登陆信息为user_name01, pwd01

test_request02.py::test_login[user_name02-pwd02] PASSED      
[100%]登陆信息为user_name02, pwd02


============================== 2 passed in 0.03s ==============================

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Pytest fixture之request传参
Pytest中我们经常会用到数据参数化,我们来介绍下装饰器@pytest.fixture()配合request传参的使用
王大力测试进阶之路
2019/11/28
8710
pytest文档14-函数传参和fixture传参数request
为了提高代码的复用性,我们在写用例的时候,会用到函数,然后不同的用例去调用这个函数。 比如登录操作,大部分的用例都会先登录,那就需要把登录单独抽出来写个函数,其它用例全部的调用这个登陆函数就行。 但是登录的账号不能写死,有时候我想用账号1去登录,执行用例1,用账号2去登录执行用例2,所以需要对函数传参。
上海-悠悠
2018/09/29
2.6K0
pytest学习和使用12-Unittest和Pytest参数化详解
1 Unittest参数化1.1 ddt1.1.1 简介数据驱动ddt可以实现测试数据与测试脚本的分离;通过ddt来将测试数据加载到脚本中;1.1.2 说明测试数据为嵌套字典的列表;测试类前加修饰@ddt;测试用例前加修饰@data()运行后用例会自动加载成多个单独的用例。1.1.3 安装pip install ddt1.1.4 版本信息C:\Users\Administrator>pip show ddtName: ddtVersion: 1.4.2Summary: Data-Driven/Decorat
虫无涯
2023/02/17
5840
Pytest系列(10) - fixture 传参数 request的详细使用
https://www.cnblogs.com/poloyy/category/1690628.html
小菠萝测试笔记
2020/06/09
3K0
Pytest和Allure测试框架-超详细版+实战
:1. 简单灵活,容易上手;支持参数化; 测试用例的skip和xfail 处理; 2. 能够支持简单的单元测试和复杂的功能测试,还可以用来做 selenium/appium等自动化测试、接口自动化测试 (pytest+requests); 3. pytest具有很多第三方插件,并且可以自定义扩展, 比较好 用的如 pytest-allure(完美html测试报告生成) pytest-xdist (多CPU分发)等; 4. 可以很好的和jenkins集成;** 5. **
全栈程序员站长
2022/09/17
2.3K0
Pytest和Allure测试框架-超详细版+实战
pytest学习和使用23-通俗易懂的聊聊allure常用特性集合及使用方法说明
1 @allure.step() @allure.step()装饰器,可以让测试用例在allure报告中显示详细的测试过程; step() 只有一个参数title,传什么就在allure上就显示什么; 举例: # -*- coding:utf-8 -*- # 作者:虫无涯 # 日期:2023/3/28 # 文件名称:test_allure_step.py # 作用:@allure.step特性 # 联系:VX(NoamaNelson) # 博客:https://blog.csdn.net/NoamaNel
虫无涯
2023/03/30
2.6K0
Pytest学习笔记3——参数化
  在讲pytest与unittest的区别文章中,我们知道其中一个区别就是参数化,unittest框架使用的第三方库ddt来参数化的,而pytest框架就直接使用装饰器@pytest.mark.parametrize来对测试用例进行传参。这个是针对测试方法来参数化,还有一种是针对前置处理函数来传参。但往往这两种是可以结合使用。
全栈测试开发日记
2023/02/02
6350
Pytest学习笔记3——参数化
pytest文档16-标记失败xfail
当用例a失败的时候,如果用例b和用例c都是依赖于第一个用例的结果,那可以直接跳过用例b和c的测试,直接给他标记失败xfail 用到的场景,登录是第一个用例,登录之后的操作b是第二个用例,登录之后操作c是第三个用例,很明显三个用例都会走到登录。 如果登录都失败了,那后面2个用例就没测试必要了,直接跳过,并且标记为失败用例,这样可以节省用例时间。
上海-悠悠
2018/09/29
1.2K0
Python 自动化测试(三): pytest 参数化测试用例构建
在之前的文章中主要分享了 pytest 的实用特性,接下来讲 Pytest 参数化用例的构建。
霍格沃兹测试开发
2020/10/27
3.1K0
pytest学习和使用10-Pytest中的测试用例如何跳过执行?
1 引入有时候我们需要对某些指定的用例进行跳过,或者用例执行中进行跳过,在Unittest中我们使用skip()方法;在Pytest中如何使用呢?在Pytest中也提供了两种方式进行用例的跳过skip、skipif。2 Unittest中的用例跳过# -*- coding:utf-8 -*-# 作者:NoamaNelson# 日期:2022/11/17 # 文件名称:test_unittest_skip.py# 作用:验证unittest的skip# 联系:VX(NoamaNelson)# 博客:https
虫无涯
2023/02/17
1.4K0
Pytest fixture参数化params
unittest使用ddt来实现测试用例参数化、或parameterized实现测试用例参数化,pytest测试用例里面对应的参数可以用 parametrize 实现参数化,今天我们来了解下fixture参数化params
王大力测试进阶之路
2020/08/17
1.4K0
pytest学习和使用6-fixture如何使用?
1 引入 和setup、teardown的区别是:fixture可自定义测试用例的前置条件; setup、teardown针对整个脚本全局生效,可实现在执行用例前后加入一些操作; setup、teardown不能做到灵活使用,比如用例A先登陆,用例B不需要登陆,用例C需要登陆,这样使用fixture更容易实现功能。 2 fixture参数说明 2.1 fixture源码 部分源码如下: def fixture( fixture_function: Optional[_FixtureFunction]
虫无涯
2023/02/16
5800
Python测试框架pytest(07)fixture - 参数化params、和parametrize结合、ids
@pytest.mark.parametrize添加indirect=True参数是为了把login当成一个函数去执行,而不是一个参数,并且将data当做参数传入函数。
wangmcn
2022/07/26
5040
Python测试框架pytest(07)fixture - 参数化params、和parametrize结合、ids
Pytest学习笔记2——前后置处理高级函数Fixture(完整篇)
  前面介绍了pytest传统的前后置处理方法,通过一些实例,知道了它对处理前后置的场景是有一定的局限性。所以才引入fixture装饰器函数,fixture是pytest的核心功能,也是亮点功能,它可以灵活的处理很多特殊的场景,利用pytest做接口测试,熟练掌握fixture的使用方法,pytest用起来才会得心应手!
全栈测试开发日记
2023/02/02
2.8K0
Pytest学习笔记2——前后置处理高级函数Fixture(完整篇)
pytest学习和使用8-fixture如何实现teardown功能?(yield的使用)
1引入 之前学习fixture的时候,其实这个功能就类似用例的前置,给用例执行前设置一些条件; 那fixture也就相当于setup的功能; 那有没有teardown的功能呢? 有,fixture里面的teardown用yield来唤醒teardown的执行。 2 yield说明 yield是一个关键字; yield在fixture中起到了唤起teardown的作用,同时也可以和return一样返回值; 但yield和return的区别是:return执行完成,该函数终止;yield在返回结束后,后续的代码
虫无涯
2023/02/16
4720
Python测试框架pytest(28)测试报告Allure - 动态生成标题、动态生成功能、报告添加用例失败截图
默认 allure 报告上的测试用例标题不设置就是用例名称,其可读性不高;当结合 @pytest.mark.parametrize 参数化完成数据驱动时,如标题写死,其可读性也不高。
wangmcn
2022/07/26
9120
Python测试框架pytest(28)测试报告Allure - 动态生成标题、动态生成功能、报告添加用例失败截图
Pytest 系列(28)- 参数化 parametrize + @allure.title() 动态生成标题
https://www.cnblogs.com/poloyy/category/1690628.html
小菠萝测试笔记
2020/10/30
1.3K0
Pytest 系列(28)- 参数化 parametrize + @allure.title() 动态生成标题
pytest系列教程——4、fixture详解
https://docs.pytest.org/en/7.1.x/reference/reference.html#pytest.fixture
胡八万
2022/06/08
1.5K0
pytest系列教程——4、fixture详解
pytest文档68-pytest-lazy-fixture 插件
测试用例参数化的时候,使用 pytest.mark.parametrize 参数化传测试数据,如果我们想引用前面 不同fixture 返回的数据当测试用例的入参,前面一篇用fixture 参数化 prams 来间接解决这个问题。 接下来用 pytest-lazy-fixture 插件可以直接在测试用例中参数化时 pytest.mark.parametrize 中使用 fixture
上海-悠悠
2020/12/17
8330
Pytest fixture及conftest详解
最近一段时间准备写一篇《自动化测试框架一键动态切换测试环境》的实践总结,但由于要涉及到pytest fixture相关知识,遂决定先写一篇pytest fixture的基础介绍。
大刚测试开发实战
2022/11/14
1.7K0
Pytest fixture及conftest详解
推荐阅读
相关推荐
Pytest fixture之request传参
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文