pytest-夹具函数
1.用于定制测试流程,在各个节点加入需要执行的固定流程
官方文档地址:How to use fixtures — pytest documentation
2.具体实现:用@pytest.fixture标记夹具函数,在具体用例函数的传参中增加具体夹具函数的函数名
@pytest.fixture()
def A():
print('此处是夹具函数')
def test_parameterize_with_id1_1(self,A):
self.client.simple_step()
效果:执行test_parameterize_with_id1_1函数之前会先执行A()函数,报告中会展示在set up模块中
3.通常放在conftest.py中,就不需要引用了,可以直接用
4.上例中如果A()有返回值,在test_parameterize_with_id1_1函数中可以直接用任意变量s=A()来接收返回值
5.夹具函数类似setUp/teardown
在UI自动化中夹具函数作用:
前置脚本可以用来:启动浏览器、访问某个初始地址
收尾脚本可以用来:关闭浏览器、关闭数据库连接、关闭文件流
在接口自动化中夹具函数作用:
前置脚本可以用来:调用关联接口、设置地址、头信息
收尾脚本可以用来:关闭资源、设置延时
6.夹具函数根据作用范围不同(默认是函数级别),运行次数也会不同,例如一个class下有2个函数,如果scope=class,且每个函数都传参夹具函数,则会在class的第一个函数运行前运行一次(1.不会多次运行;2.如果不是每个函数都传参夹具函数,则按函数顺序执行,遇到第一个有夹具函数传参的函数前会执行夹具函数,再按照scope判断需要执行几次),如果scope=function,则会在每次函数运行前都运行一次
7.需要预先执行多个夹具函数:在用例函数传参中传多个夹具函数名即可。同一函数调用多个夹具函数,按照scope范围从大到小的顺序来执行夹具函数
8.夹具函数中使用yield完成测试用例的准备和结束
#官方示例
import pytest
from emaillib import Email, MailAdminClient
@pytest.fixture
def mail_admin():
return MailAdminClient()
@pytest.fixture
def sending_user(mail_admin):
user = mail_admin.create_user()
yield user
mail_admin.delete_user(user)
@pytest.fixture
def receiving_user(mail_admin):
user = mail_admin.create_user()
yield user
mail_admin.delete_user(user)
def test_email_received(sending_user, receiving_user):
email = Email(subject="Hey!", body="How's it going?")
sending_user.send_email(email, receiving_user)
assert email in receiving_user.inbox
#函数中的传参表示fixture函数中的前半部分先执行,函数体中的使用代替的是fixture中返回的user
9.request内置:在fixture函数中获取被修饰的测试用例的上下文值
可以用于获取测试用例的信息:测试用例名字等,例如request.module获取当前测试用例的模块名
#官方示例
@pytest.fixture(scope="module")
def B(request):
print('此处是夹具函数B')
print('request获取模块名'+str(request.module))
test_demo.py
class Test_parameterize1():
client=Client('www.baidu.com','post')
def test_parameterize_with_id1_2(self,B):
print('1-2')
self.client.simple_step()
<>表示返回的是对象
10.夹具函数传参——工厂模式:为了给夹具函数传参,以适应更多的用例需要
#官方示例
import pytest
@pytest.fixture
def make_customer_record():
def _make_customer_record(name):
return {"name": name, "orders": []}
return _make_customer_record
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")
类似装饰器,注意fixture中返回的是_make_customer_record调用,而不是_make_customer_record()——表示返回的是数据结果
11.夹具函数传参(即工厂模式)在接口自动化中的应用
config.xml
增加接口通用的配置
<接口模板>
<登录>
<地址>login/</地址>
<方法类型>POST</方法类型>
<正文格式>form</正文格式>
</登录>
</接口模板>
util.py
get_api_info(name)函数获取xml中设置的接口path、method、type
def get_api_info(name):
et = ET.ElementTree(file='../config.xml')
url = ''
method = ''
body_type = ''
for i in et.findall('.//接口模板/' + name+'/*'):
if i.tag == '地址':
url = i.text
if i.tag == '方法类型':
method = i.text
if i.tag == '正文格式':
body_type = i.text
return url, method, body_type
conftest.py
增加api()夹具函数,创建Client对象
@pytest.fixture
def api():
def __api(name):
url,method,body_type=get_api_info(name)
client=Client(url=url,method=method,type=body_type)
return client
return __api
test_login.py
测试用例改变
def test_login01(api,username,password,error_code,msg):
client=api('登录')
...
设置参数等流程暂不变化
12.通过用例名与函数名自动匹配确定返回的client对象
通过request.module.__name__可以获取模块名、request.function.__name__可以获取函数方法名,(且原先调用api()需要name传参,目前改成通过模块名自动匹配,省去为了传参的工厂模式fixture)从而与xml中的节点名配置自动匹配,返回确定的Client对象
conftest.py
@pytest.fixture
def api2(request):
print('------------------------------')
apiname=request.module.__name__.split('.')[2][5:]
url, method, body_type = get_api_info(apiname)
client = Client(url=url, method=method, type=body_type)
return client
tips:
1.这种做法要求模块名与xml中节点的名字一致(即11中<登录>的位置应为<login>)
2.后续调用api2(建议改成client)即调用client对象,因为api2夹具函数的返回值是一个client对象
pytest-夹具函数相关推荐
- pytest官方文档 6.2 中文翻译版(第五章):pytest夹具:明确的,模块化的,可扩展的
软件测试夹具是用于初始化的测试功能的.它们提供了一个固定的基线,以便测试能够可靠地执行并产生一致的,可重复的结果.初始化可能会设置服务.状态或其他运行环境.测试函数可以通过参数访问测试夹具,通常在测试 ...
- python模块打包上传pypi-演示pytest hook函数二次开发
python模块打包上传pypi pytest hook函数二次开发 修改默认编码 显示中文用例名称 官方文档 : https://packaging.python.org/en/latest/tut ...
- [pytest]夹具使用注意事项
pytest 基础 #模块以test_开头或者以_test结尾 #类名以Test开头 #方法以test开头 #运行方式 # 主函数运行 pytest.main(['-s',"指定运行的模块名 ...
- 接口自动化系列一: Pytest 夹具统一鉴权, 统一日志输出
统一鉴权的意义 接口自动化一般需要登录获得鉴权信息, 供各个suite和case使用, 因此登录鉴权适合定义在Session级别的夹具中, 供所有用例共享. 示例: @pytest.fixture(s ...
- Pytest前置函数的使用(脱坑向)
使用前置函数有两种方式 1.@pytest.mark.usefixtures() 2.作为函数的入参传入 使用@pytest.mark.usefixtures()时,可将该装饰器放在类前或用例前,但是 ...
- pytest 之 fixture 夹具
pytest 之 fixture 夹具(作用域) 一.unittest中的setup和teardown 在pytest中如何表示? fixture 夹具与unittest中的setUp相似 使用方式: ...
- pytest合集(6)— Fixture夹具
一.关于夹具 1.夹具介绍 简单来说,pytest中的夹具就是用来实现测试前的环境准备,提供测试数据和测试后的环境清理动作.类似于unittest框架里的setup(前置处理),teardown(后置 ...
- pytest合集(8)— 测试用例和夹具的参数化
一.测试用例参数化 pytest.mark.parametrize() 语法糖: parametrize(argnames, argvalues, indirect=False, ids=None, ...
- pytest进阶之fixture函数
fixture函数存在意义 网购优惠券 https://www.fenfaw.cn/ 与python自带的unitest测试框架中的setup.teardown类似,pytest提供了fixture函 ...
- Python Pytest中fixture之yield唤醒teardown和终结函数addfinalizer
引入 我们之前学习的都是测试用例的前置固件,也就是相当于"setup".说到这,细心的你可能想到了,那有没有什么方式可以表示出"teardown"?这就是我们今 ...
最新文章
- 如何在WordPress中自定义PHP页面并操作数据库?
- 【Linux】一步一步学Linux——Bash常用快捷键(11)
- 嵌入式Linux下Qt的中文显示
- Java 9,Jigsaw,JPMS和模块:个人探索
- 服务器 raid 1t硬盘吗,用了4块1T的硬盘,做了raid5,显示有2.7T,但是分区做完系统后,有700多G不能动...
- Spring IOC容器和获取组件对象源码分析
- AngularJS track by $index引起的思考
- VS2010快捷键大全----养成良好的习惯
- 偏微分方程数值解法pdf_单摆-微分方程浅谈
- 郝斌的数据结构学习笔记(1)概述,算法,指针的概念,结构体,线性结构,离散存储,链表
- 「插件」Runner更新Pro版,帮助设计师远离996
- python快速入门神器 知乎_Python数据可视化神器--pyecharts 快速入门
- int类型转换byte类型
- FPGA零基础学习:UART协议驱动设计
- QLineEdit控件添加提示语
- 使用vim修改只读文件
- P3435 [POI2006]OKR-Periods of Words [Kmp, next数组]
- Ubuntu Firefox浏览器安装Flash插件
- ipencil 无法与iPad配对
- 微信二级不死域名是什么意思?被封后还能访问吗?
热门文章
- 理学计算机科学与技术如何调剂,计算机 07理学可以调剂到08工学吗? 比如(077500计算机科学与技术)调剂到(081200计算机科学与技术)...
- SDN软件交换机OVS笔记
- 模拟电影院html源码,Html+css+Jquery模拟电影院购票
- eclipse svn org.tigris.subversion.javahl.ClientException: RA layer request failed
- 令牌桶实现流量限速实例
- 惠普电脑u盘重装系统步骤_惠普电脑怎么重装系统|惠普电脑重装系统步骤
- plugin(插件)
- chrome://inspect/#devices敲定手机chromedriver的版本
- Nginx学习1:通过访问路径代理不同二级http服务
- 女王祖白绿和糖饭桌子的故事(二)