一、理论知识
软件缺陷的定义
软件测试的目的
一些dos命令
软件测试基本流程
二、postman
接口
接口返回的数据格式
- json格式
json就是一种数据类型;
json由两组数据组成:MAP键值对、数组
工具网站 - html格式
- xml格式
接口测试协议
企业接口测试的流程和方案
接口测试工具
postman、jmeter、soupui、apipost、fiddler、charles
postman简介
请求部分的页签:
Params:用于在get请求传参
Authorization:postman自带的鉴权功能
Headers:请求头
Body:post请求传参
none:没有参数
from-data:既有文件又有键值对
x-www-form-urlencoded:只传输键值对
raw:创Json、txt、xml、html、js
binary:把文件以二进制的方式传输
Pre-request Script:接口请求之前的脚本
Tests:断言的代码
Cookie:postman的cookie的管理器
code:生产接口自动化脚本
响应部分的页签:
Body:返回的数据
Pretty:以json格式展示
Raw:以文本格式展示
Preview:以网页格式展示
Cookie:返回cookie信息
Headers:响应头
Test Result:断言结果
Status:状态码
Time:消耗的时间
Size:字节数
postman内置动态参数
时间戳: {{KaTeX parse error: Expected 'EOF', got '}' at position 10: timestamp}̲} 生成一个0-1000随机整…randomInt}}
生成一个GUID的字符串:{{$guid}}
postman环境变量和全局变量
环境变量和Globals都是全局变量
环境变量一般用于环境
全局变量一般用于用例
因为access_token每次都要手动输入,为了解决这个问题,可以在 Tests 这里 写上 console.log(responseBody); ,然后在左下角的console中可以看到access_token的内容。
那怎么去取这个值呢?【接口关联方式之一:JSON提取器】
// 提取access_token的值
var jsValue = JSON.parse(responseBody)
console.log(jsValue.access_token)
// 把提取的值保存到全局变量
pm.globals.set(“access_token”,jsValue.access_token);
这样其他都可以改成{{access_token}}
接口关联三种方式
postman的动态参数
断言
为什么要做mock测试?
在业务依赖的关系接口未开发出来时,测试人员为了保证项目的测试进度不受影响,就需要构造出来一个虚拟的接口来进行一系列的接口测试。
通俗讲,就是前后端开发速度不一致,为了不影响工程进度,构造一个虚拟接口进行测试。
- 创建Mock服务
- 查看环境变量
- 重新修改mock接口返回值,增加返回案例,最后去请求
添加案例(重新修改mock接口返回值,增加返回案例,最后去请求)
这时候当我们在浏览器中输入https://0b2213ba-8cfe-4403-82db-bd337636f3bd.mock.pstmn.io/testmock,得到以下界面,说明mock服务器创建好了。
var csrf_token = postman.getResponseCookie(“csrf_token”)
pm.globals.set(“csrf_token”, csrf_token.value);
交互数据分为请求头和响应
两个请求头
利用正则表达式取值,并将_statu设置为全局变量。
var _statu = responseBody.match(new RegExp(’_statu%3D(.+?)",’));
pm.globals.set("_statu", _statu[1]);
可以查看到
测试可以进行页面跳转
第8个跳转到帖子内容页接口的测试
首先在第7个的测试中,利用正则表达式获取tid的值,并设置为全局变量
然后在这里设置tid的值,并send查看结果
当我们利用这个run连续测试1-10的时候,当我们设置延迟为1秒时,发现第9个回帖功能不能实现
这时候,可以通过这样输入一句 console.log(responseBody); 再去run去排错。
(注意这里如果中间出现错误 停止运行的话,把cookie清空就好)
这时候可以观察控制台的输出结果
解决方法是:
// 自定义函数,让接口在请求之前先睡4秒钟,目的是“防灌水”
const sleep = (milliseconds) => {
const start = Date.now();
while(Date.now()<=start+milliseconds){}
};
sleep(4000);
接口加密
base64
MD5(最常用)
RSA
DES
AES
SHA
自定义加密算法
接口签名(难度系数较高,多用于金融、电信、支付宝项目、银行项目等)
前提:必须掌握JS和基本语法。
JS,接口签名,自定义函数,cookie,session,不同协议(http、webservice、websorckt、dubbo)
这个网站可以进行接口测试
在这里插入图片描述
通常接口测试要做的事情就是基于接口的请求填写的一系列参数,验证返回的数据和预期的功能是否一致。
下面这个就是抓包的过程,先按F12打开开发工具,然后选择“网络”,再在网页中点击一个你要抓的接口,比如这里是输入ip后点击“查询”,这时候去查看类型名为“script”的那个文件(平时也有查看xhr、ws、mainfest的)。
这里的“url”就是可以输入到postman中的url,然后send
通过postman断言机制对postman抓包返回的信息进行校验
json value check用的比较多
上面这两个也用的比较多
postman请求使用cookie
(当没使用cookie时,尽管购物车中有商品,send后的结果还是显示“购物车中没有商品”)
这时候可以把抓包的cookie信息复制到头域,再进行send
上面是一种方法,下面是另一种方法。
使用这里的sessionID(平时接口测试时,根据测试文档去选择需要添加的cookie)
添加之后,再次send。(这里要先调用登录接口,拿到cookies,这样后续接口可以直接使用拿到的cookies)
postman请求使用token
记得设置一个环境变量,并选择它
后面需要使用到鉴权,就加在头域中。