Python接口测试之requests介绍

目录

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版本的古董,跟着HTTP协议版本的更替与Python3的出现,它们已经不用了。

urllib3综合了urllib与urllib2的所有内容,支持HTTP3.0版本,可以在Python3可以使用。

requests是在urillib3的基础封装,解决了很多繁杂的配置与操作问题,使其访问HTTP接口简单而稳定,给开发与接口人员提供了极大便利。

下面便开始介绍如何使用requests了

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 requests

res = requests.get(url='http://www.baidu.com')

鼠标点击选中get ,按下组合键Ctrl+B,就可跳到它的源文件查看源码了

Python接口测试之requests介绍_第1张图片

 通过上图可知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可以看到

        Python接口测试之requests介绍_第2张图片

        Python接口测试之requests介绍_第3张图片         

这里面接口设计很正常。

增是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))

运行结果打印如下

Python接口测试之requests介绍_第4张图片

参数化

一般是接口返回为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)

运行结果打印如下

Python接口测试之requests介绍_第5张图片

 新增的数据

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)

运行结果如下:

Python接口测试之requests介绍_第6张图片

 修改的数据展示:Python接口测试之requests介绍_第7张图片

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数据库

Python接口测试之requests介绍_第8张图片

实战结束

这里提一问,如果post,put,delete接口中的参数不是json要怎么弄?

好了,这题留给大家摸索

一键三连 ,点赞,收藏,关注走起

推荐一个 接口自动化测试框架搭建 博文

https://blog.csdn.net/weixin_40331132/article/details/111572517

你可能感兴趣的:(自动化测试,python,python,requests,接口自动化测试)