pytest中fixture,pytest实现fixture的原理
本文详细解释了Pytest框架的fixture,通过示例代码对其进行了非常详细的介绍。对大家的学习或者工作都有一定的参考价值,有需要的朋友可以参考一下。
相关文章
Py框架夹具说明(1)
Py框架夹具说明(2)
Py框架夹具说明(三)
本文关于夹具的内容如下:
1.参数化夹具2、夹具工厂3,并请求此夹具
1、参数化fixture
。
Fixture有一个params参数,允许我们传递数据。
语法格式:
# conftest.py文件
# fixture的参数
#当取值为1时,依赖于这个fixture的用例将被再次执行。
#当取值2时,依赖于这个fixture的用例将被再次执行。
#当取值3时,依赖于这个fixture的用例将被再次执行。
# params有几个参数,依赖于这个fixture的用例会被执行几次。
@ py test . fixture(params=[值1,值2,值3.])
定义修复名称():
#做点什么
当我们需要多次调用fixture时,可以使用fixture的参数化功能。
但它不是并发的,而是串行执行的。
例如,如果测试对象有多种配置,参数化可以帮助我们在多种配置下执行用例。
接下来以网页自动化为例。
需求:在google和firefox浏览器下执行测试用例,用例是打开百度搜索pytest。
1)首先,在conftest.py中,定义fixture并设置params=[google , firefox]
# conftest.py
# params设置为google和firefox
@ pytest . fixture(params=[ Google , firefox])
定义浏览器_修复(请求):
if request.param==google:
driver=webdriver。铬合金()
elif request . param== Firefox :
driver=webdriver。火狐()
else:
驱动因素=无
产量驱动因素
如果驱动程序:
driver.quit()
2)在测试用例文件test_baidu_action.py中,编写测试用例,调用browser_fix。
# test _百度_action.py
@ pytest . mark . use fixtures( browser _ fix )
def测试_百度(浏览器_修复):
驱动程序=浏览器_修复
driver . get( https://www . Baidu.com/)
driver.find_element(By。ID,“千瓦”)。send_keys(pytest ,keys。回车)
loc=(By。XPATH,//h3 )
WebDriverWait(驱动程序,10)。直到(EC . visibility _ of _ element _ located(loc))
driver.find_element(*loc)。单击()
3)运行2)中的用例,这些用例将在google浏览器中执行,然后在firefox浏览器中执行。总共有2个测试用例。
2、fixture工厂
当我们需要在一个用例中多次调用fixture时,我们可以使用fixture factory。
用的是装修的方式。
在fixture中,定义一个函数。fixture返回一个函数。
以下案例来自官网:
@pytest.fixture
定义制造商_客户_记录():
定义_制造_客户_记录(名称):
返回{name: name, orders: []}
退货_制造商_客户_记录
#在用例中,多次
调用了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
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
定义一个测试类,直接请求名为init的fixture:
@pytest.mark.usefixtures("init")
执行结果如下:
到此这篇关于Pytest框架之fixture的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。