当前位置: 首页 > news >正文

接口自动化:requests

引言:目前软件测试对测试人员的能力要求

  • 业务测试能力:占比5-6成
  • 接口、自动化、性能测试能力:占比4-5成
  • 流程规范:1成

需要综合型的测试人才):业务能力、代码能力、开发思维(封装)

接口测试工具:

  • postman+Newman+Jenkins
  •  jmeter+ant+Jenkins
  • apifox+apifox-cli+Jenkins

接口测试框架

  • python+requests+pytest+allure+yaml+logging+Jenkins框架

1、全面熟练Requests以及底层方法调用逻辑

        1.1:导入requests第三方库

import requests
  • python3中必须先安装requests模块,使用命令为pip install requests

         1.2:底层逻辑

第一层调用:

def get(url, params=None, **kwargs)url:接口地址params:参数,在get请求的url后面传的参数**kwargs:可变长度的字典def post(url, data=None, json=None, **kwargs)url:接口地址data:参数(表单/表格参数,对应postman的 x-www-form-urlencode)json:参数(raw,application/json)postman的四种传参方式:1.form-data(既有表单也有文件上传) files2.x-www-form-urlencode(纯表单格式)data3.raw(json:application/json)(传json格式的参数)json4.binary(application/octrent-stream)(二进制文件) data**kwargs:可变长度的字典def put(url, data=None, **kwargs):url:接口地址data:参数**kwargs:可变长度的字典
def delete(url, **kwargs):url:接口地址**kwargs:可变长度的字典

第二层调用:上面的4个方法其实都是调用的request方法,requests.request()

def request(method, url, **kwargs):

第三层调用:requests.request()调用的是session.request方法

session.request(method=method, url=url, **kwargs)

第四层调用:最终调用的是request() 

def request(self, method,                 请求方式url,                    请求路径params=None,            params参数data=None,              data参数headers=None,           请求头cookies=None,           cookies信息files=None,             文件上传auth=None,              鉴权timeout=None,           超时allow_redirects=True,   重定向proxies=None,           设置代理hooks=None,             钩子stream=None,            文件下载verify=None,            证书验证cert=None,              CA证书json=None):             json参数

         1.3:requests.request() 和 session.request() 的区别:

                我们实际工作中,一般都是用 session.request() 去进行接口测试

  • 前者的每个请求都是独立的
  • 后者会自动去关联所有请求的cookie信息。
class TestRequestApi():Authorization=""sess = requests.session()def test_login(self):url= "https://xxxx/wzlApp/usersLogin/login"headers ={"App-Version":"3.6.9"}data = {"phone":"RwP%2BH9D9DTgD1Qf0j7J%2B3A==","password":"kKe2zs5e7SF%2BuzDkBeFLLQ=="}# 通过session的方法调用res = TestRequestApi.sess.request("post",url=url,data=data,headers=headers)print(res.json())TestRequestApi.Authorization = res.json()['data']['token']

         1.4:Requests响应部分: 

        res.text:返回字符串形式的结果res.json():返回字典形式的结果res.content:返回字节类型的结果res.status_code:返回状态码res.reason:返回状态信息res.cookies:返回cookie信息res.encoding:返回编码格式res.headers:返回响应头res.request.xxx:得到请求数据

2、requests接口自动化测试实战

        2.1:接口关联的三个层次:

  1. 通过类变量保存中间变量实现接口关联 ----不建议用这个方式
  2. 通过单独的文件保存中间变量实现接口关联
  3. 极限封装成零代码的方式实现接口关联 

        2.2:接口关联的两种方式:

1. 正则提取

re.search() 通过正则匹配一个值,用下标[1]取值,如没有匹配到则返回None

re.findall() 通过正则匹配多个值,返回的是list,用下标取值,如没有匹配到则返回None

一般在text文本中,用正则提取:

第一个是正则:'token': '(.*?)'

第二个是字符串对象:res.json()

通过下标[1]提取对应的值

token = re.search("'token': '(.+?)'",res.text).group(1)
print("这是正则提取出来的:"+token)

 re 需要先导包,再引入

2. JsonPath提取 

jsonpath.jsonpath()  返回的是list,用下标取值,如没有匹配到则返回None

        $ 表示根目录
        如:就在根目录下,则直接用.名称提取:res.json(),"$.data"
               到前面的res.json()对象中,通过表达式:"$.data"取值
        如:有嵌套的话:res.json(),"$.[data][token]"

        

        通过下标提取对应的值

        print(data[0])

 jsonpath需要先导包,再引入

        data = jsonpath.jsonpath(res.json(),"$.data[token]") # $ 表示根目录# 就在根目录下,则直接用.名称提取:res.json(),"$.data"# 到前面的res.json()对象中,通过表达式:"$.data"取值# 有嵌套的话:res.json(),"$.[data][token]"# 通过下标提取对应的值print(data[0])

import requests
import jsonpathclass TestRequestApi():Authorization=""def test_login(self):# self,代表当前类的对象# 方法通过对象调用     TestRequestApi().test_login()# method: posturl= "https://xxxx/wzlApp/usersLogin/login"headers ={"App-Version":"3.6.9"}data = {"phone":"RwP%2BH9D9DTgD1Qf0j7J%2B3A==","password":"kKe2zs5e7SF%2BuzDkBeFLLQ=="}res = requests.post(url=url,data=data,headers=headers)print(res.json())TestRequestApi.Authorization = res.json()['data']['token']# $ 表示根目录# 就在根目录下,则直接用.名称提取:res.json(),"$.data"# 到前面的res.json()对象中,通过表达式:"$.data"取值# 有嵌套的话:res.json(),"$.[data][token]"data = jsonpath.jsonpath(res.json(),"$.data[token]")print("-----登录-----哈哈哈哈哈哈哈哈")print("这是直接获取的token:" + TestRequestApi.Authorization)print(data[0])def test_notice(self):url= "https://xxxx/wzlApp/users/insertUserFeedback"headers ={"App-Version":"3.6.9","Authorization": TestRequestApi.Authorization}data = {"feedback":"通过接口自动化脚本提交的意见反馈,数字符--xxxx---测试。。通过接口自动化脚本提交的意见反馈,数字字符--xxxxx---测试。。"}res = requests.post(url=url,data=data,headers=headers)print("-----意见反馈-----哈哈哈哈哈哈哈哈")print(res.json())def test_upload(self):url = "https://xxxx/commonApi/upload/uploadPrivate"headers = {"App-Version": "3.6.9","Authorization": TestRequestApi.Authorization}data = {"file":open("D:/Scripts/workspace/demo/results/image/logo.png","rb")}res = requests.post(url=url, files=data, headers=headers)print("-----上传文件接口-----哈哈哈哈哈哈哈哈")print(res.json())

3、接口自动化测试框架的封装(统一请求封装)

1. 去重很多重复的、冗余的代码;

2. 实现统一的异常处理以及日志监控 

PS: 封装的一般放在common包中~~~ requests_util.py(自定义)

---当该py文件被引用,或者类被其他模块引用时,意味着导入这个类的所有用例,会导致用例的执行冗余;

通过类变量保存中间变量实现接口关联 ----不建议用这个方式(见上  2.1)

解释:所以变量一般不要定义为类变量,如果该变量被其他模块导入并执行时,也会执行该类的用例。

---可能写的有点乱,但希望意思能表达清晰。

相关文章:

接口自动化:requests

引言:目前软件测试对测试人员的能力要求 业务测试能力:占比5-6成接口、自动化、性能测试能力:占比4-5成流程规范:1成(需要综合型的测试人才):业务能力、代码能力、开发思维(封装&…...

极简TypeScript教程--数据类型

TypeScript最大的特点就是有类型检测,格式为let/const 标识符: 数据类型 赋值;例子:let msg: string Hello World这样msg这个变量就有了字符串类型,如果再给他赋值为数字类型,就会在编译期报错。变量的类型推导在开发中,有时候为了方便起见…...

JAVA开发测试(jmeter如何测试性能与估算)

对C的业务网站或应用,进行性能测试来评估使用服务器情况是必不可少的一项工作。 一、测试工具: Apache JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能,是Apache组织开发的…...

【新解法】华为OD机试 - 求解连续数列 | 备考思路,刷题要点,答疑,od Base 提供

华为 OD 清单查看地址:blog.csdn.net/hihell/category_12199275.html 求解连续数列 | 备考思路,刷题要点,答疑,od Base 提供 题目 已知连续正整数数列{K}=K1,K2,K3… Ki的各个数相加之和为S, i = N (0 < S < 100000, 0 < N < 100000), 求此数列K。 输入 输…...

Python3 File(文件) 方法

Python3 File(文件) 方法 open() 方法 Python open() 方法用于打开一个文件&#xff0c;并返回文件对象。 在对文件进行处理过程都需要使用到这个函数&#xff0c;如果该文件无法被打开&#xff0c;会抛出 OSError。 注意&#xff1a;使用 open() 方法一定要保证关闭文件对…...

APP渗透抓包

APP渗透抓包1.APP渗透测试原理2.安装安卓模拟器抓包2.1.安装模拟器2.2.设置代理下载证书2.2.1.burp suite设置代理2.2.2.浏览器设置代理2.2.3.下载证书2.3.模拟器安装证书2.3.1.移动证书2.3.2.证书设置2.4.设置代理2.4.1.设置burp suite代理2.4.2.夜神模拟器代理2.5.抓包测试2.…...

力扣(LeetCode)414. 第三大的数(2023.02.16)

给你一个非空数组&#xff0c;返回此数组中 第三大的数 。如果不存在&#xff0c;则返回数组中最大的数。 示例 1&#xff1a; 输入&#xff1a;[3, 2, 1] 输出&#xff1a;1 解释&#xff1a;第三大的数是 1 。 示例 2&#xff1a; 输入&#xff1a;[1, 2] 输出&#xff1a;2…...

Spring底层

一、什么是Spring&#xff1f;谈谈你对IOC和AOP的理解。Spring&#xff1a; 是一个企业级java应用框架&#xff0c;他的作用主要是 简化软件的开发以及配置过程&#xff0c;简化项目部署环境。Spring的有点&#xff1a;1、Spring低侵入设计&#xff0c;对业务代码的污染非常低。…...

Cache-Control 常见字段

Cache-Control 常见字段 参考&#xff1a;https://blog.csdn.net/qq_41996454/article/details/108644436 Cache-Control 可以在请求头或者响应头中设置&#xff0c;并且可以组合使用多种指令 no-cache 和 no-store 用作控制缓存&#xff0c;被服务器通过响应头 Cache-Contro…...

Flink Checkpoint 中的通用增量Checkpoint

文章目录知识点状态Flink容错恢复周期性的 Checkpoint错误检测 Failure Detected重新调度 Re-scheduling状态恢复 State Recovery通用增量Checkpoint知识点 状态 算子需要记录之前数据处理的中间结果&#xff0c;把中间结果暂时缓存在算子的内部&#xff0c;这就是算子的状态…...

金三银四必看的软件测试面试题宝典,背完offer随便拿

怎么来设计测试方案根据测试需求&#xff08;包括功能需求和非功能性需求&#xff09;&#xff0c;识别测试要点&#xff0c;识别测试环境要求&#xff0c;安排测试轮次&#xff0c;根据项目计划和开发计划做整体的测试安排。 被测试的特性&#xff1a;通过对需求规格说明书进行…...

企业电子招标采购系统源码Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis

一、立项管理 1、招标立项申请 功能点&#xff1a;招标类项目立项申请入口&#xff0c;用户可以保存为草稿&#xff0c;提交。 2、非招标立项申请 功能点&#xff1a;非招标立项申请入口、用户可以保存为草稿、提交。 3、采购立项列表 功能点&#xff1a;对草稿进行编辑&#x…...

扬帆优配“数字经济+实体经济”融合发展,行业增长空间大!

组织以为&#xff0c;数字经济已经逐步成为工业商场和资本商场的共同主题。 2月16日&#xff0c;国家发改委在《求是》杂志发表文章《努力推进经济完成质的有效提升和量的合理增加》。文章指出要加速开展数字经济&#xff0c;加速实施“东数西算”等重大工程&#xff0c;推进数…...

分享82个HTML电脑主机模板,总有一款适合您

分享82个HTML电脑主机模板&#xff0c;总有一款适合您 82个HTML电脑主机模板下载链接&#xff1a;https://pan.baidu.com/s/13DGOCgvbxSksMPwJzi2z0g?pwdl0mi 提取码&#xff1a;l0mi Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 云虚拟主机运营商网站模板…...

.htaccess语法教程

RewriteEngine On RewriteCond %{HTTP_HOST} ^(www\.)?xxx\.com$ RewriteCond %{REQUEST_URI} !^/blog/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /blog/$1# 没有输入文件名的默认到到首页 RewriteCond %{HTTP_HOST} ^(w…...

C++ ——多态 下 (图解多态原理、虚函数的再认知)

目录 一、抽象类 1&#xff09;抽象类定义 2&#xff09;抽象类的继承 3&#xff09;抽象类实现多态 4&#xff09;抽象类的好处 二、多态的实现原理 1&#xff09;虚函数的存储方式 2&#xff09;子类中虚函数的存储方式 ① 子类将基类中的虚表原封不动的拷贝到自己的…...

cocos creater 3.x 构建QQ小游戏

一、目前 cocos creater 不支持直接构建QQ小游戏&#xff0c;需要构建成微信小游戏&#xff0c;然后修改成QQ小游戏 二、构建QQ小游戏不能勾选 分离引擎 的选项&#xff0c;勾选分离引擎的选项&#xff0c;需要安装cocos微信小游戏引擎插件&#xff0c;这个插件似乎目前只支持微…...

ArcGIS笔记3_如何编辑、修改和导出散点数据

本文目录前言Step 1 在ArcGIS中添加并显示坐标点Step 2 将坐标数据保存成shp文件Step 3 编辑或修改坐标数据Step 4 导出修改后的数据&#xff1a;法一&#xff1a;通过转换工具导出Step 5 导出修改后的数据&#xff1a;法二&#xff1a;通过dBASE表导出前言 本博文更多针对Arc…...

Computer Graphics From Scratch - Chapter 8

系列文章目录 简介&#xff1a;Computer Graphics From Scratch-《从零开始的计算机图形学》简介 第一章: Computer Graphics From Scratch - Chapter 1 介绍性概念 第二章&#xff1a;Computer Graphics From Scratch - Chapter 2 基本光线追踪 第三章&#xff1a;Computer Gr…...

金三银四”不香了?

“金三银四”不香了&#xff1f; “金三银四”这个词&#xff0c;放在三年前&#xff0c;勾勒的是无数踌躇满志的年轻人涌向职场&#xff0c;大中小企业血液更新与流动的鲜活画面。 尤其是互联网行业&#xff0c;这个在过去20多年里极大改变文化交流方式与商业形态的领域&…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...