如何理解pytest的参数化fixture,fixture工厂怎么用
Admin 2022-08-04 群英技术资讯 871 次浏览
这篇文章主要讲解了“如何理解pytest的参数化fixture,fixture工厂怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解pytest的参数化fixture,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条测试用例。

当我们在一个用例当中,需要多次调用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")
pytest内置的名为requests的fixture,主要功能: 提供请求fixture的测试用例/测试类的信息的。
我们定义fixture之后,通常都是测试用例/测试类,来请求fixture。
而request fixture就会记录 测试用例/测试类 相关信息。
request fixture是通过FixtureRequest来实现的,有以下属性(列举部分)可以使用:
更多的请查阅官网: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("-------------------------")
执行结果如下:

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
Python可以从图像或视频中检测和识别你的脸,人脸检测与识别也是计算机视觉领域的研究热点之一。本文主要为大家介绍通过Python实现人脸识别之微信检测,需要的同学可以参考一下
内容介绍一、概念介绍二、数据展示三、数据导入四、图像绘制五、树形结构总结一、概念介绍矩形树图(Treemap),即矩形式树状结构图,利用矩形的面积表示数值的大小,颜色用于类别区分,常用于呈现多类别的一
删除列表或者字符串元素的方法不止一种,同样,删除字典元素的方法也不止一种,本文主要介绍python中删除字典元素的四种方法:1、使用del语句;2、使用clear();3、使用pop();4、使用popitem()。感兴趣的可以了解一下
这篇文章主要介绍了pygame实现井字棋之第一步绘制九宫格,文中有非常详细的代码示例,对正在学习python的小伙伴们有非常好的帮助,需要的朋友可以参考下
PDF是Portable Document Format的缩写,这类文件通常使用`.pdf`作为其扩展名。在日常开发工作中,最容易遇到的就是从PDF中读取文本内容以及用已有的内容生成PDF文档这两个任务。本文为大家介绍了几个Python中常见的PDF操作,需要的可以参考一下
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008