目录
requests介绍
1、简述发展史
2、安装
3、官方自评
4、requests支持的请求类型
4、requests的参数与返回
requests接口请求Python脚本实战
1、GET接口实战
2、POST接口实战
3、PUT接口实战
4、DELETE接口实战
Http网络接口请求库
跟进HTTP版本版本更替,Python与之对应的库也在一直更新,对应的HTTP1.0 、HTTP1.1、HTTP2.0、HTTP3.0,Python方也对应出现了urllib,urllib2, urllib3,requests四个库。
这四个库的关系如下:
urllib + urllib2 = urllib3 => request
urllib与urllib2,它们是Python2.7版本的古董,跟着HTTP协议版本的更替与Python3的出现,它们已经不用了。
urllib3综合了urllib与urllib2的所有内容,支持HTTP3.0版本,可以在Python3可以使用。
requests是在urillib3的基础封装,解决了很多繁杂的配置与操作问题,使其访问HTTP接口简单而稳定,给开发与接口人员提供了极大便利。
下面便开始介绍如何使用requests了
pip install requests
或
pip3 install requests
一般windows系统是第一条命令,linux系统是第二条命令,前提linux系统是Python3
request 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用。警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症、冗余代码症、重新发明轮子症、啃文档症、抑郁、头疼、甚至死亡。
上述告诫人们,别想尝试用其他们库来代替requests请求HTTP网络请求,不然后果很严重,
本人尝试过,事实如此~
HTTP协议定义的网络请求方式大概有这么几种:
GET、POST、HEAD、OPTIONS、PUT、DELETE 、TRACE、CONNECT、PATCH
它们的含义是协议定好的,像GET一般是获取数据,而POST则是增加数据
当然大家在做接口测试进,发现GET做了POST的事情,POST做了GET的事情,如果业务功能没有问题,也不用太在意。
达叔:HTTP协议,你在教我做事呀~
协议是否遵守只是开发者个人的事情而已,只要实现的功能没问题就行了。
当然,如果涉及安全方面,开发与测试这样做可能就GG了。
而requests支持的HTTP协议的请求方式有哪些呢。
这里我们来查看requests的源文件源码
用pycharm随便建一个demo.py,在里面编写代码
import requests
res = requests.get(url='http://www.baidu.com')
鼠标点击选中get ,按下组合键Ctrl+B,就可跳到它的源文件查看源码了
通过上图可知requests 是支持HTTP协议定义的GET、POST、HEAD、OPTIONS、PUT、DELETE、PATCH网络通信请求方式。少了TRACH、CONNECT
请求类型 |
作用介绍 |
GET |
用于查询请求 |
POST |
用于新增请求 |
HEAD |
用于对服务器性能的试探 |
OPTIONS |
用于对服务器性能与跨域的试探 |
PUT |
用于更新数据的请求 |
PATCH |
用于更新数据的请求,可以部分更新 |
DELETE |
用于删除数据的请求 |
TRACH、CONNECT在requests里不存在,便不介绍了。
requests 不同请求类型的请求参数不尽相同,主要常用的参数有以下几个
参数 |
介绍 |
url |
请求的url(域名+接口路径) |
headers |
请求头 |
params |
get请求的数据 |
data |
非get请求数据,有时需要在请求头里指定请求数据类型 |
json |
非get请求数据,json字典格式 |
files |
上传接口的文件流 |
返回 |
|
reponse |
reqeusts发送请求后接口返回的实例对象 |
参数这样说也不太明白,看下面的实战吧~
通常网络软件使用的HTTP接口为GET,POST,PUT,DELETE,偶尔也能看到OPTIONS,但因为OPTIONS一般是跨域试探,不需要测试。所以测试一般掌握这4种requests请求方式即可
这里提供一个测试环境:
http://testapi.hunwei.top/
账密:admin/qwer1234
登录测试环境,可以看到‘班级管理’,在管理管理中有增删改查接口,通过f12可以看到
这里面接口设计很正常。
增是POST,删是DELTET,改是PUT,查是GET
目标接口是获取班级列表接口
http://testapi.hunwei.top/s/classlst?page=1&limit=20&sort=%2Bid
使用的方法是
requests.get()
下面代码包含了接口请求返回结果的数据获取方式
import requests
import json
#请求URL
url = 'http://testapi.hunwei.top/s/classlst'
#记住header是字典格式,如果不是,想方设法转成字典,在Python的requests里,请求头必须是字典
headers = {
'X-Token': 'admin-token'
}
#请求参数
params = 'page=1&limit=20&sort=%2Bid'
res = requests.get(url=url, headers=headers, params=params)
print('#打印接口返回对像 : [%s]\n' % res) #打印接口返回对像
print('打印接口返回体中的内容(str): [%s]\n' % res.text) #打印接口返回体中的内容(str)
print(' #打印接口返回体中的内容(b): [%s]\n' % res.content) #打印接口返回体中的内容(b)
print('#打印接口返回体转字典格式,共三种')
print(res.json())
print(json.loads(res.text))
print(json.loads(res.content))
运行结果打印如下
参数化
一般是接口返回为json时可以下载jsonpath库来获取字段值
现在一般少见接口返回html的了,如果有返回html的接口,可以通过下载beautifulSoup4库来获取相应的字段值,或者正则库re来获取字段值
目标是班级新增接口:
http://testapi.hunwei.top/s/addclass
使用的方法是
requests.post()
代码如下
import requests
import json
#请求头
url = 'http://testapi.hunwei.top/s/addclass'
#请求参数
data = '{"grade_id":1,"class_name":"脚本测试","comments":"脚本测试001"}'
#请求头
headers = {
'X-Token': 'admin-token'
}
#将请求参数转换json字典
jdata = json.loads(data)
#发送post请求
res = requests.post(url=url, headers=headers, json=jdata)
print('#打印接口返回对像 : [%s]\n' % res)
print('打印接口返回体中的内容(str): [%s]\n' % res.text)
运行结果打印如下
目标接口是修改班级接口
http://testapi.hunwei.top/s/upclass
请求方式是
requests.put()
import requests
import json
#请求URL
url = 'http://testapi.hunwei.top/s/upclass'
#请求数据
data='{"id":345,"class_name":"测试脚本修改","comments":"脚本测试001修改","grade_id":2,"isdelete":0,"create_time":"2022-04-22T15:49:54.862Z","create_user":null,"updata_time":"2022-10-02T04:28:26.433Z","updata_user":null,"grade_name":"二年级"}'
#请求头
headers = {
'X-Token': 'admin-token'
}
#请求数据转Json字典
jdata = json.loads(data)
#发送请求
res = requests.put(url=url, headers=headers, json=jdata)
print('#打印接口返回对像 : [%s]\n' % res)
print('打印接口返回体中的内容(str): [%s]\n' % res.text)
运行结果如下:
目标接口是删除班级接口
http://testapi.hunwei.top/s/delclass
使用方法是:
requests.delete()
代码如下
import requests
import json
#请求的url
url = 'http://testapi.hunwei.top/s/delclass'
#请求数据
data = '{"id":345}'
#请求头
headers = {
'X-Token': 'admin-token'
}
#将数据转换成json字典
jdata = json.loads(data)
#发送请求
res = requests.delete(url=url, headers=headers, json=jdata)
print('#打印接口返回对像 : [%s]\n' % res)
print('打印接口返回体中的内容(str): [%s]\n' % res.text)
运行结果展示如下:
删除了id为345数据库
实战结束
这里提一问,如果post,put,delete接口中的参数不是json要怎么弄?
好了,这题留给大家摸索
一键三连 ,点赞,收藏,关注走起
推荐一个 接口自动化测试框架搭建 博文
https://blog.csdn.net/weixin_40331132/article/details/111572517