从0开始python学习-42.requsts统一请求封装

统一请求封装的目的:

1.去除重复的冗余的代码

2. 跨py文件实现通过一个sess来自动关联有cookie关联的接口。

3. 设置统一的公共参数,统一的文件处理,统一的异常处理,统一的日志监控,统一的用例校验等

封装前原本代码:

py文件一:

class TestShop:session = requests.session()def test_start_list(self):method = 'post'url = 'http://101.34.221.219:8010/api.php'params = {'application':'app','application_client_type':'h5','s':'index/index'}res = TestShop.session.request(method=method,url=url,params=params)print(res.json())def test_product_detail(self):method = 'post'url = 'http://101.34.221.219:8010/api.php'params = {'application':'app','application_client_type':'h5','s':'goods/detail'}json = {"goods_id": "12"}res = TestShop.session.request(method=method,url=url,params=params,json=json)print(res.json())

py文件二:

class TestApi:access_token = ''session = requests.session()  def test_phpwind(self):url = 'http://47.107.116.139/phpwind/'res = TestApi.session.request(method="get",url=url)res_token = re.search('name="access_token" value="(.*?)"',res.text)TestApi.access_token = access_token.group(1)print(TestApi.access_token)def test_file_upload(self):url = 'https://api.weixin.qq.com/cgi-bin/media/uploadimg'params = {'access_token':TestApi.access_token}# 封装前文件上传file = {'media':open('D:\\1.jpg','rb')}res = RequestUtil().send_request(method="post", url=url, params=params, files=file)print(res.json())

从这两个代码可以看出,两个py文件都创建了session回话,且在第一个py文件中有params的冗余部分,则可以将请求统一封装到一个session进行调用,去除的冗余的同时,若params内容需要修改也只用修改一个即可,并且将文件上传进行封装后代码中只需要上传文件路径即可

虽然在公共参数中的public_params只作用于一个py文件,但是对于另外一个文件虽然多余了但是不会产生影响

统一封装请求:

class RequestUtil:session = requests.session()def send_request(self,**kwargs):# 公共参数public_params = {'application': 'app','application_client_type': 'h5'}for key,value in kwargs.items():if key == "params":kwargs['params'].update(public_params)if key =='files':# 此时请求接口中的file的值为value.items(),可能会有多个文件,所以是一个列表for file_key,file_value in value.items():# 文件上传中的key则为value[file_key],value为file_valuevalue[file_key] = open(file_value,'rb')# 公共请求res = RequestUtil.session.request(**kwargs)return res

修改后代码一:

class TestShop:token = ''#首页列表接口def test_start_list(self):method = 'post'url = 'http://101.34.221.219:8010/api.php'params = {'s':'index/index'}res = RequestUtil().send_request(method=method,url=url,params=params)print(res.json())# 商品列表接口def test_product_detail(self):method = 'post'url = 'http://101.34.221.219:8010/api.php'params = {'s':'goods/detail'}json = {"goods_id": "12"}res = RequestUtil().send_request(method=method,url=url,params=params,json=json)print(res.json())

修改后代码二:

class TestApi:access_token = ''def test_phpwind(self):url = 'http://47.107.116.139/phpwind/'res = RequestUtil().send_request(method="get",url=url)# print(res.text)# 因为token是在文本中,通过正则表达式的方式获取tokenaccess_token = re.search('name="access_token" value="(.*?)"',res.text)TestApi.access_token = res_token.group(1)print(TestApi.csrf_token)def test_file_upload(self):url = 'https://api.weixin.qq.com/cgi-bin/media/uploadimg'params = {'access_token':TestApi.access_token}# 封装后文件上传,只需要写入路径file = {'media':'D:\\1.jpg'}res = RequestUtil().send_request(method="post", url=url, params=params, files=file)print(res.json())

 文件上传封装:

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

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

相关文章

Kubernetes复习总结(一):Kubernetes内置资源、Device Plugin机制

1、Kubernetes内置资源 1)、Pod Pod是Kubernetes进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于Pod中 Pod可以认为是容器的封装,一个Pod中可以存在一个或者多个容器 1)Pod进程组 在Kubernetes里面…

【动态规划】【字符串】C++算法:140单词拆分

作者推荐 【动态规划】【字符串】扰乱字符串 本文涉及的基础知识点 动态规划 字符串 LeetCode140:单词拆分 II 给定一个字符串 s 和一个字符串字典 wordDict ,在字符串 s 中增加空格来构建一个句子,使得句子中所有的单词都在词典中。以任意顺序 返回…

在电商狂欢中,什么平台更加对商家有利?

我是电商珠珠 近年来,不管是直播电商也好,电商平台也好,都一直朝着向上走的趋势。 我做电商也已经有5年时间了,期间做过天猫,快手、抖店,团队从原来的几个人,扩大到了70。 在22年10月&#x…

Python 面向对象之多态和鸭子类型

Python 面向对象之多态和鸭子类型 【一】多态 【1】概念 多态是面向对象的三大特征之一多态:允许不同的对象对同一操作做出不同的反应多态可以提高代码的灵活性,可扩展性,简化代码逻辑 【2】代码解释 在植物大战僵尸中,有寒冰…

UE4.27_PIE/SIE

UE4.27_PIE/SIE 1. 疑问: 不明白什么是PIE/SIE? 不知道快捷键? 2. PIE/SIE: play in editor/simulate in editor 3. 快捷键: F8: 运行时possess&eject切换 4. 运行操作效果: PIE&SIE

3d全景怎么拍摄?应用领域有哪些?

3d全景技术是综合了VR技术和全景拍摄的一种新型应用技术,通过3D全景技术可以为用户带来720度无死角的观看方式和真实的观看体验,那么3d全景是怎么拍摄制作的呢?应用领域又有哪些呢? 3d全景拍摄制作流程其实不难,常见的…

【Docker】配置阿里云镜像加速器

默认情况下,将来从docker hub (https://hub.docker.com )上下载镜像太慢,所以一般配置镜像加速器。 没有账号的注册一个账号并登录 登录之后点击控制台 查看 cat /etc/docker/daemon.json

腾讯云2核2G3M服务器够用吗?腾讯云2核2G3M云服务器性能评测

阿里云轻量应用服务器2核2G3M带宽优惠价格62元一年,100%CPU性能,3M带宽下载速度384KB/秒,40GB SSD系统盘,月流量200GB,折合每天6.6GB流量,超出月流量包的流量按照0.8元每GB的价格支付流量费,地域…

大数据StarRocks(五) :数据类型

StarRocks 支持数据类型:数值类型、字符串类型、日期类型、半结构化类型、其他类型。您在建表时可以指定以下类型的列,向表中导入该类型的数据并查询数据。 5.1 数值类型 SMALLINT2 字节有符号整数,范围 [-32768, 32767] INT4 字节有符号整…

2024最新Selenium面试题,建议收藏备用!

一.你在TestNG中使用了哪些注解? Test BeforeSuite AfterSuite BeforeTest AfterTest BeforeClass AfterClass BeforeMethod AfterMethod 二.如何从Excel中读取数据? FileInputStream fs new FileInputStream(“excel文件路径”); Workbook …

代码随想录day21 二叉搜索树进阶

530.二叉搜索树的最小绝对差 题目 给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。 示例: 思考 本题有一种笨办法,就是把二叉树的所有结点都存到一个vector里,因为二叉搜索树是左中右排序…

【致远FAQ】V8.0_甘特图能不能实现行表头一级一级显示(树形结构)

问题描述 甘特图能不能实现行表头一级一级显示(树形结构) 问题解决 设置统计时把合并同类型和显示行合计都勾选上就可以了 效果参考

AcWing 851. spfa求最短路AcWing 852. spfa判断负环—spfa算法

问题链接:AcWing 851. spfa求最短路 问题描述 spfa算法是对bellman-ford算法的改进,bellman-ford算法比较笨,要遍历所有边来更新,其实如果当前点没有被更新的话,就不用用当前点来更新他所连接的点了。我们只需要每次更新一个点后…

小游戏实战丨基于Tkinter的五子棋小游戏

文章目录 写在前面Tkinter五子棋系列文章写在后面 写在前面 本期内容:基于tkinter的五子棋小游戏 下载地址:https://download.csdn.net/download/m0_68111267/88700190 实验环境 python3.11及以上pycharmtkinter Tkinter Tkinter是Python的一个标准…

vue2 element 弹出框拖拽会出现一层阴影问题

问题如图所示&#xff1a; 因增加 draggable 属性导致我弹窗表单清空文本框时&#xff0c;从右向左选中字体会出现拖拽阴影效果 去掉 draggable 即可 <template><div class"sys-jobTrigger-container"><el-dialog:visible.sync"state.isShowD…

密码学:一文看懂初等数据加密一对称加密算法

文章目录 对称加密算法简述对称加密算法的由来对称加密算法的家谱数据加密标准-DES简述DES算法的消息传递模型DES算法的消息传递过程和Base64算法的消息传递模型的区别 算法的实现三重DES-DESede三重DES-DESede实现 高级数据加密标准一AES实现 国际数据加密标准-IDEA实现 基于口…

25计算机专业考研经验贴之准备篇

Hello各位小伙伴&#xff0c;大家新年好&#xff01; 马上就要进入寒假假期了&#xff0c;25考研也该提上日程了。今天先跟大家分享一下大家在假期可以先做起来的准备工作。 【选择学校】 择校是个非常重要的内容&#xff0c;因为不同学校的考试内容是不一样的&#xff0c;有些…

SpringBoot基于哨兵模式的Redis(7.2)集群实现读写分离

文章目录 一、前提条件二、SpringBoot访问Redis集群1. 引入依赖2. yaml配置3. 设置读写分离4. 简单的controller 三、运行四、测试1. 写2. 读3. 额外测试 环境 docker desktop for windows 4.23.0redis 7.2Idea 一、前提条件 先根据以下文章搭建一个Redis集群 Docker-Compo…

FreeRTOS 实时操作系统第九讲 - 链表 (数据结构)

一、链表简述 链表是一种物理存储单元上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列节点&#xff08;链表中每一个元素称为节点&#xff09;组成&#xff0c;节点可以在运行时动态生成。每个节点包括两个部分&…

Spring整合MyBatis框架!!!

搭建环境&#xff1a; pom.xml: <properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></pro…