如何用tep完成增删改查接口自动化

Python-单元测试之pytest 需要安装pytest和pytest-html(生成html测试报告) 阅读详情

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,,版权归原作者所有,如有问题请及时联系我们以作处理

作者:dongfanger   来源:掘金

想要获取更多Python学习资料,了解更多关于Python的知识,可以加Q群630390733踊跃发言,大家一起来学习讨论吧!

tep的设计理念是让人人都可以用Python写自动化,本文就来介绍如何用tep完成增删改查接口自动化。

环境变量

编辑fixtures/fixture_admin.py:

"qa": {
    "domain": "https://qa.com",
},
复制代码

修改qa环境的domain。

登录

因为非登录接口需要从登录接口拿token,放在请求参数中,所以先在fixtures/fixture_admin.py中实现登录,修改url和json:

response = request(
    "post",
    url=url("/api/users/login"),
    headers={"Content-Type": "application/json"},
    json={
        "username": "admin",
        "password": "123456",
    }
)
复制代码

根据实际响应数据结构,修改response_token赋值:

response_token = jmespath.search("token", response.json())

class Clazz:
        token = response_token
        jwt_headers = _jwt_headers(response_token)

return Clazz
复制代码

参考_jwt_headers()实现自定义headers:

def _jwt_headers(token):
    return {"Content-Type": "application/json", "authorization": f"Bearer {token}"}
复制代码

_表示内部函数,外部无法访问,遵循conftest.py只对外提供fixture的原则。

完整代码

def _jwt_headers(token):
    return {"Content-Type": "application/json", "authorization": f"Bearer {token}"}


@pytest.fixture(scope="session")
def login():
    # Code your login
    logger.info("Administrator login")
    response = request(
        "post",
        url=url("/api/users/login"),
        headers={"Content-Type": "application/json"},
        json={
            "username": "admin",
            "password": "123456",
        }
    )
    assert response.status_code < 400
    response_token = jmespath.search("token", response.json())

    class Clazz:
        token = response_token
        jwt_headers = _jwt_headers(response_token)

    return Clazz
复制代码

说明:

  1. 可以复制login为多个fixture,如login_admin、login_some_user,灵活运用。
  2. scope="session",表示只登录一次,所有测试用例使用同一个token。可以改为function,让每条用例使用不同token。

写用例

新建测试

新建tests\crud_test.py:

from loguru import logger
from tep.client import request


def test(faker_ch, login, url):
复制代码

pytest的fixture作为参数传入test()函数来使用,faker_ch、login、 url是fixture_admin.py中定义好的fixture。

  • from loguru import logger 用于在测试用例中打印日志
  • from tep.client import request tep封装了请求日志功能,也可以用原生from requests import request

新增

请求参数为nickname和phone,使用faker_ch造1条测试数据:

fake = faker_ch
nickname = fake.name()
phone = fake.phone_number()
复制代码

请求方法为post,headers取登录返回值login.jwt_headers:

response = request(
    "post",
    url=url("/api/users"),
    headers=login.jwt_headers,
    json={
        "nickname": nickname, "phone": phone
    }
)
复制代码

添加断言,简单判断下响应状态码<400:

assert response.status_code < 400
复制代码

也可以查数据库来断言。

提取修改接口需要的数据:

user_id = jmespath.search("id", response.json())
created_at = jmespath.search("createdAt", response.json())
updated_at = jmespath.search("updatedAt", response.json())
复制代码

推荐用jmespath来提取json。

查询

请求参数传入刚才定义的局部变量nickname,使用get请求并断言,headers取登录返回值login.jwt_headers:

response = request(
    "get",
    url=url("/api/users"),
    headers=login.jwt_headers,
    params={
        "page": 1,
        "perPage": 10,
        "keyword": nickname
    }
)
assert response.status_code < 400
复制代码

get请求需要把json关键字改为params。

修改

使用faker再造1条新数据:

nickname_new = fake.name()
phone_new = fake.phone_number()
复制代码

请求方法为put,headers取登录返回值login.jwt_headers:

response = request(
        "put",
        url=url(f"/api/users/{user_id}"),
        headers=login.jwt_headers,
        json={
            "id": user_id, "createdAt": created_at, "updatedAt": updated_at,
            "phone": phone_new, "nickname": nickname_new
        }
    )
assert response.status_code < 400
复制代码

请求参数中用到了新增接口提取的数据user_id、created_at、updated_at。

删除

请求方法为delete,url中传入user_id,headers取登录返回值login.jwt_headers:

response = request(
    "delete",
    url=url(f"/api/users/{user_id}"),
    headers=login.jwt_headers
)
assert response.status_code < 400
复制代码

删除接口没有json和params。

完整用例


"""
@Author  :  Don
@Date    :  12/25/2020 1:02 PM
@Desc    :  增删改查
"""
import jmespath
from loguru import logger
from tep.client import request


def test(faker_ch, login, url):
    fake = faker_ch
    logger.info("新增")
    nickname = fake.name()
    phone = fake.phone_number()
    response = request(
        "post",
        url=url("/api/users"),
        headers=login.jwt_headers,
        json={
            "nickname": nickname, "phone": phone
        }
    )
    assert response.status_code < 400
    user_id = jmespath.search("id", response.json())
    created_at = jmespath.search("createdAt", response.json())
    updated_at = jmespath.search("updatedAt", response.json())

    logger.info("查询")
    response = request(
        "get",
        url=url("/api/users"),
        headers=login.jwt_headers,
        params={
            "page": 1,
            "perPage": 10,
            "keyword": nickname
        }
    )
    assert response.status_code < 400

    logger.info("修改")
    nickname_new = fake.name()
    phone_new = fake.phone_number()
    response = request(
        "put",
        url=url(f"/api/users/{user_id}"),
        headers=login.jwt_headers,
        json={
            "id": user_id, "createdAt": created_at, "updatedAt": updated_at,
            "phone": phone_new, "nickname": nickname_new
        }
    )
    assert response.status_code < 400
    logger.info(f"用户姓名手机 {nickname} {phone} 修改后 {nickname_new} {phone_new}")

    logger.info("删除")
    response = request(
        "delete",
        url=url(f"/api/users/{user_id}"),
        headers=login.jwt_headers
    )
    assert response.status_code < 400

复制代码

小结

本文介绍了tep的基本使用,先配置环境变量,再修改登录代码,然后新增测试,最后编写增删改查的接口请求。每条用例放在一个函数中,通过函数参数引用fixture来使用全局环境变量,函数内部可以定义测试需要的局部变量。每个接口是一个代码块,由接口描述、测试数据、请求、断言和数据提取5部分组成。接口之间通过变量实现参数化和关联。

tep 用户手册帮你从 unittest 过渡到 pytest 感谢大家的莅临,小编在文章末尾为大家准备了一些福利,需要的可以获取哦。 unittest 和 pytest 是 Python 的 2 个强大的测试框架,经常用来做 UI 自动化或接口自动化。unittest 是 PyCharm 的默认集成工具,也是我们大多数人入门自动化的首选框架。pytest 提供了更丰富的功能,相对的上手难度也要高一点。如果学了 pytest 后,想快速用 pytest 写项目,用于工作实践,那么可以试试我写的这款测试工具:tep,try easy pytest。 tep 简介 在 阅读详情

相关推荐

pytep:pyTEP是用于Python中的Tennessee Eastman流程的开源仿真API。 它简化了复杂模拟场景的设置,并提供了交互式模拟的选项

pyTEP:一个Python包,用于田纳西伊士曼过程的交互式仿真 重新编译TEP二进制文件 安装Python 3.7 什么是pyTEP? pyTEP是用于Python中的Tennessee Eastman流程的开源仿真API。 它简化了复杂模拟场景的设置,并提供了交互式模拟的选项。 通过pyTEP的高级API,用户可以设置仿真,更改操作条件并存储仿真数据,而无需了解模拟器的基本原理。 除了新引入的功能外,pyTEP还承诺比现有的TEP模拟器更具通用性和更直接的用法。 如何引用 Reinartz, C. and Enevoldsen, T.T. "pyTEP: A Python package for interactive simulations of the Tennessee Eastman process", 2021 安装指引 为了安装和运行pyTEP,必须安装适用于py

tep时隔8个月迎来重大全新升级

tep此次更新,旨在从“工具”升级为“框架”,为此做了大量的代码整洁工作,重新设计了部分功能,项目脚手架也焕然一新。 功能展示 conftest.py 脚手架生成的conftest.py只有一行代码: fixture自动加载等操作都隐藏到了tep的科技与狠活里面。 环境变量模板 使用yaml维护环境变量: 你可以env_vars目录下维护env_vars_开头的任意命名的yaml模板,内容自...

自动化代码美学 533

Python库 | tep-0.6.7.tar.gz

python库。 资源全名:tep-0.6.7.tar.gz

【pytest】tep环境变量、fixtures、用例三者之间的关系

​ tep是一款测试工具,在pytest测试框架基础上集成了第三方包,提供项目脚手架,帮助以写Python代码方式,快速实现自动化项目落地。 ​

qq_73332379的博客 679

ADS RFpro 射频阻抗仿真步骤

导入器件后,在库里面选取器件的对应模型,如图所示我们选取10pf 系统自带的村田模型。选取网络上的器件,拖入到下面component Models。导入成功后,截取需要仿真的区域(不截取仿真时间会非常长),可以生成对应如下原理图,通过原理图继续调整仿真。图上找到需要仿真链路上的网络,右键设置为信号。的叠层信息,按照PCB板厂提供信息填写完整。选择仿真的频率范围和频点数,生成如下图的RFPro仿真界。,然后再把GND也添加到下面。按图设置截取需要仿真的部分。添加成功后 网络就有了,15 双击run开始仿真。

m0_72954480的博客 3213

【NLP】文献翻译4——CH-SIMS:中文多模态情感分析数据集与细粒度的模态注释

CH-SIMS: A Chinese Multimodal Sentiment Analysis Dataset with Fine-grained Annotations of Modality摘要1. 介绍2. 相关工作2.1 多模态数据集2.2 多模态情感分析2.3 多任务学习3. CH-SIMS 数据集3.1 数据获取3.2 标注3.3 特征提取4. 多模式多任务学习框架4.1 单模态子网4.2 特征融合网络4.3 优化目标5. 实验5.1 基准5.2 实验的细节5.3 结果和讨论5.3.1 与

YoungSeng's Blog 1万+

tep环境变量、fixtures、用例三者之间的关系

‍tep是一款测试工具,在pytest测试框架基础上集成了第三方包,提供项目脚手架,帮助以写Python代码方式,快速实现自动化项目落地。在tep项目中,自动化测试用例都是放到tests目...

自动化代码美学 510

滞回比较器电路详细分析

滞回比较器是一种用于检测两个不同电压值并使比较器输出高电平或低电平的电路。滞回比较器的特点是具有迟滞特性,即当输入电压高于某一阈值时,比较器输出高电平,当输入电压低于另一阈值时,比较器输出低电平,而在这两个阈值之间,比较器的输出保持不变。比较器通常有两个模拟电压输入端UIN+和UIN-以及一个数字状态输出端UOUT。当UIN+大于UIN-时,UOUT为高电平;当UIN+小于UIN-时,UOUT为低电平。根据具体的系统定义,这两种电位的具体数值可以有所不同。

LuDvei的博客 2万+

接口使用jwt返回token_如何用tep完成增删改查接口自动化

‍tep的设计理念是让人人都可以用Python写自动化,本文就来介绍如何用tep完成增删改查接口自动化。环境变量编辑fixtures/fixture_admin.py:"qa": {"domain": "https://qa.com",},修改qa环境的domain。登录因为非登录接口需要从登录接口拿token,放在请求参数中,所以先在fixtures/fixture_admin.py中...

weixin_35742852的博客 219

AB SCIEX质谱数据分析实战:从PeakView入门到精通

质谱分析是现代生命科学和药物研发中不可或缺的核心技术,它通过测量离子的质荷比来鉴定和定量化合物。其基本原理是将样品离子化后,在电场和磁场中按质荷比分离,最终形成质谱图。这项技术的核心价值在于能够从复杂混合物中高灵敏度、高特异性地获取化合物的定性和定量信息,广泛应用于代谢组学、蛋白质组学、环境监测和药物分析等领域。在实际工作中,高效的数据处理平台至关重要。以AB SCIEX质谱仪生成的.wiff文件为例,其原始数据需要专业软件进行解析。PeakView软件正是这样一个综合平台,它集成了高级数据处理、谱图解析和

weixin_29053577的博客 306

基于ADS\HFSS\Matlab的平面带通发夹滤波器设计

写在最前面,前段时间完成了一个小项目,实现13.5~14GHz的带通滤波器,算是第一个微波项目,在老师、学长、各种大神的指点下,最终完成了指标,想来这段时间收获良多,想到老师教导的,有能力的话要尽可能帮助别人,以及网络上很少面向于小白的教程,于是决定把自己做这个小项目的经过,一些关键步骤,还有软件操作和公式讲解都发出来,供大家指正借鉴。由于我目前大三,刚学习电磁场、微波工程等等,技术实在有限,同时这样是我第一次发帖子,只能尽可能的将自己确认过正确的内容,步骤以及一些经验写出来,供大家借鉴。

likaifeng12138的博客 5214

teprunner测试平台用例前置模块开发

‍本文开发内容现在正式进入测试相关功能开发。teprunner测试平台底层是pytest,中间层是tep,还没了解的朋友可以先看看tep的文章,整个平台的设计思路和后面用例的执行都会基于这...

自动化代码美学 484

【项目实战】Qt6 录制屏幕、录制声音生成MP4、AVI、MA3等(完整源码,可直接编译使用)

本文将详细介绍如何利用Qt6多媒体模块中的QMediaCaptureSession、QMediaRecorder、QScreenCapture、QAudioInput、QMediaFormat等功能,实现对屏幕和声音的录制,并生成常见的媒体格式文件,如MP4、AVI、MA3等。我们将探讨如何利用这些功能来实现灵活的视频和音频参数设置,以满足不同需求下的录制和生成要求。我们将重点讨论如何配置视频和音频参数,包括分辨率、帧率、编解码器选择、音频采样率、声道设置等。

yegu001的博客 4937

teprunner测试平台10篇原创PDF教程发布

001-pytest内核测试平台落地初体验本文介绍了我第一次做的测试平台的使用和原理,技术栈为Vue+Django+Django REST Framework+JWT+MySQL+pyte...

自动化代码美学 471

数仓建模—数据治理框架选型

全名主要亮点覆盖面最广:从数据治理、架构、质量、安全到元数据、主数据、数据仓库等等,几乎所有数据管理主题都能在DMBOK里找到相应章节。概念权威统一:帮助组织建立通用术语和知识基础,减少“部门之间说法不一致”的沟通成本。适用场景:如果你所在公司(或团队)正准备系统梳理数据管理的方方面面,DMBOK是一份非常全面的指导手册,尤其适合培养新人或为整个组织统一认知。需要注意:DMBOK偏“知识指引”,不直接提供成熟度模型或实施路线图。想要落地,还需要结合其他评估模型或项目管理方法。小案例举例:某。

2401_84052244的博客 4743

基于 STM32 的智能水表流量计设计与实现 —— 数据采集与远程传输

本文设计的基于 STM32 的智能水表流量计通过霍尔传感器实现流量采集,结合 STM32 的处理能力完成数据计算、存储与远程传输,具备计量精准、功耗低、可远程监控等特点。未来可优化方向:引入低功耗模式延长电池寿命,增加水质检测模块实现多参数监测,提升水务管理智能化水平。

weixin_42300449的博客 1027

pytest封神之路第一步 tep介绍

『 tep is a testing tool to help you write pytest more easily. Try Easy Pytest! 』 tep前身 tep的前身是接口自动化测试框架pyface,一款面向对象设计的测试框架,我写过一篇博客介绍。 测试框架 / 测试工具 tep的定位是 a testing tool,不是 a testing framework。 框架/工具,是有区别的。最大的区别,就是我自认为是没有足够的能力去自主开发一套“框架”!工具的能力,还是妥妥的! 自研的

自动化代码美学 2007

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

tep完整教程帮你突破pytest

持续维护的教程 tep教程会随着版本更新或经验积累,持续维护在电子书中,最新的最全的内容请锁定这篇文章【最新】tep完整教程帮你突破pytest: https://dongfanger.gitee.io/blog/chapters/tep.html 对教程有任何疑问或建议,可添加微信交流哟:cekaigang。 tep是个小工具 tep是Try Easy Pytest的首字母缩写,是一款基于p...

自动化代码美学 1239

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

索引超出范围。必须为非负值并小于集合大小。_这些你必须知道的Java Web技术经验总结(一)...

接口的权限认证,使用拦截器(HandlerInterceptorAdapter),参考:第五章 处理器拦截器详解——跟着开涛学SpringMVC。注意:推荐能使用servlet规范中的过滤器Filter实现的功能就用Filter实现,因为HandlerInteceptor只有在Spring Web MVC环境下才能使用,因此Filter是最通用的、最先应该使用的“@Autowired”的含义是:L...

weixin_39693971的博客 439

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

tep测试工具使用教程

tep是TryEasyPytest的首字母缩写,是一款基于pytest测试框架的测试工具,集成了各种实用的第三方包和优秀的自动化测试设计思想,帮你快速实现自动化项目落地。

ppy0915的博客 1526

TEP 开源项目教程

TEP 开源项目教程 项目介绍 TEP(Test Environment Provisioning)是一个用于自动化测试环境准备的开源项目。它旨在简化测试环境的搭建和管理,使开发者和测试人员能够更高效地进行软件测试。TEP 提供了丰富的功能,包括环境配置、依赖管理、资源分配等,支持多种编程语言和框架。 项目快速启动 安装 首先,确保你已经安装了 Python 3.7 或更高版本。然后,使用以下命令...

gitblog_00774的博客 691

Python pdb调试方法

python中有个pdb模块,使python代码也可以像gdb那样进行调试,一般情况下pdb模块可以在代码内直接使用,也可以通过命令行参数的形式添加该模块进行调试(python -m pdb file.py)。在代码中直接使用pdb模块调试时,import pdb模块后,然后在需要调试的代码出添加pdb.set_trace()命令即可,运行程序后,在运行到次代码处会自动停止,进入调试模式。 常用的调

sheldon的专栏 843

python学习之切片思考

切片可以说是python作为数据处理的一个强大的工具,整个格式如下 [start:end:tep] start表示起始的索引,包括start索引 end表示结束的索引,不包括end索引 tep表示每次的步长,默认为1 >>> a = [1,2,3,4,5,6] >>> print(a[1:3]) [2, 3] >>> print(a[1:...

qq_29983883的博客 252
上一篇: python入门的基础练习(三)
下一篇: 女神周迅离婚,Python分析国内离婚情况,结果触目惊心!
pythonputao
博客等级 码龄6年 60粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值