接口自动化-requests库

news2024/11/13 14:29:41

requests库是用来发送请求的库,本篇用来讲解requests库的基本使用。

1.安装requests库

pip install requests

2.requests库底层方法的调用逻辑

(1)get / post / put / delete 四种方法底层调用 request方法
在这里插入图片描述
注意:data和json都可以作为Post请求的参数,但是使用时机不同。当传参是json类型时,使用json,当传参是文件时使用files,其他时候使用data。

(2)request方法底层调用session.request方法
在这里插入图片描述

(3)因为get / post / put / delete 四种方法不能对有cookie关联的接口进行自动关联,而session.request方法可以进行自动管理,所以常用session.request方法发送请求。


3.session.request方法的参数,常用的有:


参数说明
method请求方法
url请求路径
params=Noneget请求传参
data=Nonepost或put请求传参
json=Nonepost请求传参
headers=None请求头
cookies=NoneCookie
files=None文件上传

4.接收响应

session.request方法发送请求后会返回响应,接收响应时需要根据响应的类型来接收:

接收方式说明
res.text返回文本信息
res.json()返回json格式
res.content返回的字节内容
res.status_code返回的状态码
res.reason返回的状态信息
res.cookies返回的coolie
res.encoding返回的编码格式
res.headers返回的响应头

5.接口关联

当后一个接口的参数需要从前一个接口的响应数据中获取时,就需要进行接口关联。

实现接口关联有三种方式:

  1. 通过类变量保存中间变量
  2. 通过单独文件保存中间变量
  3. 极限封装成工具一样,只需要通过表达式

首先说明如何通过类变量保存中间变量?
只需要从前一个接口中提取到变量设置为类变量,就可以通过类名在第二个接口中调用了。

class Testapi:
    access_token = ""

而从响应中提取变量有两种方式:

  1. 正则表达式提取(适用于提取文本结果)
  2. JsonPath提取 (适用于提取json结果)

正则表达式提取变量的方法有两种:

  • re.search() 提取单个值,通过下标取值
  • re.findall() 提取多个值,通过下标取值

re.search(表达式,对象)

result = res.text
Testapi.access_token = re.search('xxx(.*?)xxx',result).group(1)

JsonPath提取变量只有一个方法:
jsonpath.jsonpath(对象,表达式)

result = res.json()
value = jsonpath.jsonpath(result,”$.access_token”)

jsonPath表达式规则:

规则解释
$根节点
.子节点
递归取子节点
[]代表取列表中的值,下标从0开始

6.统一的请求封装

请求四要素:请求方法、请求路径、请求参数、请求头
响应四要素:响应码、响应信息、响应内容、响应头

所有请求的发送都是组织请求四要素然后发送,这种相同类型的操作可以进行统一的封装,减少冗余代码,同时可以对请求进行统一管理,如统一异常处理,统一日志监控。

在统一封装请求时,可以直接将参数传递给session.request()方法的可变长度参数,就不需要考虑参数的类型了。

# 封装
class RequestUtils:
    sess = requests.session();
    # 统一发送请求
    def all_send_request(self,**kwargs):
        res = RequestUtils.sess.request(**kwargs)
        print(kwargs["method"])#获取请求方式
        return res
class Testapi:
	# 调用
    def test_file_upload(self):
        url=""
        datas={"meida":open("E:\\111.png","rb")} # 文件的字节流
        res = RequestUtils().all_send_request(method="post",url=url,files=datas)

封装之后会发现第一种通过类变量保存中间变量,在跨文件使用时会导致用例出错。

为了解决这个问题,我们可以使用第二种方法:通过单独的文件保存中间变量,来实现接口关联。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1678666.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络安全产业的现在时和将来时

由于之前新冠疫情在全球肆虐,网络安全行业面临着不少挑战。例如,企业在被迫数字转型过程中,造成数据泄露威胁加剧。另一方面,攻击者的攻击手段和方式也日趋复杂和成熟,加密勒索和针对新冠疫情的网络钓鱼层出不穷。 基…

玩转Matlab-Simscape(初级)- 06 - 基于Solidworks、Matlab Simulink、COMSOL的协同仿真(理论部分2)

** 玩转Matlab-Simscape(初级)- 06 - 基于Solidworks、Matlab Simulink、COMSOL的协同仿真(理论部分2) ** 目录 玩转Matlab-Simscape(初级)- 06 - 基于Solidworks、Matlab Simulink、COMSOL的协同仿真&am…

togaf培训简介2

1.定义 2.ADM 业务下降期不要瞎折腾,上升期配合业务做一些改革? 项目交付物不能是聊天记录、PPT什么的,最起码是邮件。 3.架构内容框架 或者叫:企业统一体。 包括:企业连续性和解决方案连续性 方案和工具的解耦很大程…

FPGA - GTX收发器-K码 以及 IBERT IP核使用

一,前言 在FPGA - Xilinx系列高速收发器---GTX中详细介绍了GTX的基础知识,以及IP核的调用,下面将补充一下GTX在使用中的高速串行数据流在接收和发送时的控制与对齐(K码),以及高速接口GTX,如果G…

CRMEB开源打通版/标准版v4电商商城系统小程序发布之后无法生成海报问题

小程序产品分销二维码生成不了 开发者工具可以生成海报,但是发布之后无法生成 1.在开发者工具中,将不校验合法域名关闭 2.点击生成海报,查看console 3.将域名填写到微信公众平台小程序的download合法域名中 网址微信公众平台

如何利用R包进行主成分分析和可视化

一. 使用R包“FactoMineR”进行主成分分析(PCA) 基本步骤如下: 安装和加载包:如果尚未安装,首先安装“FactoMineR”包,然后加载它: install.packages("FactoMineR")library(FactoM…

记录一下自己的宏碁暗影骑士电脑的属性

TOC 前言 没有前言。 参考博文 怎么查自己电脑服务器信息吗,如何查看自己电脑的服务器 一、cmd 看到服务器型号 wmic csproduct get name查询CPU个数 按照博主的方法,我出现了报错。 在 Windows 上,您可以通过 PowerShell 来执行类似的操作。您可以…

记一次洛谷刷题让人摸不到头脑的报错——Runtime Error.Received signal 6: Aborted / IOT trap.

报错题目 外星密码 - 洛谷 具体报错信息 Runtime Error.Received signal 6: Aborted / IOT trap. 错误代码 #include <iostream> #include <cstring> using namespace std;string sol() {string s "";string t "";char c ;int n 0;whi…

怎么做私域?先来了解私域运营模式!

现在&#xff0c;很多企业都在做私域&#xff0c;但仍旧有很多人会问&#xff1a;我的私域到底要怎么做&#xff1f; 关于这个问题&#xff0c;不同产品无论在消费频次与客单价上&#xff0c;还是在决策链路的长度和复杂度上&#xff0c;都有巨大的差异&#xff0c;消费者需要…

怎么将视频转成图片?看看这个网站

在日常生活中我们常常会在一些特定的场合下想要将一些视频中某个场合瞬间提取出来做成动态图片。Gif动图作为我们日常生活、工作必不可少的&#xff0c;想要通过自己制作这种有动态效果的图片就可以用gif动画制作网站&#xff0c;不用下载软件&#xff0c;手机、pc都可以在线操…

使用Python批量复制文件夹及其子文件夹下的指定文件

目录 一、引言 二、Python文件操作基础 三、复制文件夹及其子文件夹下的指定文件 四、案例分析 五、注意事项与扩展 六、结论 一、引言 在数据处理和文件管理的日常工作中&#xff0c;我们经常需要复制文件夹及其子文件夹下的特定文件。手动操作不仅效率低下&#xff0c…

2024年网络安全威胁

随着2024年的到来&#xff0c;数字世界的版图正在以前所未有的速度扩张&#xff0c;引领我们进入一个技术革新的新时代。然而&#xff0c;这飞速的发展同时也催生了一系列错综复杂的网络安全挑战。在这个数字平台与我们生活日益紧密交织的时代&#xff0c;深入了解这些新兴的威…

掌握web控件定位技巧,提升页面操作效率!

在做 Web 自动化时&#xff0c;最根本的就是操作页面上的元素&#xff0c;首先要能找到这些元素&#xff0c;然后才能操作这些元素。工具或代码无法像测试人员一样用肉眼来分辨页面上的元素。那么要如何定位到这些元素&#xff0c;本章会介绍各种定位元素的方法。 web 控件定位…

穿越网络界限:探索NAT IPv4的神秘面纱

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 穿越网络界限&#xff1a;探索NAT IPv4的神秘面纱 前言NAT IPv4概述NAT IPv4的类型NAT IPv4的工作流程NAT IPv4的局限性和挑战 前言 在我们日常的网络使用中&#xff0c;我们或多或少都会遇到NAT&…

Python代码:二、多行输出

1、题目 将字符串 Hello World! 存储到变量str1中&#xff0c;再将字符串 Hello Nowcoder! 存储到变量str2中&#xff0c;再使用print语句将其打印出来&#xff08;一行一个变量&#xff09;。 2、代码 import sys str1 Hello World! str2 Hello Nowcoder! print (str1,st…

【Kafka】2.深入理解Kafka事件流平台及其核心概念

1.事件流(Event streaming) 事件流是人体中枢神经系统的数字化的等价物。它是构建“始终在线”世界的技术基础&#xff0c;在这个世界中&#xff0c;企业越来越多地被定义为软件化和自动化&#xff0c;而软件的用户本身也是软件。 从技术上讲&#xff0c;事件流是从数据库、传…

数据结构(十五)----排序算法(2)

目录 一.选择排序 1.简单选择排序 2.堆排序 •建立大根堆 •基于大根堆进行排序 堆排序算法效率&#xff1a; 堆排序算法稳定性&#xff1a; 3.堆的插入和删除 •在堆中插入新元素 •在堆中删除元素 二.归并排序 归并排序算法效率&#xff1a; 归并排序算法的稳定…

基于卷积神经网络的一维信号降噪(简单版,MATLAB)

简单演示一下基于卷积神经网络的一维信号降噪&#xff0c;有个大致印象即可。 %% Plot the previous training CNN. set_plot_defaults(on) load(denoiser_sparse.mat); h1{1} double(conv1); h1{2} double(conv2); h1{3} reshape(double(conv3),[8,1,17]); figure(1) [r,c…

又一款爆火AI游戏诞生!《换你来当爹》做对了什么?| ShowMeAI体验报告

社区里几百人玩一款AI游戏的场面&#xff0c;值得记录一下&#xff01; 大模型游戏化极度看重〖有趣〗程度。 可有趣的灵魂那么难得&#xff0c;以至于只要一眼&#xff0c;我们就在产品的海洋里发现了 ta 。 1. 有趣的灵魂在发疯疯疯 《换你来当爹》是一款全员发疯的AI游戏&am…

分页查询PageHelper插件分页条件查询(xml映射文件,动态SQL)

黑马程序员JavaWeb开发教程 文章目录 一、分页查询-分析二、分页查询-实现1. 实现思路1.1 controller1.2 service1.3 mapper 1.4 postman测试接口 三、分页查询-PageHelper插件1. 引入pageHelper插件的依赖2. 修改原来的代码2.1 mapper2.2 serviceimpl2.3 postman测试接口 四、…