Python接口测试之requests详介与实战

news2024/11/24 3:46:19

目录

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/14324.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

设计师找灵感就上这几个网站。

推荐5个设计师必备的设计灵感网站,希望对你有帮助! 1、pinterest(梯子) https://www.pinterest.es/Pinterest是以瀑布流的方式来展示图片,在算法上也会根据你的浏览和识别的图片去做推算。 所以Pinterest是需要“经营”…

网络编程概述

Java是 Internet 上的语言,它从语言级上提供了对网络应用程 序的支持,程序员能够很容易开发常见的网络应用程序。 Java提供的网络类库,可以实现无痛的网络连接,联网的底层 细节被隐藏在 Java 的本机安装系统里,由 JVM …

权限系统设计

背景 目前只做了用户账号间的数据隔离。存在情况,同一个项目里不同人创建不同的资源,项目里的成员都可以看得到,同时也不能互相随便修改数据。所以需要一些组的权限控制。 1.模型和模型荚是公用的,没有做用户区分,也没…

学计算机的可以做哪些适合自己的兼职?

如果你在做以下的任意一种兼职,我建议你立刻停止! 1.单纯体力劳动的兼职 像是发传单、发问卷、送外卖这类兼职只能在短期内提升你的“8小时外收入”的兼职,纯粹是靠时间和体力来换钱,性价比很低,而且不能通过兼职提升…

指定字符串中的一部分将原来的字符串拆分成三部分partition()函数

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 指定字符串中的一部分 将原来的字符串拆分成三部分 partition()函数 选择题 对于以下python代码表述错误的一项是? Str"12345" print("【显示】Str",Str) print("…

Vue2【前端路由的概念与原理、vue-router 的基本用法、vue-router 的常见用法、后台管理案例】

文章目录前端路由的概念与原理1. 什么是路由3. SPA 与前端路由4. 什么是前端路由5. 前端路由的工作方式6. 实现简易的前端路由步骤1&#xff1a;通过 **\<component\>** 标签&#xff0c;结合 **comName** 动态渲染组件。示例代码如下&#xff1a;步骤2&#xff1a;在 Ap…

Xcode Cloud

一、使用Xcode Cloud 的要求 &#xff08;1&#xff09;开发者账户要求 已加入Apple Developer Program向xcode加入Apple IDApp Store Connect上有app 记录或者可以创建一个app记录 &#xff08;2&#xff09;Project和workspace要求 Project或者workspace使用Xcode项目使用…

JavaScript基础语法

JavaScript基础语法 文章目录JavaScript基础语法1.JavaScript的基本认知1.1 JS的介绍与组成1.2 JS代码使用格式2.JavaScript的注释与输入输出语句2.1 JS的注释方法2.2 JS的输入输出语句3.JavaScript的变量3.1 JS的变量初始化3.2 JS的声明变量特殊情况3.3 JS的变量命名规则4.Jav…

Windows版本Anaconda安装教程

1、点击安装包&#xff0c;右键-以管理员身份运行安装文件&#xff0c;如图所示&#xff1a; 2、直接点击next即可 3、接着进入到许可协议的界面&#xff0c;这里点击I agree选项&#xff0c;也就是我同意的意思。 4、接着进入到用户选择的界面&#xff0c;选择all users选项&a…

面试官的灵魂质问—什么是转发与重定向

文章目录 文章目录文章目录[toc]一、什么是HttpServletRequest、HttpServletReSponse&#xff1f;二、Servlet中HttpServletRequest[源码](https://so.csdn.net/so/search?q源码&spm1001.2101.3001.7020)分析获取客户端传递的参数请求转发三、Servlet中HttpServletReSpons…

HTML网页设计结课作业——基于HTML+CSS仿学校官网页面

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

【保姆级】新机器部署Nacos

1、登录服务器&#xff0c;如果非root用户则切root用户 sudo su - 2、在/usr/tmp目录上传nacos安装包 3、将安装包移到/usr/local/目录 mv nacos-server-2.0.3.tar.gz /usr/local/ 4、解压 tar -zxvf nacos-server-2.0.3.tar.gz 5、创建nacos数据库&#xff0c;执行官网SQL建…

vc中调用matlab生成的动态库

开发环境&#xff1a; vs2010 matlab r2016a 步骤一&#xff1a;matlab中生成动态库 创建文本文件 D:\matlabTest\myadd.m&#xff0c;文件内容参看下面代码部分。注意&#xff1a;如果把myadd.m文件直接放在d盘根目录下&#xff0c;matlab中编译生成动态库时&#xff0c;会…

JavaScript--跟随pink老师视频学习版 (2022)

JavaScript一、JavaScript简介1.什么是JavaScript2.JavaScript用途3.浏览器执行JavaScript简介3.JavaScript组成1.ECMAScript2.DOM3.BOM4.JavaScript代码位置1.行内2.内嵌3.外部引入5.JavaScript输入输出语句二、JavaScript变量1.什么是变量2.变量使用3.变量命名规范三、数据类…

DBCO-NH2,DBCO-Amine 实验室 杂氮二苯并环辛炔-胺 1255942-06-3

DBCO(二苯并环辛炔) 的羧基和琥珀酰亚胺酯衍生物&#xff0c;可与带有胺基的生化小分子形成稳定的酰胺键连接。 胺官能团的环辛炔衍生物。环辛炔可用于菌株促进的无铜叠氮化物-炔烃环加成反应。该二苯并环辛炔可在不需要Cu&#xff08;I&#xff09;催化剂的情况下&#xff0c…

TCP/IP网络编程(10) IO函数

在Linux下&#xff0c;一般使用read & write函数完成数据IO&#xff0c;因为Linux下的套接字&#xff0c;可视为文件&#xff0c;其操作方式与文件类似&#xff0c;当套接字分配之后&#xff0c;会为其分配对应的文件描述符。在Windows下&#xff0c;则需要使用recv & …

[oeasy]python0016_编码_encode_编号_字节_计算机

编码(encode) 回忆上次内容 上次找到了字符和字节状态之间的映射对应关系 字符对应着二进制字节二进制字节也对应着字符 这种字节状态是用2位16进制数来表示的hex(n)可以把数字转化为 ​​16进制​​字符串 hexadecimal bin(n)可以把数字转化为 ​​2进制​​字符串 integer …

显示控件——AV输入显示

通过修改变量地址打开或者关闭AV显示&#xff0c;需要硬件支持。 位置信息&#xff1a;控件在工程页面区域的位置 “X”“Y”为控件区域左上角坐标。 “W”“H”为控件区域宽度和高度&#xff0c;单位为像素点。 名称&#xff1a;默认为AVInputView,可以重新设置。 叙述指针…

生产制造管理系统对中小型企业的作用有哪些?

随着企业数字化转型的概念深入人心&#xff0c;传统生产制造企业也渐渐重视起来了。对于资金雄厚的大型生产制造企业而言&#xff0c;企业数字化转型还是比较可以快速适用并且付出行动。而对于很多的中小型企业而言&#xff0c;对于企业数字化转型则没那么重视&#xff0c;甚至…

Beam failure Recovery

微信同步更新欢迎关注同名modem协议笔记 这篇来看BFR 过程&#xff0c;这里把38.300中对于BFD和BFR流程的描述再贴一遍。 BFD 发生在Pcell时: UE 通过在Pcell上进行RA 过程来触发BFR&#xff1b;UE 要选择suitable beam去进行BFR&#xff08;如果gNB 配置了某些beams 的dedica…