最早接触Postman的时候还是一个Chrome插件,后来已经发展成了完成客户端。最近研究了一下,发现Postman也可以完成很多事情。譬如读取csv文件完成接口自动化测试。不过尝试过后,感觉还是Jmeter顺手和实用一些。具体可以看两个工具完成相同工作时的步骤和表现。
一、接口示例:
二、用例示例:
三、Postman篇
1. 配置环境
右上角齿轮按钮->Environment options->Add->添加一个测试环境
URL 变量名、value 常量
2. 编写接口信息
右上角切换至刚才添加的本地环境->选择请求方式->填入接口地址->填入接口参数
{{URL}}引用本地环境中的URL变量、{{booy}} {{type}} 用于参数化,来自txt文件中的第3列和第4列。
3. 编写前置脚本,用于从txt文件取值
var book = "人间失格"; 是定义一个默认值 用于不读取文件时进行测试
data.book就是取txt文件的book列(也可以写成data["book"])
pm.environment.set("book", book); 就是生成一个环境变量"book",值是js变量book(指向data.book)
console.log("执行用例: " + Case); 打印日志,Case指向(data.Case)
//获取book参数
var book = "人间失格";
if(data.book){
book = data.book
}
pm.environment.set("book", book);
//获取book参数
var type = "1";
if(data.type){
type = data.type
}
pm.environment.set("type", type);
//获取Case用例名
var Case = "Debug";
if(data.Case){
Case = data.Case
}
pm.environment.set("Case", Case);
//获取Assertion断言内容
var Assertion = "0";
if(data.Assertion){
Assertion = data.Assertion
}
pm.environment.set("Assertion", Assertion);
//打印日志
console.log("执行用例: " + Case);
4. 编写测试脚本(断言)
//状态码
pm.test("断言: HTTP状态码 200", function () {
pm.response.to.have.status(200);
});
//响应时间
pm.test("断言: 响应时间 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(200);
});
//自定义断言
var Assertion = pm.environment.get("Assertion");
var responseData = JSON.parse(responseBody);
if(responseData.errcode == Assertion){
tests["断言: errcode " + Assertion] = true;
}
else{
tests["断言: errcode " + Assertion] = false;
}
5. 请求一次
6. 自动化测试
顶部工具栏->Collection->Runner
Environment 切换测试环境、Iterations 请求数量、Data 选择文件(刚才的txt文件)、选择text/csv格式
这时可以预览数据池
测试结果
会话详情
日志
顶部工具栏->View->Show Postman Console
四、Jmeter篇:
1. 配置环境
2. 编写接口信息
3. 取值 (Debug时启动用户参数赋值、禁用CSV。正式测试时禁用用户参数,启用CSV数据文件,循环次数开启永远)
4. 断言
5. 请求一次
6. 自动化测试
测试报告
五、对比结果:
1. 从编写速度来看,Postman和Jmeter都很快,我只花了几分钟。
2. 从可扩展性来看,Jmeter写的话,脚本可以直接拿来测压力。
3. 从编写感受来看,Postman每个页面连接性不强,但胜在美观。Jmeter编写时各元件查看很方便。
4. 从上手难度来看,Postman需要写少了js语句,但其实不难。Jmeter则基本可以靠图形界面选择设置。
5. 从报告易读性来看,Postman本身测试结果很清晰,本身但不能导出报告。Jmeter 查看结果树很简明,还可以生成图文报告。
但是!
使用过程中发现,Postman有一个致命伤,就是一次测试只能读取一个CSV文件,所以接口都会使用这个文件。所以要么把txt设计的很通用,要么就得单个接口单个接口Runner。但是Jmeter没有这个问题,每个线程组都可以放一个接口适用的CSV数据池。编写完十几个接口后,一键执行。并且Postman的请求次数需要手动指定,Jmeter可以配合CSV设置无数据后自动停止。所以如果真的要编写一个适合长期一键执行的脚本,还是Jmeter更合适。
最后附上最近写的一个脚本,基本也是这个编写思路。