用python进行接口测试(详细教程)

前言

其实我觉得接口测试很简单,比一般的功能测试还简单,现在找工作好多公司都要求有接口测试经验,也有好多人问我什么是接口测试,本着不懂也要装懂的态度,我会说:所谓接口测试就是通过测试不同情况下的入参与之相应的出参信息来判断接口是否符合或满足相应的功能性、安全性要求。

我为啥说接口测试比功能测试简单呢,因为功能测试是从页面输入值,然后通过点击按钮或链接等传值给后端,而且功能测试还要测UI、前端交互等功能,但接口测试没有页面,它是通过接口规范文档上的调用地址、请求参数,拼接报文,然后发送请求,检查返回结果,所以它只需测入参和出参就行了,相对来说简单了不少。

正好最近在做接口测试,之前公司的方案是使用postman进行接口测试。但是伟大的墙导致我们只能用离线版postman。。然后一个很长很长的接口列表,一个接一个的访问。我的天哪。。所以萌生了一个想法,使用python编写一套接口测试脚本,设置接口列表,然后逐条访问,输出日志。

第一个坑:

POST 和 GET----GET一般用于获取/查询资源信息,而POST一般用于更新资源信息|Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求。

做过接口测试或者做过前端的人都知道,接口的访问方式是不一致的,所以才会使用postman来进行接口测试,因为它可以设置post和get方式。使用python模拟这俩种访问方式是重中之重。先说GET方式。GET方式就比较简单了,把接口放进浏览器地址栏,点下回车就完成了一次GET。所以就需要使用python访问URL就可以模拟一次GET 测试。

1 import urllib2
2 url_save = 'http://www.baidu.com/'
3 try:
4     s_save = urllib2.urlopen(url_save).read()
5     print s_save  
6 except urllib2.HTTPError, e:
7     print e.code
8 except urllib2.URLError, e:
9     print str(e)

如上所示就完成了一次GET请求,调用urllib2库,然后将一个字符串形式的URL传给urllib2.urlopen函数,最后使用read()方法将GET回来的数据存储起来。

然后说说POST。其实在python的urllib2库中,我们刚刚所使用的urlopen函数还有其他几样不是必选的入参,因为这些入参给定了初始化的值:

1 def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,
2             cafile=None, capath=None, cadefault=False, context=None):

如上代码,urllib库有一个很智能的毛病。data不给值,访问方式就是GET,data给了值,方式就会变成POST;所以模拟POST 方式的代码如下:

import urllib 
import urllib2 
url = 'http://www.example.com' 
# values的形式:name:value
values = {'**' : '***', '**' : '***', '**' : '***' } 
#使用urllib.urlencode函数对values字典进行处理,最终形式为:**=***&**=***
data = urllib.urlencode(values) 
#如果对data顺序有要求,建议自己拼接data
req = urllib2.Request(url, data) 
response = urllib2.urlopen(req) 
the_page = response.read()

就像如上代码,把POST方式所需要的数据写到data参数中去,POST方式就模拟成功了。

第二个坑:cookie的使用

使用python获取cookie所需要的库叫做cookielib。获取cookie的例子:

 1 # 这里有四种CookieJar,CookieJar是最原始的2 cookie_use = cookielib.CookieJar()3 handler = urllib2.HTTPCookieProcessor(cookie_use)4 # 使用绑定好CookieJar的handler创建一个opener5 opener = urllib2.build_opener(handler)6 # 将opener安装到urllib2中7 urllib2.install_opener(opener)8 # 使用安装好的urllib2访问某一网站获取cookie9 urllib2.urlopen('https://....../login')
10 #这个时候cookie已经被CookieJar获取到了
11 print cookie_use

在下一步,将获取到的cookie绑定到opener头中:

1 '''
2  将获取到的cookie绑定到opener,上一步获取的cookie并不满足如下格式,
3  需要自己进行字符串的切片和拼接 
4 '''
5 opener.addheaders.append(('Cookie', 'name=***&888=888'))

现在的opener就可以用来访问任意需要登录的网站了!

功能:功能实现,实现与设计一致, 接口通过性测试

健壮性: 边界值,容错性

性能: 并发及压测

稳定性: 长期运行的稳定性

安全性: SQL注入, session依赖, 数字签名, http接口的安全性

常见接口种类#

Http/Https接口: 通过http/https协议传送接口数据(通常按字符串/二进制传输), 如常见的网页表单, https安全性更好

RESTful Api: REST表述性状态传递. 一种设计风格,基于http/https协议, 把一切接口视为资源, 接口要分版本,在统一的域名下管理, 不同的方法(get/post..)做不同的事,通常请求及响应使用json格式

Web Service: SOAP简单面向对象协议, 基于http实现的一种RPC方案.接口返回一些对象,可以直接通过操作对象,实现我们需要的业务处理.使用xml格式传输数据

RPC接口: RPC为远程方法调用, 有不同的实现方案,基于TCP/Http协议的都有. RPC可以想我们本地导入和调用对象一样使用. Dubbo接口也是一种RPC接口.

常见接口数据类型#

请求数据类型(Content-Type):application/x-www-form-urlencoded: 常规只有文本的网页表单application/json: RESTful Api常用格式, 结构清晰, 含有多层嵌套multipart/form-data: 既有文本,又有上传文件或富文本框的混合数据表单text/xml: xml格式, RPC接口常用格式

响应数据类型string/html: 返回字符串或网页源码json: RESTful Api常用响应格式, 结构清晰xml: RPC接口常用格式

常见接口安全验证方式#

Auth_1.0/Auth_2.0: 通用接口授权方式

Session依赖: 需要登录之后才能进行接口操作

Token验证: 先要使用自己的appid/appsecret通过获取token接口验证身份获取一个token(令牌,有一定有效期), 然后带着token访问接口

数字签名: 将原本的参数按一定规则进行组合,配合时间戳或appsecret, 通过加密算法生成一个签名sign, 携带签名进行接口请求

常见接口请求方法#

GET: 获取资源

POST: 修改资源

PUT: 上传资源

DELETE: 删除资源

HEAD: 只请求页面首部

PATCH: 补丁

OPTIONS: 运行客户端查看服务器性能
......

常见状态码(RESTful规范)#

  • 200系: 成功200 OK - [GET]:获取资源成功201 CREATED - [POST/PUT/PATCH]:创建/修改成功202 Accepted - [*]:任务接受204 NO CONTENT - [DELETE]:删除成功

  • 300系: 重定向301 Moved Permanently: 永久重定向302 Found: 临时重定向

  • 400: 资源错误400 INVALID REQUEST - [POST/PUT/PATCH]:用户请求错误401 Unauthorized - [*]:没有权限(鉴权失败, 接口层)403 Forbidden - [*] 资源禁止访问(服务器层,没有访问权限)404 NOT FOUND - [*]:资源不存在405 Method Not Allowd: 访问的方法不允许, 如用POST访问只支持GET请求的接口406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)410 Gone -[GET]:资源被永久删除422 Unprocesable entity - [POST/PUT/PATCH] 当创建对象时,发生验证错误

  • 500系: 服务器内部错误(接口崩溃或有Bug)500 INTERNAL SERVER ERROR - [*]:服务器发生错误

接口业务类型#

  • 返回数据型接口: 只从数据库读取数据

  • 业务操作型接口: 需要写数据库(接口测试需要要涉及参数化或环境清理)

快速上手接口测试#

获取接口文档#

Wiki

Word文档

Postman导出

抽象接口定义

接口管理平台

接口文档分析#

  • 功能分析: 是否能满足业务(是否缺少某个前端需要的参数), 是否能满足所有业务场景(是否有漏开发接口, 比如只开发了单品接口,没开发套餐接口)

  • 设计分析: 是否有不规范字段(如,nickname, passwd);不规范格式(如sex,用男,女而不是1,2);是否有易混淆字段(如amount和total);是否有单词拼错;是否有和数据库字段对应但名称不一样的(易错)

  • 接口分析: 协议类型(http要考虑安全);请求方法(是否规范);请求编码格式(表单/Json/xml, 很多接口文档不声明,导致测试调试不通);接口授权方式;接口业务类型(关系到是否需要做参数化或环境清理); 返回值类型及结构(关系到怎么断言)

  • 接口依赖: 需要什么环境准备和业务场景, 依赖那些接口, 有那些动态数据, 预备环境怎么保障

  • 参数分析: 各个参数的参数类型,组成规则,是否允许不传,是否可以为空, 是否允许多传参

  • 业务分析: 如price字段必须和数据库中的商品的price字段一致,才能校验通过

  • 非功能性: 接口的技术实现方案是否合理, 能否满足高并发的性能要求, 边界值/极限值的处理是否合适, 是否前后端都有数据格式校验等(如精确度为秒级的订单号生成器,在高并发下会导致生成同一订单号的问题)

  • 其他: 如反爬,对headers的一些限制和校验, ip等限制

编写接口用例#

Excel/TestLink/禅道

  • 单接口用例: 正常数据/边界数据/异常数据(健壮性)/并发(一致性)/性能/安全性(抓包截取伪造/SQL注入/跨域请求)

  • 场景用例: 列出常见的用户场景, 用接口进行覆盖, 业务场景压测(寻找某个环节的性能瓶颈)

TestCase

Url

Method

DataType

a

b

Excepted

Actual

Status

test_add_normal

/api/add/

GET

Url

3

5

8

test_add_zero

/api/add/

POST

FORM

0

0

0

test_add_negetive

/api/add/

POST

FORM

-3

5

2

test_add_float

/api/add/

POST

FORM

3.2

5.2

8.4

test_add_null

/api/add/

POST

FORM

0

执行接口测试#

  • Postman: 功能调试

  • Jmeter: 性能

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

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

相关文章

mac内存不足怎么清理?有哪些免费的软件工具?

当你的mac电脑使用一段时间之后,你可能就会发现,原本非常流畅的运行开始出现卡顿的现象,此时正是mac内存不足的外在表现。可mac内存不足怎么清理呢,别急,清理内存的方式方法有很多,小编将结合实际情况给大家…

免费实用在线AI工具集合

免费在线工具 https://orcc.online/ 在线录屏 https://orcc.online/recorder pdf在线免费转word文档 https://orcc.online/pdf 时间戳转换 https://orcc.online/timestamp Base64 编码解码 https://orcc.online/base64 URL 编码解码 https://orcc.online/url Hash(MD5/SHA…

网络安全专业岗位详解+自学学习路线图

很多网安专业同学一到毕业就开始迷茫,不知道自己能去做哪些行业?其实网络安全岗位还是蛮多的,下面我会介绍一些网络安全岗位,大家可以根据自身能力与喜好决定放哪个方向发展。 渗透测试/Web安全工程师 主要是模拟黑客攻击&#…

苹果电脑怎么安装crossover 如何在Mac系统中安装CrossOver CrossOver Mac软件安装说明

很多Mac的新用户在使用电脑的过程中,常常会遇到很多应用软件不兼容的情况。加上自己以前一直都是用Windows系统,总觉得Mac系统用得很难上手。 其实,用户可以在Mac上安装CrossOver,它支持用户在Mac上运行Windows软件,例…

Win10鼠标右键新增软件快速打开项

1、cmd 运行 regedit 2、找到该位置的shell文件夹 3、在shell文件夹下创建需要添加的软件名的文件夹,并修改相关信息 4、新建子文件夹command,并修改相关信息 5、效果

十天学会单片机可能吗?单片机入门需要多久?

在开始前我有一些资料,是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!! 十天学“会”单片机&#xf…

亚马逊广告怎么优化?11条口诀请谨记

对于亚马逊卖家来说,想要销量好,亚马逊广告是不可或缺的!那么卖家要如何优化亚马逊广告才可以获得更好的效果呢?今天给大家分享11条亚马逊广告优化口诀,赶紧收藏学起来吧! 亚马逊广告优化口诀分享 1、曝光高…

党务政务服务热线|基于SSM的党务政务服务热线平台(源码+数据库+文档)

目录 基于SprinBootvue的党务政务服务热线平台 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2后台功能模块 5.2.1管理员功能模块 5.2.2部门功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: …

2D-3D 转换中,为什么世界坐标要扩充成四维, 图像坐标要扩充成三维?

总结 在计算机视觉和图形学中,将世界坐标扩充成四维,以及图像坐标扩充成三维,是为了便于运用齐次坐标(homogeneous coordinates)进行坐标变换。这样的做法简化了投影变换的数学表示和计算,特别是在三维场景…

python + word文本框中文字识别并替换【真替换,不只是识别】

1. 简单描述 在一些转换场景下,文本框不会被转换,需要先识别成文字内容。 【识别的文字段落可能会和实际看到的效果有些差异,后续还需校对,如下图】。 不足:除了上面说的那个情况(上图说的问题&#xff0…

【桌面应用开发】Rust+Tauri框架项目打包操作

1.项目npm install下载项目依赖(需要配置好node.js环境) 可参考:https://blog.csdn.net/m0_64346565/article/details/138319651 2.自定义图标(项目初始化开始第一次需要配置生成,后面可跳过这一步骤) Ta…

ESP32引脚入门指南(七):从理论到实践(IIC)

引言 IIC(Inter-Integrated Circuit),又称为IC,是一种简单而高效的多主控器串行通信协议,常用于微控制器和各种外围设备之间的通信。在ESP32系列芯片中,IIC协议被广泛应用于连接各种传感器、存储器和其他支…

机器学习-Numpy

机器学习-Numpy 如果一个人拒绝提高自己的思想觉悟,那么他只能处在弱小、可怜、凄惨的境地。 目录 机器学习-Numpy 1.Numpy:生成矩阵 做矩阵运算 1)创建矩阵 ①使用列表创建 ②使用元组创建 2)矩阵取值 3)numpy…

GitHub搭建免费博客

一、GitHub仓库准备 ​ 搭建博客需要准备两个仓库。一个存放博客图床的仓库,另一个存放博客网站的仓库。 1.1、图床创建 新建仓库 第一步: ​ 第二步: 生成Token令牌 点击右上角头像->Settings->下拉,直到左侧到底&#…

ESP32 + ST7789 LCD

1、准备 ESP32 单片机开发板 ST7789 LCD 模块(240 * 320 像素) 杜邦线 2、接线 LCD功能ESP32VCC 供电电压正极 3.3V 、 5V GND 供电电压负极 GNDIDN / MOSI SPI 接口数据 引脚 23CLK 串行接口时钟信号 18CS 芯片选择引脚;低电平有效 5DC 显…

如何在MAXScript中随机选择集合的百分比?

有时,你希望随机选择对象的子集来应用材质或效果。手动操作随机选择是一件麻烦的事,而且随机的效果也不理想,最好的方法是编写一个脚本来执行。以下是MAXScript随机选择函数的示例。 function getRandomFromCollection collection percentag…

以太网技术介绍

随着通信和计算机技术的不断发展,无论是骨干网还是接入网,以太网都已成为应用场景最多,应用范围最广泛的技术之一。对于初次应用以太网的读者,本文主要给出以太网技术的基础知识,并对以太网涉及的部分协议进行简要说明…

收音机套件焊接和装调的总结

很早之前买了一个小收音机,今天翻出来焊接上。 还好,质量挺好的,电路板没有氧化。 一。静态电流 pcb上面留有ABCD四个测电流的位置。方便调试。 焊接后,V1电流偏大,如果电流过大,会导致R2的压降过大&am…

GT2505HS-VTBD 三菱触摸屏手持式5.7寸型

GT2505HS-VTBD 三菱触摸屏手持式5.7寸型 GT2505HS-VTBD参数,GT2505HS-VTBD用户手册,GT2505HS-VTBD使用手册GT2505HS-VTBD参数说明:手持式5.7吋型,VGA 640*480,TFT彩色液晶屏,65536色,内存32MB,DC24V,内置以太网接口。 GT2505HS-VT…

agiletc部署

数据库创建及运行 启动命令 cd /AgileTC/case-server&& nohup mvn spring-boot:run &查看是否启动成功 http://192.168.101.:8094/case/caseList/1需要安装java javac等 一、安装java 1 安装java11 sudo yum install java-11-openjdk-devel -y2 切换到java11 …