• 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的基础上封装,优化了逻辑并降低使用门槛,且更加的稳定。是用来做接口自动化测试的最佳选择

    2、安装

    pip install requests

    pip3 install requests

    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的事情,如果业务功能没有问题,也不用太在意。但是,如果涉及安全方面,这样做可会GG了哦。

    而requests支持的HTTP协议的请求方式有哪些呢。

    这里我们来查看requests的源文件源码

    用pycharm随便建一个demo.py,在里面编写代码

    1. import requests
    2. 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里不存在,便不介绍了。

    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:9573/

    账密:admin/qwer1234

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

            

                     

    这里面接口设计很正常。

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

    1、GET接口实战

    目标接口是获取班级列表接口

    http://testapi.hunwei.top/s/classlst?page=1&limit=20&sort=%2Bid

    使用的方法是

    requests.get()

    下面代码包含了接口请求返回结果的数据获取方式

    1. import requests
    2. import json
    3. #请求URL
    4. url = 'http://testapi.hunwei.top/s/classlst'
    5. #记住header是字典格式,如果不是,想方设法转成字典,在Python的requests里,请求头必须是字典
    6. headers = {
    7. 'X-Token': 'admin-token'
    8. }
    9. #请求参数
    10. params = 'page=1&limit=20&sort=%2Bid'
    11. res = requests.get(url=url, headers=headers, params=params)
    12. print('#打印接口返回对像 : [%s]\n' % res) #打印接口返回对像
    13. print('打印接口返回体中的内容(str): [%s]\n' % res.text) #打印接口返回体中的内容(str)
    14. print(' #打印接口返回体中的内容(b): [%s]\n' % res.content) #打印接口返回体中的内容(b)
    15. print('#打印接口返回体转字典格式,共三种')
    16. print(res.json())
    17. print(json.loads(res.text))
    18. print(json.loads(res.content))

    运行结果打印如下

    参数化

    一般是接口返回为json时可以下载jsonpath库来获取字段值 

    现在一般少见接口返回html的了,如果有返回html的接口,可以通过下载beautifulSoup4库来获取相应的字段值,或者正则库re来获取字段值

    2、POST接口实战

    目标是班级新增接口:

    http://testapi.hunwei.top/s/addclass

    使用的方法是

    requests.post()

    代码如下

    1. import requests
    2. import json
    3. #请求头
    4. url = 'http://testapi.hunwei.top/s/addclass'
    5. #请求参数
    6. data = '{"grade_id":1,"class_name":"脚本测试","comments":"脚本测试001"}'
    7. #请求头
    8. headers = {
    9. 'X-Token': 'admin-token'
    10. }
    11. #将请求参数转换json字典
    12. jdata = json.loads(data)
    13. #发送post请求
    14. res = requests.post(url=url, headers=headers, json=jdata)
    15. print('#打印接口返回对像 : [%s]\n' % res)
    16. print('打印接口返回体中的内容(str): [%s]\n' % res.text)

    运行结果打印如下

     新增的数据

    3、PUT接口实战

    目标接口是修改班级接口

    http://testapi.hunwei.top/s/upclass

    请求方式是

    requests.put()

    1. import requests
    2. import json
    3. #请求URL
    4. url = 'http://testapi.hunwei.top/s/upclass'
    5. #请求数据
    6. 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":"二年级"}'
    7. #请求头
    8. headers = {
    9. 'X-Token': 'admin-token'
    10. }
    11. #请求数据转Json字典
    12. jdata = json.loads(data)
    13. #发送请求
    14. res = requests.put(url=url, headers=headers, json=jdata)
    15. print('#打印接口返回对像 : [%s]\n' % res)
    16. print('打印接口返回体中的内容(str): [%s]\n' % res.text)

    运行结果如下:

     修改的数据展示:

    4、DELETE接口实战

    目标接口是删除班级接口

    http://testapi.hunwei.top/s/delclass

    使用方法是:

    requests.delete()

    代码如下

    1. import requests
    2. import json
    3. #请求的url
    4. url = 'http://testapi.hunwei.top/s/delclass'
    5. #请求数据
    6. data = '{"id":345}'
    7. #请求头
    8. headers = {
    9. 'X-Token': 'admin-token'
    10. }
    11. #将数据转换成json字典
    12. jdata = json.loads(data)
    13. #发送请求
    14. res = requests.delete(url=url, headers=headers, json=jdata)
    15. print('#打印接口返回对像 : [%s]\n' % res)
    16. print('打印接口返回体中的内容(str): [%s]\n' % res.text)

    运行结果展示如下:

     删除了id为345数据库

    实战结束

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

    好了,这题留给大家摸索

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

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

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

  • 相关阅读:
    【机器学习】回归的原理学习与葡萄酒数据集的最小二乘法线性回归实例
    [管理与领导-125]:一个IT人的思考:职场中、人际交往中,不要为他人的不良行为和言语买单,不要让自己的情绪被外界影响或掌控。
    如何使用 Node.js和Express搭建服务器?
    初识 Linux 文件系统
    连接池及Druid(德鲁伊) 数据库连接池
    Tomcat - 源码阅读环境搭建
    前端常用的 59 个工具类【持续更新】
    使用路由建立多视图单页应用(SPA)
    配置Linux文件句柄数
    linux系统编程入门
  • 原文地址:https://blog.csdn.net/weixin_40331132/article/details/127912120