Python接口测试之requests详介与实战
创始人
2024-01-29 11:26:49
0

目录

requests介绍

1、简述发展史

2、安装

3、官方自评

4、requests支持的请求类型

4、requests的参数与返回

requests接口请求Python脚本实战

1、GET接口实战

2、POST接口实战

3、PUT接口实战

4、DELETE接口实战


requests介绍

Http网络接口请求库

1、简述发展史

跟进HTTP版本版本更替,Python与之对应的库也在一直更新,对应的HTTP1.0 、HTTP1.1、HTTP2.0、HTTP3.0,Python方也对应出现了urllib,urllib2, urllib3,requests四个库。

这四个库的关系如下:

urllib + urllib2 = urllib3 => request

现在urllib与urllib2已经不用了,它们是Python2.7版本的古董,易用程度跟不上时代。

urllib3在Python3可以使用,但request是在其之上封装的更优选,所以urllib3也很少被人使用了。

2、安装

pip install requests

pip3 install requests

一般windows系统是第一条命令,linux系统是第二条命令,前提linux系统是Python3

3、官方自评

request 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用。警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症、冗余代码症、重新发明轮子症、啃文档症、抑郁、头疼、甚至死亡。

上述告诫人们,别想尝试用其他们库来代替requests请求HTTP网络请求,不然后果很严重,

本人尝试过,事实如此~

4、requests支持的请求类型

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 requestsres = 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里不存在,便不介绍了。

4、requests的参数与返回

requests 不同请求类型的请求参数不尽相同,主要常用的参数有以下几个

参数

介绍

url

请求的url(域名+接口路径)

headers

请求头

params

get请求的数据

data

非get请求数据,有时需要在请求头里指定请求数据类型

json

非get请求数据,json字典格式

files

上传接口的文件流

返回

reponse

reqeusts发送请求后接口返回的实例对象

参数这样说也不太明白,看下面的实战吧~

requests接口请求Python脚本实战

通常网络软件使用的HTTP接口为GET,POST,PUT,DELETE,偶尔也能看到OPTIONS,但因为OPTIONS一般是跨域试探,不需要测试。所以测试一般掌握这4种requests请求方式即可

这里提供一个测试环境:

http://testapi.hunwei.top/

账密:admin/qwer1234

登录测试环境,可以看到‘班级管理’,在管理管理中有增删改查接口,通过f12可以看到

        

                 

这里面接口设计很正常。

增是POST,删是DELTET,改是PUT,查是GET

1、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来获取字段值

2、POST接口实战

目标是班级新增接口:

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)

运行结果打印如下

 新增的数据

3、PUT接口实战

目标接口是修改班级接口

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)

运行结果如下:

 修改的数据展示:

4、DELETE接口实战

目标接口是删除班级接口

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

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...