当前位置: 首页 > 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多年里极大改变文化交流方式与商业形态的领域&…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

生成 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…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

32单片机——基本定时器

STM32F103有众多的定时器&#xff0c;其中包括2个基本定时器&#xff08;TIM6和TIM7&#xff09;、4个通用定时器&#xff08;TIM2~TIM5&#xff09;、2个高级控制定时器&#xff08;TIM1和TIM8&#xff09;&#xff0c;这些定时器彼此完全独立&#xff0c;不共享任何资源 1、定…...

前端调试HTTP状态码

1xx&#xff08;信息类状态码&#xff09; 这类状态码表示临时响应&#xff0c;需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分&#xff0c;客户端应继续发送剩余部分。 2xx&#xff08;成功类状态码&#xff09; 表示请求已成功被服务器接收、理解并处…...

深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙

WebGL&#xff1a;在浏览器中解锁3D世界的魔法钥匙 引言&#xff1a;网页的边界正在消失 在数字化浪潮的推动下&#xff0c;网页早已不再是静态信息的展示窗口。如今&#xff0c;我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室&#xff0c;甚至沉浸式的V…...