request发送http请求

今天正式开始为大家介绍接口自动化,相信很多做测试的朋友,都用过一些工具,比如jmeter,loadrunner,postman等等,所以今天先给那些基础不太好的同学,先讲讲postman如何来测接口以及如何用pthon代码的方式来发送http请求

首先,我们在做接口测试之前,一般会拿到开发人员那边的接口文档,没有接口文档是很难快速高效率的去进行测试工作的这部分接口测试,所以,得提前准备好或者拿到一份接口测试

接下来,小编我以注册和登录为例,附上截图给大家看看,请提前下载安装好postman工具

一、postman的基本使用

请求头信息截图如下:

如果你不想一个一个的手动写,可以有一种简单的方法,

看,自动生成了

这里有几个注意点要说明:

1.一定结合开发人员给你的接口文档结合起来进行

2.请求头,有的没有,有的有,看接口文档

3.请求方式要看清是post还是get方式

二、requests发送http请求

这里有的问题会问,做接口测试,只能用工具吗?可不可以写代码的方式来做接口测试?当然可以,python代码还是很强大的

在写代码前,先安装requests插件,安装命令:pip install requests

然后,继续看下面的内容,以登录接口为例:

python 复制代码
import requests # 登录的接口地址 url = "http://api.lemonban.com/futureloan/member/login" # 登录的参数 params = { "mobile_phone": "15879563287", "pwd": "lemonban" } # 请求头 headers = { "X-Lemonban-Media-Type": "lemonban.v2", } # 发送一个登录的请求 # 请求类型为Content-Type:application/json,参数就应该使用json去传递 response = requests.post(url=url, json=params, headers=headers) print(response) # 200,请求成功 # 获取接口返回的数据 print(response.text)

三、requests处理各种请求类型的参数

常见的接口请求参数类型:

1、查询字符串参数:

常用于get请求 (其他的请求方法用的少),参数会直接拼接在url地址后面

requests发送请求,传递查询字符串参数,要使用params去传递 params=params

2、json类型的参数:

请求参数类型为Content-Type:application/json,

requests发送请求,传递json参数,就应该使用json去传递 json=params

3、表单类型的参数

请求参数类型:content-type: application/x-www-form-urlencoded

requests发送请求,传递表单参数,就应该使用data去传递 data=params

4、文件上传:

请求参数类型:content-type: multipart/form-data

文件参数要使用files进行传递

文件参数的组装:

{"参数名": ("文件名", open以rb模式打开文件, "文件类型")}

[("参数名", ("文件名", open以rb模式打开文件, "文件类型"))]

python 复制代码
import requests # --------------------查询字符串参数传递----------------------------- # 查询字符串参数的传递: url = "http://api.lemonban.com/futureloan/loans" # 请求参数 params = { "pageIndex": 1, "pageSize": 20 } # 请求头 headers = { "X-Lemonban-Media-Type": "lemonban.v2" } response1 = requests.get(url=url, params=params, headers=headers) print(response1.text) # ----------------------json格式的参数传递------------------------------ # 注册的接口地址 url = "http://api.lemonban.com/futureloan/member/register" # 参数 params = { "mobile_phone": "15879562223", "pwd": "lemonban" } # 请求头 headers = { "X-Lemonban-Media-Type": "lemonban.v2" } response2 = requests.post(url=url, json=params, headers=headers) print(response2.text) # ------------------------表单类型参数的传递---------------------------------- # 接口地址 url = "https://www.ketangpai.com/UserApi/login" # 参数 params = { "email": "24782578257", "password": "1426", "remember": 0 } response3 = requests.post(url=url, data=params) print(response3.json()) # -----------------------文件上传--------------------------------- # 上传文件的接口地址(这是授课老师本地的,我们无法访问) url = "http://127.0.0.1:5000/upload" # 请求的参数 params = { "nickname": "1122", "age": 18, "sex": "男" } file = { "pic": ("jiayouya.gif", open("jiayouya.gif", "rb"), "image/gif") } # response4 = requests.post(url=url, data=params, files=file) print(response4.json())

四、请求响应数据的提取方式

响应对象response:

一、http响应码:response.status_code

二、返回的数据提取:

1、text属性(str):获取的是原生的json字符串 (用的不多)

2、content属性(bytes):可以使用decode指定编码转换为字符串 (用的不多)

3、json()方法(dict):获取到的是json转换的字典/列表 (工作中常用,需重点掌握!!!)

三、json类型的数据和 python中数据的对比

json     python

{}: 对象 字典

[]: 数组 列表

空 null None

布尔 false False

true True

python 复制代码
import requests # 登录的接口地址 url = "http://api.lemonban.com/futureloan/member/login" # 登录的参数 params = { "mobile_phone": "15879563287", "pwd": "lemonban11" } # 请求头 headers = { "X-Lemonban-Media-Type": "lemonban.v2", } # 发送一个登录的请求 # 请求类型为Content-Type:application/json,参数就应该使用json去传递 response = requests.post(url=url, json=params, headers=headers) # 获取接口返回的数据 print(response.text) print(response.json())

五、jsonpath和json数据

json提取数据

首先安装jsonpath 安装命令:pip install jsonpath

然后,这里我给出一组数据,如下:这是登录之后返回的数据

python 复制代码
{'code': 0, 'msg': 'OK', 'data':{ 'id': 2096225, 'leave_amount': 0.0, 'mobile_phone': '15879563287', 'reg_name': '小柠檬', 'reg_time': '2020-08-21 11:36:56.0', 'type': 1, 'token_info': { 'token_type': 'Bearer', 'expires_in': '2020-08-21 18:11:31', 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJtZW1iZXJfaWQiOjIwOTYyMjUsImV4cCI6MTU5ODAwNDY5MX0.dvhKZs67w2jWX9zjqzsQ_7xjE3ggcfuEjtl6HOkmSb0qWkqp8pOiMYzJ6LDSKfGj_6D-1SnxDqd4Ew2fY8oziw' } }, 'copyright': 'Copyright 柠檬班 © 2017-2020 湖南省零檬信息技术有限公司 All Rights Reserved' }
python 复制代码
from jsonpath import jsonpath import requests # 登录的接口地址 url = "http://api.lemonban.com/futureloan/member/login" # 登录的参数 params = { "mobile_phone": "15879563287", "pwd": "lemonban" } # 请求头 headers = { "X-Lemonban-Media-Type": "lemonban.v2", } # 发送一个登录的请求 # 请求类型为Content-Type:application/json,参数就应该使用json去传递 response = requests.post(url=url, json=params, headers=headers) # 获取接口返回的数据 res = response.json() # 通过字典键值对的方式获取 # token = res["data"]["token_info"]["token"] # print(token) # 通过jsonpath提取 token = jsonpath(res, "$..token") print(token)

再给大家详细来张图:

因为,jsonpath提取数据的语法基本如下:

如果Json数据中还存在列表,想获取列表类型的数据信息,怎么获取?

比如:我给出一个json类型数据,看截图:

python 复制代码
import json from jsonpath import jsonpath # 读取json文件中的数据,转换为python中的字典 with open("data.json", "r", encoding="utf-8") as f: res = json.load(f) res = jsonpath(res, "$.toplists[1].id") print(res)

因此,总结这部分json获取数据的内容,有以下这么几点:

1.可直接通过美元符号 举例 ..code

2.若需要找列表中的信息, 举例 $.toplists[1]

相关推荐
不做菜鸟的网工5 分钟前
PPPoe拨号上网配置实验
网络协议
2501_9159214325 分钟前
请求未达服务端?iOS端HTTPS链路异常的多工具抓包排查记录
websocket·网络协议·tcp/ip·http·网络安全·https·udp
于顾而言28 分钟前
【开源品鉴】FRP源码阅读
后端·网络协议·开源
Accpdaiyekun1 小时前
C# 操作mongodb 多次查询快还是使用管道查询速度快
mongodb·c#·lua
妮妮喔妮2 小时前
HTTP中常见的Content-Type
网络·网络协议·http
危险、2 小时前
RabbitMQ 通过HTTP API删除队列命令
分布式·http·rabbitmq
超人不会飛2 小时前
就着HTTP聊聊SSE的前世今生
前端·javascript·http
数通Dinner2 小时前
异步Websocket构建聊天室
运维·网络·websocket·网络协议·信息与通信
闲坐含香咀翠4 小时前
记一次交互优化:从根源上解决Axios请求竞态问题
前端·http·浏览器
向宇it4 小时前
【unity游戏开发——网络】网络游戏通信方案——强联网游戏(Socket长连接)、 弱联网游戏(HTTP短连接)
网络·http·游戏·unity·c#·编辑器·游戏引擎