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 关系型数据库
后端接口性能优化分析
后端接口性能优化分析
432 0
|
移动开发 前端开发 JavaScript
js实现图片压缩上传
最近在研究H5前端图片处理相关技术,方向有图片压缩、裁切、旋转、模糊等。
399 0
|
1月前
|
人工智能 数据处理
Qoder 全新「上下文压缩」功能正式上线,省 Credits !
Qoder 全新「上下文压缩」功能正式上线,高效管理会话上下文,节省开发成本,同时保持高效协作!
|
1月前
|
前端开发 Java 开发者
MVC 架构模式技术详解与实践
本文档旨在全面解析软件工程中经典且至关重要的 MVC(Model-View-Controller) 架构模式。内容将深入探讨 MVC 的核心思想、三大组件的职责与交互关系、其优势与劣势,并重点分析其在现代 Web 开发中的具体实现,特别是以 Spring MVC 框架为例,详解其请求处理流程、核心组件及基本开发实践。通过本文档,读者将能够深刻理解 MVC 的设计哲学,并掌握基于该模式进行 Web 应用开发的能力。
216 1
|
4月前
|
数据安全/隐私保护
陌陌头像留V的最好方法,陌陌最新留QQ号技巧,陌陌动态最聪明的留微信
本资料分享社交平台隐秘留联系方式的方法,包含微信头像艺术化处理、二维码变形术,以及QQ号谐音替换、图片分割等技巧。
|
12月前
|
自然语言处理 前端开发 数据可视化
1024程序员节:合合信息“百宝箱”开启智能文档处理新纪元
在数字化转型这股大洪流中,文档处理已然成为企业和开发者日常作业中的一块重要基石。合合信息给开发者送了个大礼——智能文档处理“百宝箱”。这“百宝箱”里头,啥都有,全面、高效、准确,简直就是文档处理的超级神器。他们想通过这个产品,让技术不再那么高不可攀,让更多人,特别是咱们开发者,能轻轻松松地把文档处理的能力加到自己的工作中去。下面来详细看一下吧~
280 0
|
JavaScript
Selenium--WebDriverWait--你知道显示等待?(结合源码让你更加得心应手)
Selenium--WebDriverWait--你知道显示等待?(结合源码让你更加得心应手)
291 0
|
存储 数据采集 机器学习/深度学习
大数据基础:收集、处理与分析
【5月更文挑战第30天】本文探讨了大数据的基本概念、关键技术及应用案例。大数据是海量、多源、快速处理的数据集合,涉及数据采集、存储、处理和分析。关键技术包括使用Flume进行数据采集、Hadoop HDFS和NoSQL数据库存储数据、MapReduce和Spark进行批处理、以及Python的pandas和scikit-learn进行数据分析。应用案例涵盖了金融风控、医疗健康和智能交通等领域,展示大数据在风险评估、疾病诊断和交通管理等方面的潜力。随着技术发展,大数据将在更多领域发挥作用。
471 3
|
机器学习/深度学习 人工智能 自然语言处理
一文搞懂深度学习:神经网络基础部分
一文搞懂深度学习:神经网络基础部分
360 0