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

简介: 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/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"])
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 传多个参数

  • 传多个参数,需要通过字典去传。
# -*- 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"])
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

# -*- 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"])
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 ==============================
目录
相关文章
|
消息中间件 Java 关系型数据库
后端接口性能优化分析
后端接口性能优化分析
537 0
|
移动开发 前端开发 JavaScript
js实现图片压缩上传
最近在研究H5前端图片处理相关技术,方向有图片压缩、裁切、旋转、模糊等。
464 0
|
3月前
|
人工智能 数据处理
Qoder 全新「上下文压缩」功能正式上线,省 Credits !
Qoder 全新「上下文压缩」功能正式上线,高效管理会话上下文,节省开发成本,同时保持高效协作!
|
3月前
|
安全 Linux Shell
Linux系统提权方式全面总结:从基础到高级攻防技术
本文全面总结Linux系统提权技术,涵盖权限体系、配置错误、漏洞利用、密码攻击等方法,帮助安全研究人员掌握攻防技术,提升系统防护能力。
318 1
|
3月前
|
前端开发 Java 开发者
MVC 架构模式技术详解与实践
本文档旨在全面解析软件工程中经典且至关重要的 MVC(Model-View-Controller) 架构模式。内容将深入探讨 MVC 的核心思想、三大组件的职责与交互关系、其优势与劣势,并重点分析其在现代 Web 开发中的具体实现,特别是以 Spring MVC 框架为例,详解其请求处理流程、核心组件及基本开发实践。通过本文档,读者将能够深刻理解 MVC 的设计哲学,并掌握基于该模式进行 Web 应用开发的能力。
545 1
|
5月前
|
存储 算法 Windows
【硬盘容量缩水真相】新买的U盘插上那刻我崩溃了:标称128G的存储为何只剩112G?
新买的硬盘或U盘在Windows中显示的容量为何与标称不符?其实并非商家“坑”,而是存储单位换算标准不同所致。本文详解bit、Byte、KB、MB、GB等存储单位的区别,介绍国际单位制(SI)与国际电工委员会(IEC)两种标准,解释为何500GB硬盘在系统中仅显示约465GB。带你从底层原理理解计算机存储单位的换算逻辑,揭开“消失”的容量之谜。
615 0
【硬盘容量缩水真相】新买的U盘插上那刻我崩溃了:标称128G的存储为何只剩112G?
|
存储 监控 安全
企业如何应对网络攻击的威胁
企业如何应对网络攻击的威胁【10月更文挑战第10天】
392 3
|
自然语言处理 前端开发 数据可视化
1024程序员节:合合信息“百宝箱”开启智能文档处理新纪元
在数字化转型这股大洪流中,文档处理已然成为企业和开发者日常作业中的一块重要基石。合合信息给开发者送了个大礼——智能文档处理“百宝箱”。这“百宝箱”里头,啥都有,全面、高效、准确,简直就是文档处理的超级神器。他们想通过这个产品,让技术不再那么高不可攀,让更多人,特别是咱们开发者,能轻轻松松地把文档处理的能力加到自己的工作中去。下面来详细看一下吧~
318 0
|
SQL 存储 安全
SQL安全深度剖析:守护数据安全的坚固防线
展望未来,随着技术的不断进步和攻击手段的不断翻新,SQL安全将面临更多的挑战。因此,我们需要持续关注SQL安全领域的最新动态和技术发展,并不断更新和完善我们的防护措施。同时,加强国际合作与信息共享也是提升全球SQL安全性的重要途径。让我们共同努力,为构建一个更加安全、可靠的数字化环境而奋斗。