Python 接口自动化 —— requests框架

news2024/11/29 22:50:12

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.coloradmin.cn/o/1145480.html

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

相关文章

操作系统:进程与线程(二)同步与互斥B

一战成硕 2.3.5 管程2.3.6 经典同步问题 2.3.5 管程 管程的特性保证了进程互斥,无需程序员自己实现互斥,降低了死锁发生的可能。 管程的定义 管程是一种高级的同步机制。 定义描述举例 条件变量 2.3.6 经典同步问题 生产者消费者问题 缓冲区没满&a…

会说话,得天下!演讲与口才训练必修课

会说话,得天下!演讲与口才训练必修课 口才是现代职场上一项非常重要的素质。有了好的口才,不仅可以很好地展示自己的思想和见解,还可以影响他人并获得支持,这对个人职业发展十分重要。所以,学习如何进行出…

详解 DES加密技术 | 凯撒密码 | 栅栏密码

目录 密码学 恺撒密码 栅栏密码 消息和加密 密码的三个特性 算法和密钥 对称算法 公开密钥算法 DES对称加密技术 DES算法的安全性 DES算法的原理 DES算法的实现步骤 IP置换表和IP-1逆置换表 函数f 子密钥ki S盒的工作原理 DES算法的应用误区 密码学 密码学是一门…

Oracle (7)Online Redo Log Files

目录 一、Oracle Online Redo Log Files及其相关内容介绍 1、Online Redo Log Files简介 2、Online Redo Log Files特点 3、Online Redo Log Files文件组 4、多路复用文件 5、联机重做日志文件工作方式 6、LGWR什么时候写重做 7、LS和LSN 8、删除Redo文件成员 9、删除…

【黑马程序员】mysql基础篇笔记

2023年10月26日12:21:09过一下 1.01.MySQL课程介绍(Av765670802,P1) 2.02. 基础-课程内容&数据库相关概念(Av765670802,P2) 3.03. 基础-概述-MySQL安装及启动(Av765670802,P3) 4.04. 基础-概述-数据模型(Av765670802,P4) 通过表来存储数据的数据库就叫做关系型数据库 …

centos7安装配置以及Linux常用命令

⭐⭐ linux专栏:linux专栏 ⭐⭐ 个人主页:个人主页 目录 一.CentOS的安装 使用vi编辑ifcfg-ens33 二. 下载MobaXterm软件 2.1MobaXterm的用途 2.2 MobaXterm的使用 2.3下载插件vim 三.Linux常用命令 3.4 vi或vim编辑器 3.4.1 命令模式 3.4.2.…

面试官:给你40亿个数,你应该如何快速判断一个数是否在这40亿个数中?—— 位图 [ C++入门 ]

阅读导航 引言一、位图的概念1. 官方文档2. 基本概念 二、位图的实现1. 插入2. 删除3. 查找C模拟实现🔴完整代码 总结 引言 在C编程中,位图是一种常用的数据结构,用于高效地表示大量的布尔值。它通过使用一个二进制位来表示每个元素的存在与…

集成电路自动化测试的优势是什么?

集成电路自动化测试的优势主要包括: 提高效率:自动化测试可以显著提高测试效率,因为可以24小时不间断地进行测试,同时避免了人工测试中的误差和疏漏,节省了大量时间和人力成本。 提升精度:自动化测试的精…

MySQL|基础操作+8大查询方式汇总

MySQL操作 一、操作数据库 MySQL中可以创建多个数据库用于存储不同场景的表结构,学习MySQL之前,我们要先理清如下的关系: 数据库 --> 数据表 --> 字段 抛开数据库存储上限去考虑,每个数据库中可以包含无数个数据表&#xf…

Apriori介绍及代码批注

一、Apriori原理解析 1. 概述 关联规则分析是数据挖掘中最活跃的研究方法之一,目的是在一个数据集中找到各项之间的关联关系,而这种关系并没有在数据中直接体现出来。以超市的销售数据为例,当存在很多商品时,可能的商品组合数量…

MySQL的数据库操作、数据类型、表操作

目录 一、数据库操作 (1)、显示数据库 (2)、创建数据库 (3)、删除数据库 (4)、使用数据库 二、常用数据类型 (1)、数值类型 (2&#xff0…

用Jmeter做微信小程序项目接口测试【案例】

公司新项目组开发一款微信小程序电商平台,为了更好保证产品质量,因此提出了需要进行接口测试。 从接口本身来讲,对其测试与其他项目应该是一样的。所以不难理解,我们要对小程序的接口测试需要准备的 材料有: 1、完备…

LCR 158. 库存管理 II 哈希 / 摩尔投票法

LCR 158. 库存管理 II - 力扣(LeetCode) 仓库管理员以数组 stock 形式记录商品库存表。stock[i] 表示商品 id,可能存在重复。请返回库存表中数量大于 stock.length / 2 的商品 id。 (1)方法一:先排序 题目…

​Profinet转EtherNET/IP从站连接欧姆龙plc与西门子200smart通讯的配置方法​

本案例是200smart plc与欧姆龙plc进行通讯的方法,远创智控YC-PNM-EIP网关可以读写全系列西门子 PLC 数据。一般不需要 PLC 里做特殊的设置。只需要把 PLC 的变量地址配置到网关中,网关就可以读取指定地址的数据或者写数据到指定的地址。 PLC 通过网线连接…

Android---Bitmap详解

每一个 Android App 中都会使用到 Bitmap,它也是程序中内存消耗的大户,当 Bitmap 使用内存超过可用空间,则会报 OOM。 Bitmap 占用内存分析 Bitmap 用来描述一张图片的长、宽、颜色等信息,可用使用 BitmapFactory 来将某一路径下…

浮点数在计算机中的二进制表示

文章目录 Part.I IntroductionPart.II 原理Part.III 代码验证Reference Part.I Introduction 首先要了解一下下面的知识: 1 位有两种状态:0 或 11 字节(byte) 8 位(bit) 2 7 128 2^7128 27128&#xff1…

rhcsa简单的查询命令

时间 date -s "20021125 12:00:00" date 052312002002 一.简单语法 hwclock --查看硬件时间 hwclock --show 查看硬件时间 hwclock -w 同步硬件时间和系统时间 hwclock -s 将硬件时钟同步到系统时间 hwclock -r 查看当前时间 cal 查看当前月份日历 cal 10 …

nodejs+vue+elementui+express基于体质分析的个性化健身方案生成系统与设计

基于体质分析的个性化健身方案生成系统与设计 客户端: 1、在健身系统中可以自己选择课程(需先充值,金额大于课程价格才可购买,否则提示余额不足,请充值),完成课程后由该课程的发布教练评价评分…

Python文件——使用Python读取txt文件

作者:Insist-- 个人主页:insist--个人主页 本文专栏:Python专栏 专栏介绍:本专栏为免费专栏,并且会持续更新python基础知识,欢迎各位订阅关注. 目录 一、文件的编码 1. 什么是编码 2. 常见的编码 二、P…

【软考】10.2 贪心法/回溯法/数据挖掘/智能优化

《贪心法》 适用于局部最优解 典型应用:背包问题 最有可能得到全局最优解:最大单位重量价值 ——> 重量 / 价值 《回溯法》 系统地搜索一个问题的所有解或者任一解深度优先,从根节点出发适用于解决迷宫类的问题 0-1背包算法的时间复杂度…