Pytest框架之fixture详解(三)
作者:小旭2021 发布时间:2023-06-20 12:05:27
相关文章
Pytest框架之fixture详解(一)
Pytest框架之fixture详解(二)
Pytest框架之fixture详解(三)
本文关于fixture的内容如下:
1、参数化fixture
2、fixture工厂
3、request这个fixture
1、参数化fixture
fixture有个params参数,允许我们传递数据。
语法格式:
# conftest.py文件
# fixture的params参数
# 取value1时,会把依赖此fixture的用例执行一遍。
# 取value2时,会把依赖此fixture的用例执行一遍。
# 取value3时,会把依赖此fixture的用例执行一遍。
# params有几个参数,就会将依赖此fixture的用例执行几遍。
@pytest.fixture(params=[value1, value2, value3..])
def fix_name():
# do something
当我们需要多次调用fixture时,则可以用到fixture的参数化功能。
但它并不是并发的,是串行执行的。
比如,测试对象有多种配置方式,那么参数化可以帮我们在多种配置方式下执行用例。
接下来,以网页自动化为案例。
需求:要在google、firefox浏览器下执行测试用例,用例为打开百度搜索pytest。
1)先在conftest.py当中,定义fixture,并设置params=["google", "firefox"]
# conftest.py
# params设置为google和firefox
@pytest.fixture(params=["google", "firefox"])
def browser_fix(request):
if request.param == "google":
driver = webdriver.Chrome()
elif request.param == "firefox":
driver = webdriver.Firefox()
else:
driver = None
yield driver
if driver:
driver.quit()
2)在测试用例文件test_baidu_action.py中,编写测试用例,并调用browser_fix
# test_baidu_action.py
@pytest.mark.usefixtures("browser_fix")
def test_baidu(browser_fix):
driver = browser_fix
driver.get("https://www.baidu.com/")
driver.find_element(By.ID, "kw").send_keys("pytest", Keys.ENTER)
loc = (By.XPATH, '//h3')
WebDriverWait(driver,10).until(EC.visibility_of_element_located(loc))
driver.find_element(*loc).click()
3)运行2)中的用例,会依次在google浏览器中执行完成,然后在firefox浏览器中执行完成。一共是2条测试用例。
2、fixture工厂
当我们在一个用例当中,需要多次调用fixture时,就可以使用fixture工厂
利用的是装饰器的方式
在fixture内部,定义一个函数。fixture返回的是函数。
以下案例来自官网:
@pytest.fixture
def make_customer_record():
def _make_customer_record(name):
return {"name": name, "orders": []}
return _make_customer_record
# 用例内部,多次调用了fixture.
def test_customer_records(make_customer_record):
customer_1 = make_customer_record("Lisa") # 第1次调用
customer_2 = make_customer_record("Mike") # 第2次调用
customer_3 = make_customer_record("Meredith") # 第3次调用
如果工厂创建的数据需要管理,那么fixtue可以如下处理:
@pytest.fixture
def make_customer_record():
# 管理工厂的数据。在前置中创建。在后置中销毁
created_records = []
def _make_customer_record(name):
record = models.Customer(name=name, orders=[])
# 前置中添加数据
created_records.append(record)
return record
yield _make_customer_record # 返回内部函数
# 销毁数据
for record in created_records:
record.destroy()
# 测试用例
def test_customer_records(make_customer_record):
customer_1 = make_customer_record("Lisa")
customer_2 = make_customer_record("Mike")
customer_3 = make_customer_record("Meredith")
3、request这个fixture
pytest内置的名为requests的fixture,主要功能: 提供请求fixture的测试用例/测试类的信息的。
我们定义fixture之后,通常都是测试用例/测试类,来请求fixture。
而request fixture就会记录 测试用例/测试类 相关信息。
request fixture是通过FixtureRequest来实现的,有以下属性(列举部分)可以使用:
request.param:获取fixture的params参数值
request.scope:获取fixture的作用域
request.function:获取调用fixture的用例函数名称。如果fixture是函数级别的作用域。
request.cls:获取测试用例是从哪个测试类里收集的。
request.module:获取测试用例/测试类从哪个python模块里收集的。
request.config:从pytest的config文件当中,获取与当前请求有关的配置信息
更多的请查阅官网:https://docs.pytest.org/en/stable/reference.html
既然requests是fixture,那么我们定义的fixture,就可以直接把requests作为函数参数来用。
下面,以简单案例来演示。
定义一个fixture,将requests作为参数。
import pytest
@pytest.fixture(params=[1,2])
def init(request):
print("用例名称:", request.function)
print("fix参数 ", request.param)
print("fix的作用域 ", request.scope)
print("用例所在的类 ", request.cls)
定义一个测试类,直接请求名为init的fixture:
@pytest.mark.usefixtures("init")
class TestABC:
def test_hello(self):
print("-------------------------")
执行结果如下:
来源:https://www.cnblogs.com/chenyablog/p/15164392.html
猜你喜欢
- 如果备份的数据库有2个文件,分别是.LDF 和 .MDF,打开企业管理器,在实例上右击---所有任务--附加数据库,然后选择那个.MDF文件
- 上篇文章给大家介绍了Python爬虫实现百度翻译功能过程详解Python爬虫学习之翻译小程序 感兴趣的朋友点击查看。今天给大家介
- 本文仅作为基本操作流程的记录,不进行细节描述一、环境安装1、安装Pycharm在官网上下载最新版本Pycharm安装即可2、安装pyQT5p
- wxpython最为一款python GUI库,由于简单和轻便外加强大的功能而受到很多python爱好者的喜爱,pymysql作为pytho
- 本文实例讲述了python多线程使用方法。分享给大家供大家参考,具体如下:threading 模块支持守护线程, 其工作方式是:守护线程一般
- 无论你在linux上娱乐还是工作,这对你而言都是一个使用python来编程的很好的机会。回到大学我希望他们教我的是Python而不是Java
- 1:下载FCKEditor编辑器下载下来后解压到你网站的目录,最好就放在根目录下,文件夹名字就用FCKEditor;这里可以随便自己喜好,但
- 本文实例讲述了python实现爬取千万淘宝商品的方法。分享给大家供大家参考。具体实现方法如下:import timeimport level
- 新年新气象,今天就用代码来制作一个 动态鞭炮 ,效果如下所示。动态鞭炮的基本原理是:将一个录制好的鞭炮视频以字符画的形式复现,基本步骤是帧采
- 本文实例讲述了Python使用pyodbc访问数据库操作方法。数据库连接数据库连接网上大致有两种方法,一种是使用pyodbc,另一种是使用w
- 前言我们前面对matplotlib模块底层结构学习,对其pyplot类(脚本层)类提供的绘制折线图、柱状图、饼图、直方图等统计图表的相关方法
- 开始我们将通过示例介绍偶数列表以及在 Python 中创建偶数列表的不同方法。什么是偶数本教程展示了如何在 Python 中制作偶数列表。
- 结合网上解决方法,总结了一 * 意三点:1.文件名或路径名开头如果会引起转义,则\要替换为\\2.文件不能放在桌面,因为读取时按中文路径3.运
- 方法一一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大1、设置数
- 本文实例讲述了python通过BF算法实现关键词匹配的方法。分享给大家供大家参考。具体实现方法如下:#!/usr/bin/python# -
- selenium主要是用来做自动化测试,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题。模拟浏览器进行网页加载,当reque
- 斐波那契数列(Fibonacci)最早由印度数学家Gopala提出,而第一个真正研究斐波那契数列的是意大利数学家 Leonardo Fibo
- 1.下载安装pyqt5工具包以及配置ui界面开发环境pip install PyQt5pip install PyQt5-tools2.点击
- 本文只有代码,介绍了有关GUI界面的学生信息管理系统的实现。已经过调试没有很大问题。如有错误,还请批评指正。1.导入tkinter模块imp
- 一、概述:Python的GC模块主要运用了“引用计数”(reference counting)来跟踪和回收垃圾。在引用计数的基础上,还可以通