Python 接口自动化 —— requests框架

1.前言

Python内置的urllib模块,也可以用于访问网络资源。但是,它用起来比较麻烦,而且,缺少很多实用的高级功能。因此我们使用 requests 模块进行进行接口测试。

requests官方文档资料地址:http://cn.python-requests.org/zh_CN/latest/

2.环境安装

cmd(win+R快捷键)输入:

 pip install requests -i https://pypi.douban.com/simple

提示以下信息表示安装成功。

3.requests发送请求

3.1 get请求无参数param

  1. 将安装好的requests模块导入后,通过GET访问一个URL地址的网页页面
  2. 这里的 r 也就是 response,请求后的返回值,可以调用 response 里的 status_code 方法查看状态码
  3. 状态码 200 只能说明接口请求发送成功了,并不能说明功能一定是 OK 的,一般要查看响应的内容,r.text 返回文本信
# -*- coding:utf-8 -*-# 导入 requests 模块
import requests
# 定义 url
url = 'http://www.cnblogs.com/wwho'
# 请求博客园
r = requests.get(url=url)
# 打印状态码
print(r.status_code)
# 打印文本
print(r.text)

3.2 get请求有参数param

url地址为:http://apis.juhe.cn/simpleWeather/query?city=深圳&key=xxx
参数:city=深圳&key=xxx

可以以字典的形式传参:
{"city": "深圳", "key": "xxx"}

多个参数格式:

 {"key1": "value1", "key2": "value2", "key3": "value3"}

(r.url获取当前url地址,可以检查是否传参成功)

代码:

# -*- coding:utf-8 -*-# 导入 requests 模块
import requests# 定义 url
url = 'http://apis.juhe.cn/simpleWeather/query'
par = {"city": "深圳","key": "4611a7abae4afe573fd7ca751d9d423a"}result = requests.get(url=url, params=par)
# 打印文本
print(result.text)

3.3定制请求头

一个完整的get请求,应该包括请求行(url) 和请求头(headers)、请求参数(params),
什么时候要加请求头呢,如果你不确定的话最好加上去。

3.4 response返回信息

response返回信息

-- r.status_code   # 响应状态码-- r.content   # 字节方式的响应体,会自动为你解码 gzip 和deflate 压缩-- r.headers  # 以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回 None-- r.json()  # Requests 中内置的 JSON 解码器,requests的方便之处还在于,对于特定类型的响应,例如JSON,可以直接获取-- r.url  # 获取 url-- r.encoding  # 编码格式,requests自动检测编码-- r.cookies  # 获取 cookie-- r.raw  # 返回原始响应体-- r.text #字符串方式的响应体,会自动根据响应头部的字符编码进行解码-- r.raise_for_status()  # 失败请求(非 200 响应)抛出异常

以上就是requests模块主要的返回格式。

3.5 post请求

讲post请求之前 先讲一下 requests.session()
requests.session() 获取 requests的session对象,简单来说就相当于一个微型浏览器,能自动保持登录态。所以一般对于 cookie – session 保持登录态的系统就可以使用
requests.session()

使用方法:后续的请求都使用session即可

Post请求首先要注意的就是body的数据类型

常见的有四种类型,但是不止四种:

  1. 第一种:application/json: {“key1“:”value1”,“keyt2":“value2"}
  2. 第二种:application/x-www-form-urlencoded:name1= value1&name2=value2
  3. 第三种:multipart/form-data:这一种是表单格式的
    (文件上传,图片上传等混合式)
  4. 第四种:text/xml

examples.getStateName

Body为x-www-form-urlencoded类型

怎么知道body是什么类型?

  1. 接口文档有说明
  2. 自己抓包看

直接通过抓包就可以看出post请求的数据类型,如下图就是x-www-form-urlencoded类型

传data参数就行(无需转json)

代码:

# -*- coding:utf-8 -*-
# @File:sms.py
import requests
host = 'http://127.0.0.1:8002'
session = requests.session()  # 相当于微型浏览器,保持登录态
url = host + '/api/mgr/signin'  # 定义url
body = {"username": "byhy","password": "88888888"
}
resp = session.post(url=url, data=body)status_code=resp.status_code  #获取响应状态码
print('响应状态码:{}'.format(status_code))text=resp.text  # 获取响应内容,结果类型是字符串
print('响应内容:{}'.format(text))json=resp.json()  # 获取响应内容,结果是字典类型
print('响应内容:{}'.format(json))resp_headers=resp.headers  # 获取响应headers
print('响应header:{}'.format(resp_headers))

Body为json类型

​json=body: 这个表示自动将python里面的字典,转化为json格式参数了。关于字典和json的种种关系,后面专门写篇文章讲一下。

代码:

 # -*- coding:utf-8 -*-
import requests
host = 'http://127.0.0.1:8002'
session = requests.session()  # 相当于微型浏览器,保持登录态
url = host + '/api/mgr/signin'  # 定义登录的 url
body = {"username": "byhy","password": "88888888"
}resp = session.post(url=url, data=body)  # 发送登录请求url_add_customer = host + '/api/mgr/customers'  # 新建客户的 url
body = {"action":"add_customer","data":{"name":"tester","phonenumber":"13345679934","address":"深圳市南山区"}
}
resp = session.post(url=url_add_customer, json=body)
print(resp.text)  # 打印响应文本

3.6 put请求

put 请求的接口做法跟 post请求的差不多的,只是把post 请求改为 put请求。一样要看请求的格式。如果是 json 格式,也是用json接,Form格式用data接。

代码:

# -*- coding:utf-8 -*-
# @Time:2021/4/16 9:54
# @File:sms.py
import requests
host = 'http://127.0.0.1:8002'
session = requests.session()  # 相当于微型浏览器,保持登录态
url = host + '/api/mgr/signin'  # 定义登录的 url
body = {"username": "byhy","password": "88888888"
}
resp = session.post(url=url, data=body)url_modify_customer = host + '/api/mgr/customers'  # 修改客户的 url
body = {"action":"modify_customer","id": 52,"newdata":{"name":"深圳市桥北医院","phonenumber":"13345678888","address":"深圳市中医院"}
}
resp = session.put(url=url_modify_customer, json=body)
print(resp.text)  # 打印修改客户接口响应的文本

3.7 delete请求

delete 请求的接口做法跟 post请求的差不多的,只是把post 请求改为 delete请求。一样要看请求的格式。如果是 json 格式,也是用json接,Form格式用data接。

代码:

# -*- coding:utf-8 -*-
# @Time:2021/4/16 9:54
# @File:sms.py
import requests
host = 'http://127.0.0.1:8002'
session = requests.session()  # 相当于微型浏览器,保持登录态
url = host + '/api/mgr/signin'  # 定义登录的 url
body = {"username": "byhy","password": "88888888"
}
resp = session.post(url=url, data=body)url_delete_customer = host + '/api/mgr/customers'  # 删除客户的 url
body = {"action":"del_customer","id": 52
}
resp = session.delete(url=url_delete_customer, json=body)
print(resp.text)  # 打印删除客户接口响应的文本

总结:

requests库的请求方法里参数众多,所以简单总结一下:

    1. get请求带参数就用params=params
    2. post请求是form格式就用data=data
    3. post请求是json类型参数就用json=json
    4. 请求头信息header就用headers=headers

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

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

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

相关文章

21.Oracle的程序包(Package)

Oracle的程序包Package 一、Package的概述1、什么是Oracle11g的Package2、Package的作用是什么3、常见的系统内置Package 二、创建Package的相关语法1、Package的创建语法2、Package的删除3、具体案例4、Package的使用5、与Package相关的其他语法 三、常见内置程序包的使用1、…

【开源】基于Vue+SpringBoot的民宿预定管理系统

项目编号: S 058 ,文末获取源码。 \color{red}{项目编号:S058,文末获取源码。} 项目编号:S058,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用例设计2.2 功能设计2.2.1 租客角色…

【数据分享】2015-2023年我国区县逐月二手房房价数据(Excel/Shp格式)

房价是一个城市发展程度的重要体现,一个城市的房价越高通常代表这个城市越发达,对于人口的吸引力越大!因此,房价数据是我们在各项城市研究中都非常常用的数据!之前我们分享过2015-2023年我国地级市逐月房价数据&#x…

FTP服务文件上传失败,错误码553的排故过程

本文主要记录文件上传失败,错误码553的排故过程。 1 背景 树莓派通过FTP给嵌入式板卡传输文件,好几套设备,发现有的能传输成功,有的传输不成功。树莓派和嵌入式板卡都一样的,出现问题时感觉很懵。 2 逐项对比 2.1 自…

吉利展厅 | 透明OLED拼接2x2:科技与艺术的完美融合

产品:4块55寸OLED透明拼接屏 项目地点:南宁 项目时间:2023年11月 应用场景:吉利展厅 在2023年11月的南宁,吉利展厅以其独特的展示设计吸引了众多参观者的目光。其中最引人注目的亮点是展厅中央一个由四块55寸OLED透…

线程变量引发的session混乱问题

最近不是在救火,就是在救火的路上。 也没什么特别可写的,今天记录下最近遇到的一个问题,个人觉得挺有意思, 待有缘人阅读 言归正传,售后反馈: 营业查询中付款方式为第三方支付的几条银行缴费,创…

ENVI植被指数阈值法

植被指数阈值法提取纯净像元 首先用ENVI打开无人机遥感影像 1. 假彩色显示 打开数据管理工具,无人机的4波段为红边波段 2. 波段计算 打开band math,输入 float(b1-b2)/(b1b2) 选择对应波段 3. 阈值筛选 阈值按经验值选的0.7,ndvi…

爬虫概念、基本使用及一个类型和六个方法(一)

目录 一、爬虫简介 1.什么是爬虫 2.爬虫的核心 3.爬虫的用途 4.爬虫的分类 5.反爬手段 二、Urllib基本使用 1.导入我们需要的包 2.定义一个url 3.模拟浏览器向服务器发送请求 4.获取响应中的页面的源码 5.打印数据 三、一个类型和六个方法 1.定义url,并…

Docker 容器日志查看和清理

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

java springboot通过application配置文件生成随机值并控制范围

我们找到 项目的 application 配置文件 这里我们还是习惯用 yml格式的 我们在配置文件中 写出 ${random.} 的时候 他就会将所有可配置的随机类型都提示出来了 有 整数 长整星 字符串 uuid 这里 我们来个模板 testcase:book:id: ${random.int}name: ${random.value}date: ${r…

Ubuntu18.04安装Ipopt-3.12.8流程

本文主要介绍在Ubuntu18.04中安装Ipopt库的流程,及过程报错的解决方法,已经有很多关于Ipopt安装的博客,但经过我的测试,很多都失效了,经过探索,找到可流畅的安装Ipopt的方法,总结成本篇博客。 …

提升Zoom视频会议流畅度,试试一站式SaaS应用加速方案

对于一些跨国企业,Zoom是比较常用的视频会议软件。首先明确的是Zoom官方版也就是国际版,国内企业访问Zoom国际版会觉得慢一点,尤其在进行跨国、跨区域大型实时会议时卡顿、花屏就会更为明显。 为什么会卡顿呢? 主要问题之一还是受…

zabbix配置snmp trap--使用snmptrapd和Bash接收器(缺zabbix_trap_handler.sh文中自取)--图文教程

1.前言 我的zabbix的版本是5.0版本,5.0的官方文档没有使用bash接收器的示例,6.0的官方文档有使用bash接收器的示例,但是,下载文件的链接失效?! 这里讲解zabbix-server端配置和zabbix web端配置 2.zabbix-…

UI咨询公司-蓝蓝设计:顶级秘籍:提升UI设计吸引力的3大绝招

想要让你的UI设计在海量应用中脱颖而出,吸引用户眼球吗?如果你正在寻找提升UI设计吸引力的绝妙方法,那么你绝对不能错过本文!我们将为你揭示顶级UI设计师都不会告诉你的3大绝招,让你轻松掌握提升UI设计吸引力的关键技巧…

kafka 3.x 学习笔记

kafka 3.x 学习笔记 在 kafka 2.8.0 版本之前,安装使用 kafka 需要配套安装 zookeeper,但在 2.8.0 版本之后,不再需要安装 zookeeper,本次学习笔记采用的 kafka 版本为 3.0.0。 文章目录 kafka 3.x 学习笔记一、kafka 定义1 什么是…

【Proteus仿真】【51单片机】篮球比赛计分器

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器,使用声光报警模块、动态数码管模块、按键模块等。 主要功能: 系统运行后,数码管显示比赛时间和AB队得分;系统还未开…

网络和Linux网络_10(网络层)IP协议+分片组装+网段划分+路由

目录 1. IP协议作用和报头 1.1 IP和TCP作用 1.2 IP协议报头 2. 分片与组装 2.1 分片与组装概念 2.2 类似面试题的QA 3. 网段划分和IP地址 3.1 网段划分 3.2 IP地址分类 3.3 内外IP和公网IP地址 4. 路由和8位生存时间 4.1 路由的概念 4.2 8位生存时间 5. IP相关选…

华为云之一键安装宝塔面板

华为云之一键安装宝塔面板 一、本次实践介绍1.1 实践环境简介1.2 本次实践目的 二、宝塔面板介绍三、环境准备工作3.1 预置实验环境3.2 查看环境信息3.3 登录华为云3.4 查看弹性云服务器状态3.5 ssh登录弹性云服务器3.6 查看操作系统版本 四、安装宝塔面板4.1 一键部署宝塔面板…

git 本地改动无法删除

1. 问题 记录下git遇到奇怪的问题,本地有些改动不知道什么原因无法删除 git stash, git reset --hard HEAD 等都无法生效,最终通过强制拉取线上解决 如下图: 2. 解决 git fetch --all git reset --hard origin/master执行这两…

业务场景中Hive解析Json常用案例

业务场景中Hive解析Json常用案例 json在线工具 json格式转换在线工具 https://tool.lu/json/format格式互转: // 格式化可以合并整行显示 {"name":"John Doe","age":35,"email":"johnexample.com"}// 格式化…