接口测试06 -- pytest接口自动化封装Loggin实战

2024-02-13 02:20

本文主要是介绍接口测试06 -- pytest接口自动化封装Loggin实战,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 接口关键字封装

1.1 基本概念

接口关键字封装是指:将接口测试过程中常用的操作、验证封装成可复用的关键字(或称为函数、方法),以提高测试代码的可维护性和可复用性。

1.2 常见的接口关键字封装方式

1. 发送请求:封装一个函数,接受参数如请求方法、URL、请求头、请求体等,使用相应的库发送请求,如requests库或HttpClient库。
---------------->>>>
2. 响应验证:封装一个函数,接受参数如响应对象、预期结果等,通过断言或其他方式验证响应的状态码、响应体等是否符合预期。
---------------->>>>
3. 数据提取:封装一个函数,接受参数如响应体、提取表达式等,使用正则表达式XPath、JSONPath等方式提取需要的数据,并返回提取结果。
---------------->>>>
4. 数据保存:封装一个函数,接受参数如文件路径、数据等,将数据保存到指定
的文件中,如Excel、CSV、数据库等。
---------------->>>>
5. 参数化配置:封装一个函数,接受参数如环境配置、数据文件路径等,根据不
同的环境或数据文件读取对应的配置信息,如接口URL、认证信息等。
---------------->>>>
封装的目的:
通过封装接口关键字,可以使接口测试代码更简洁、可读性更高,并且提供了灵活性和扩展性,方便维护和管理测试代码。

2. 接口封装实战应用

2.1 接口关键字封装代码示例 

这是接口关键字驱动类,用于提供自动化接口测试的关键字方法。
主要是实现常用的关键字内容,并定义好所有的参数内容即可
接口中常用关键字:
1.各种模拟请求方法:Post/get/put/delete/header/....
2.集合Allure,可添加@allure.step,这样在自动化执行的时候,Allure报告可以直接捕捉相关的执行信息,让测试报告更详细
3.根据需求进行断言封装:jsonpath、数据库断言。
----------------------->>>
封装get、post请求示例:
import requests
import jsonpath
import json"""
关键字驱动/基类/工具类:
1. 发送请求:8种:post、get、put、delete...
2. 提取数据
补充知识点:方法的缺省值:params=None (默认值),如果没有传参则默认为None
"""class ApiKey:def get(self, url, params=None, **kwargs):"""发送get请求:param url:接口请求url:param params: 拼接在url的参数:param kwargs: 其它的参数:return: 返回请求后的数据"""print(">>>>>>开始发送Get请求")return requests.get(url=url, params=params, **kwargs)def post(self, url, data=None, json=None, **kwargs):"""发送post请求:param url: 接口请求url:param data: data的请求数据:param json: json的请求数据:param kwargs: 其它的参数:return: 返回请求后的数据"""print(">>>>>>开始发送Post请求")res = requests.post(url=url, data=data, json=json, **kwargs)print(">>>>>>响应数据为:", res.json())return res

2.2 封装实现完整的登录接口

基于上面的封装代码:

实现一个项目的登录接口(post请求)、并添加josnpath提取响应信息

import requests
import jsonpath
import jsonclass ApiKey:def post(self, url, data=None, json=None, **kwargs):"""发送post请求:param url: 接口请求url:param data: data的请求数据:param json: json的请求数据:param kwargs: 其它的参数:return: 返回请求后的数据"""print(">>>>>>开始发送Post请求")res = requests.post(url=url, data=data, json=json, **kwargs)print(">>>>>>响应数据为:", res.json())return resdef get_text(self, response, key):"""提取json当中的某个值:param response: 需要提取的json数据,比如:{"msg":"登录成功"}:param key: 对应要提取的jsonpath,比如: $.msg:return: 返回提取数据之后的【第一个值】"""print(">>>>>>开始提取JsonPath响应数据")value_list = jsonpath.jsonpath(response, key)print(">>>>>>提取数据响应为:", value_list[0])return value_list[0]# 主函数:
if __name__ == '__main__':# 1. 实例化对象:ApiKeyak = ApiKey()# 2. 通过对应的类调用对应的方法 --四要素url = "http://xxx.com/index.php?s=/api/user/login"# 公共参数pulic_data = {"application": "app", "application_client_type": "weixin"}# 请求参数-- body (你的body数据是要以json进行提交,参数:json)data = {"accounts": "hailey", "pwd": "hailey123", "type": "username"}res = ak.post(url=url, params=pulic_data, data=data)# 3. 提取数据text = ak.get_text(res.json(), "$.msg")

为了代码的健壮性,添加提取数据的格式判断:

如果返回的响应数据格式是json字符串"{"msg":"登录成功"}",则进行类型转换:

import requests
import jsonpath
import jsonclass ApiKey:def post(self, url, data=None, json=None, **kwargs):"""发送post请求:param url: 接口请求url:param data: data的请求数据:param json: json的请求数据:param kwargs: 其它的参数:return: 返回请求后的数据"""print(">>>>>>开始发送Post请求")res = requests.post(url=url, data=data, json=json, **kwargs)print(">>>>>>响应数据为:", res.json())return resdef get_text(self, response, key):"""提取json当中的某个值:param response: 需要提取的json数据,比如:{"msg":"登录成功"}:param key: 对应要提取的jsonpath,比如: $.msg:return: 返回提取数据之后的【第一个值】"""# 为了代码的健壮性,添加判断是否为字符串(防止响应信息格式为json字符串)if isinstance(response,str):#是字符串,我就让它转一下类型response = json.loads(response)print(">>>>>>开始提取JsonPath响应数据")value_list = jsonpath.jsonpath(response, key)print(">>>>>>提取数据响应为:", value_list[0])return value_list[0]# 主函数:
if __name__ == '__main__':# 1. 实例化对象:ApiKeyak = ApiKey()res ='{"msg":"登录成功"}'text = ak.get_text(res, "$.msg")

2.3 测试用例封装

这里,我们使用pytest框架进行测试用例的编写与封装

在之前Pytest的学习中,我们了解到:

需要将测试用例新建一个项目文件,一个是用例主体,放测试用例,另一主体是用例运行main文件;之前pytest使用详情戳:pytest -- 基本使用详解_pytest 具体能做哪些事情-CSDN博客、pytest -- 进阶使用详解_怎么通过pytest-html插件查看pytest结果-CSDN博客

现在我们在项目文件下新增一个已经封装好的登录功能文件(即上面的示例代码)

 文件结构

测试用例 

在testcase文件下,首先新建一个'test_ds_01.py'文件(登陆的测试用例):

# 导入:从项目根目录的下一级开始写
from Requests_demo.day06.PytestFrame.api_keyword.api_key import ApiKey# 方法:要以test 【默认的规则】
def test_loging():# 1. 实例化对象:ApiKeyak = ApiKey()# 2. 通过对应的类调用对应的方法 --四要素url = "http://xxxx.com/index.php?s=/api/user/login"pulic_data = {"application": "app", "application_client_type": "weixin"}data = {"accounts": "hailey", "pwd"

这篇关于接口测试06 -- pytest接口自动化封装Loggin实战的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/704229

相关文章

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例

《PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例》词嵌入解决NLP维度灾难,捕捉语义关系,PyTorch的nn.Embedding模块提供灵活实现,支持参数配置、预训练及变长... 目录一、词嵌入(Word Embedding)简介为什么需要词嵌入?二、PyTorch中的nn.Em

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

Spring Boot从main方法到内嵌Tomcat的全过程(自动化流程)

《SpringBoot从main方法到内嵌Tomcat的全过程(自动化流程)》SpringBoot启动始于main方法,创建SpringApplication实例,初始化上下文,准备环境,刷新容器并... 目录1. 入口:main方法2. SpringApplication初始化2.1 构造阶段3. 运行阶

Spring Boot3.0新特性全面解析与应用实战

《SpringBoot3.0新特性全面解析与应用实战》SpringBoot3.0作为Spring生态系统的一个重要里程碑,带来了众多令人兴奋的新特性和改进,本文将深入解析SpringBoot3.0的... 目录核心变化概览Java版本要求提升迁移至Jakarta EE重要新特性详解1. Native Ima

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

SpringBoot集成MyBatis实现SQL拦截器的实战指南

《SpringBoot集成MyBatis实现SQL拦截器的实战指南》这篇文章主要为大家详细介绍了SpringBoot集成MyBatis实现SQL拦截器的相关知识,文中的示例代码讲解详细,有需要的小伙伴... 目录一、为什么需要SQL拦截器?二、MyBATis拦截器基础2.1 核心接口:Interceptor

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

Python自动化批量重命名与整理文件系统

《Python自动化批量重命名与整理文件系统》这篇文章主要为大家详细介绍了如何使用Python实现一个强大的文件批量重命名与整理工具,帮助开发者自动化这一繁琐过程,有需要的小伙伴可以了解下... 目录简介环境准备项目功能概述代码详细解析1. 导入必要的库2. 配置参数设置3. 创建日志系统4. 安全文件名处

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.