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-夹具函数相关推荐

  1. pytest官方文档 6.2 中文翻译版(第五章):pytest夹具:明确的,模块化的,可扩展的

    软件测试夹具是用于初始化的测试功能的.它们提供了一个固定的基线,以便测试能够可靠地执行并产生一致的,可重复的结果.初始化可能会设置服务.状态或其他运行环境.测试函数可以通过参数访问测试夹具,通常在测试 ...

  2. python模块打包上传pypi-演示pytest hook函数二次开发

    python模块打包上传pypi pytest hook函数二次开发 修改默认编码 显示中文用例名称 官方文档 : https://packaging.python.org/en/latest/tut ...

  3. [pytest]夹具使用注意事项

    pytest 基础 #模块以test_开头或者以_test结尾 #类名以Test开头 #方法以test开头 #运行方式 # 主函数运行 pytest.main(['-s',"指定运行的模块名 ...

  4. 接口自动化系列一: Pytest 夹具统一鉴权, 统一日志输出

    统一鉴权的意义 接口自动化一般需要登录获得鉴权信息, 供各个suite和case使用, 因此登录鉴权适合定义在Session级别的夹具中, 供所有用例共享. 示例: @pytest.fixture(s ...

  5. Pytest前置函数的使用(脱坑向)

    使用前置函数有两种方式 1.@pytest.mark.usefixtures() 2.作为函数的入参传入 使用@pytest.mark.usefixtures()时,可将该装饰器放在类前或用例前,但是 ...

  6. pytest 之 fixture 夹具

    pytest 之 fixture 夹具(作用域) 一.unittest中的setup和teardown 在pytest中如何表示? fixture 夹具与unittest中的setUp相似 使用方式: ...

  7. pytest合集(6)— Fixture夹具

    一.关于夹具 1.夹具介绍 简单来说,pytest中的夹具就是用来实现测试前的环境准备,提供测试数据和测试后的环境清理动作.类似于unittest框架里的setup(前置处理),teardown(后置 ...

  8. pytest合集(8)— 测试用例和夹具的参数化

    一.测试用例参数化 pytest.mark.parametrize() 语法糖: parametrize(argnames, argvalues, indirect=False, ids=None,  ...

  9. pytest进阶之fixture函数

    fixture函数存在意义 网购优惠券 https://www.fenfaw.cn/ 与python自带的unitest测试框架中的setup.teardown类似,pytest提供了fixture函 ...

  10. Python Pytest中fixture之yield唤醒teardown和终结函数addfinalizer

    引入 我们之前学习的都是测试用例的前置固件,也就是相当于"setup".说到这,细心的你可能想到了,那有没有什么方式可以表示出"teardown"?这就是我们今 ...

最新文章

  1. 如何在WordPress中自定义PHP页面并操作数据库?
  2. 【Linux】一步一步学Linux——Bash常用快捷键(11)
  3. 嵌入式Linux下Qt的中文显示
  4. Java 9,Jigsaw,JPMS和模块:个人探索
  5. 服务器 raid 1t硬盘吗,用了4块1T的硬盘,做了raid5,显示有2.7T,但是分区做完系统后,有700多G不能动...
  6. Spring IOC容器和获取组件对象源码分析
  7. AngularJS track by $index引起的思考
  8. VS2010快捷键大全----养成良好的习惯
  9. 偏微分方程数值解法pdf_单摆-微分方程浅谈
  10. 郝斌的数据结构学习笔记(1)概述,算法,指针的概念,结构体,线性结构,离散存储,链表
  11. 「插件」Runner更新Pro版,帮助设计师远离996
  12. python快速入门神器 知乎_Python数据可视化神器--pyecharts 快速入门
  13. int类型转换byte类型
  14. FPGA零基础学习:UART协议驱动设计
  15. QLineEdit控件添加提示语
  16. 使用vim修改只读文件
  17. P3435 [POI2006]OKR-Periods of Words [Kmp, next数组]
  18. Ubuntu Firefox浏览器安装Flash插件
  19. ipencil 无法与iPad配对
  20. 微信二级不死域名是什么意思?被封后还能访问吗?

热门文章

  1. 理学计算机科学与技术如何调剂,计算机 07理学可以调剂到08工学吗? 比如(077500计算机科学与技术)调剂到(081200计算机科学与技术)...
  2. SDN软件交换机OVS笔记
  3. 模拟电影院html源码,Html+css+Jquery模拟电影院购票
  4. eclipse svn org.tigris.subversion.javahl.ClientException: RA layer request failed
  5. 令牌桶实现流量限速实例
  6. 惠普电脑u盘重装系统步骤_惠普电脑怎么重装系统|惠普电脑重装系统步骤
  7. plugin(插件)
  8. chrome://inspect/#devices敲定手机chromedriver的版本
  9. Nginx学习1:通过访问路径代理不同二级http服务
  10. 女王祖白绿和糖饭桌子的故事(二)