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]

相关推荐
几何心凉4 分钟前
实践篇:青果IP助理跨境电商的高效采集
网络·网络协议·tcp/ip
2301_793086875 分钟前
springboot+redis+lua实现分布式锁
spring boot·redis·lua
Thomas_YXQ13 分钟前
Unity3D Lua如何支持面向对象详解
开发语言·游戏·junit·性能优化·lua·unity3d
群联云防护小杜1 小时前
为什么DDoS防御很贵?
网络·网络协议·web安全·ddos
小白要加油哈2 小时前
Lua--1.基础知识
开发语言·junit·lua
互联网杂货铺2 小时前
Postman定义公共函数
自动化测试·软件测试·测试工具·职场和发展·接口测试·压力测试·postman
桃始笑叶始泪3 小时前
HTTP中GET和POST的区别是什么?
网络·网络协议·http
hgdlip3 小时前
Win7电脑IP地址查看与变换指南
网络协议·tcp/ip·电脑·win7
sxy1993sxy20184 小时前
HTTP请求失败调试过程 -20241126
网络·网络协议·http
搬砖的果果5 小时前
HTTP代理是什么,主要用来干嘛?
网络·python·网络协议·tcp/ip·http