利用postman实现自动化测试
背景根据公司安排,沐白同学要去测试部门轮岗两周,今天是轮岗第一天。沐白很激动,因为??,你懂的,测试部门有很多小姐姐,咳咳!好了不开玩笑了,沐白眼里只有代码!
主管:沐白,我发你一个脚本,你看能不能把脚本优化一下
我:内心os(啥?刚来几分钟,屁股没坐热,就让我优化脚本)但咱也好歹实习了半年,也算是见过小风浪的??,内心的小慌张,可不会显示在脸上,"好的好的??,我马上看下"
打开主管给的脚本,愣了一下,有几个excel、json文件,疑惑脸??,这这这就是脚本文件吗?,我怎么没看到代码...,行吧??,一步一步来,既然主管说用postman,那就导入postman试一下
下面的脚本是自己写的,不是公司实际项目的,为了演示的方便,我简化了接口的参数
考虑到有一些小伙伴可能之前没有接触过postman,所以先来简单的介绍一下postman提供的一些功能
collection: 集合,我们的接口就是写在它里面的,上图的增加订单记录就是一个collection
folder: 如果接口数量很多,需要分类,我们可以在collection下新建文件夹,然后在文件夹里编写接口,因为演示的接口很少,我就没有建文件夹??
request: 接口,这就是我们主要关心的,我们可以看到,图中有两个接口,一个是获取商品种类Id的,还有一个是购买商品的,我们可以为每个接口设置下列参数
Params 查询串的参数列表
Authorization 授权,在这里可以设置请求认证的参数,来确保这个请求是可以被服务端允许的,比如说添加token,当然我们也可以放到Headers里
Headers 请求首部
Body 请求体, post请求的参数就是在这里写的
Pre-requese Script 请求的前置脚本 顾名思义,这里写的脚本,会在这次请求发送之前执行
Tests 测试脚本,我喜欢把它叫做后置脚本,会在这次请求结束之后执行,我们可以对这次请求的结果进行认证、操作
Settings 里面一有些选项,可以设置重定向的行为
Environment:环境,分为全局环境和局部环境 类似于作用域的效果,我们可以在它下面定义变量,并且可以设置请求运行时,它们所处的环境,这关系到变量是否能被访问
variable:变量,我们可以利用变量取代硬编码,提高脚本的重用性
介绍完了postman提供的常用功能之后,接下来我正式演示一下,怎么利用postman来进行自动化测试
我的目标是在数据库中插入两万条购买记录
一次购买记录的添加流程
调用 /getGoodsId 获取商品种类Id
调用 /bugGoods 添加购买记录,是post请求,并且请求体里的值来自 /getGoodsId 返回的结果
我们可以利用Tests模块,获取到响应数据里的goodsId后,把环境中的goodsId这个变量重置为它,这样就可以在下一次请求时带上这个参数的正确值了
代码如下:
pm.test("获取商品种类Id", function () {
// 把响应的数据转换为JSON格式
let { success, data } = pm.response.json();
// 判断请求是否成功, 如果验证没通过, 就不会执行下面的语句,并且这次请求流也会终止, 也就是下面的购买商品请求就不会发送了
pm.expect(success).to.eql(true);
// 如果请求成功,就设置goodsId这个变量, 并会在下面的请求中带上这个最新的值
pm.environment.set("goodsId", data.goodsId);
});pm.test 方法可以设置断言,如果callback(返回false就是没通过校验,上面是通过pm.expect来判断的,你也可以自己写判断,来返回true或false)没有通过,那么这次执行就会终止,包括接下来的请求也不会发送,这很重要,因为大部分的情况下,请求的发送是有前置条件的,就像这个例子,然后获取商品种类失败了,那么购买商品的请求就不应该发送
最后,我们只要让这个collecion连续执行20000次就行了,点击collecion右侧小箭头
设置执行次数、间隔时间,点击运行按钮,就OK了~
最后附上后端代码,用koa简单的写了一个服务器
const Koa = require('koa');
const app = new Koa();
app.use(async (ctx, next) => {
if(ctx.url === '/getGoodsId') ctx.body = { success: false, data: {goodsId: Math.ceil(Math.random() * 100)} }
else next()
});
app.use(async (ctx, next) => {
console.log(ctx.req)
if(ctx.url === '/bugGoods') {
ctx.body = {success: true, data: '购买成功'}
} else next();
});
app.use(async (ctx, next) => {
ctx.body = '404';
});
app.listen(80);最后,我们把这个collecion导出,看下是个什么东东
发现是个json文件,嗖嘎??,打开这个json文件,发现里面有我刚才写的后置脚本,这就解释了为什么主管给我的脚本里面有json文件了,
至于里面的excel文件,它的作用和变量是类似的,都是为了满足请求参数值的变换,但与变量相比,少了灵活性,所以我的优化就是用变量和脚本来取代了excel文件
好了,文章到这里就结束了,希望能帮助到再看的各位,??
postman+newman还是挺好用的
页:
[1]