Postman验证接口响应结果

使用Postman进行接口测试时,如何对接口响应的结果进行校验呢。判断接口返回的实际结果是否符合预期结果,需要使用到Postman的断言功能。一般情况下,断言一个接口的响应结果会根据响应状态码或响应结果中的关键字段的值进行判断。

断言:检验预期值与实际值是否相等或是否匹配
预期值 = 实际值 则测试通过OK
预期值 ≠ 实际值 则测试不通过Fail

Postman针对接口的请求报文和响应报文分别提供了Pre-request Script、Test Script,这两个是建立在JavaScript语言环境基础上的
Pre-request Script:预置脚本。可用来修改一些默认参数,在请求发送之前执行。
Test Script:后置测试脚本。当接收到响应之后,再执行测试脚本。

以下针对具体案例说明Postman的断言功能的使用

响应结果json字符串1
请求URL:http://{{IP}}:{{Port}}/web/restful/claim/pushClaim
请求方式:post
传递参数:accidentNo=随机数
断言规则
A.响应状态码:分别对不同状态码进行处理输出
B.响应内容:返回的accidentNo参数值与定义的一致
C.响应时间:小于0.8s

{
    "accidentNo": "Acc_560295",
    "auditReport": {
        "auditRuleTriggers": []
    },
    "claimUniqueId": "claim_131468",
    "interfaceCode": "ClaimPush",
    "message": "success",
    "resultCode": "000"
}

1、请求发送前,参数设置Pre-request Script

// 随机事故号
environment.accidentNo = `Acc_${randomInt(100000, 999999)}`;
pm.environment.set("accidentNo", environment.accidentNo);

2、请求响应后,在Test Script中进行判断操作,思路如下
1)、对预期结果和返回结果进行判断
2)、判断相等则设置tests语句为true
3)、判断不相等则设置tests语句为false,即失败,并且打印实际接口定义的响应代码

var state=responseCode.code;//获取返回状态
var number=(state.toString()).substr(0,1);//将返回的number类型转为string类型,并获取第一位
switch(number){
case '2':
    test();
    break;
case '4':
    clientQue(); //4开头的状态,简单定义为客户端问题
    break;
case '5':
    serverQue(); //5开头的状态,简单定义为服务器问题
    break;
default:
    tests['测试不通过,状态='+state]=false;  //如出现其他情况,则打印状态,并测试不通过
    break;
}
 
function test(){ //状态为200执行的函数
var accidentNo = pm.environment.get("accidentNo",accidentNo);

var result = JSON.parse(responseBody);
 if(result.accidentNo==accidentNo){
        tests["测试通过(事故号=========="+accidentNo+")"]=true;
    }else{
        tests["测试失败 (响应代码="+result.resultCode+")"]=false;
   }
}

//客户端问题
function clientQue(){
    tests['客户端问题(请求参数或方式错误)---测试失败---状态码为'+state+'   requestURl为'+request.url]=false;
}
 
//服务器或者网关问题
function serverQue(){
    tests['服务器或网关问题---测试失败---状态码为'+state+'   requestURl为'+request.url]=false;
}

//检验响应时间是否小于0.8s
pm.test("响应时间 < 800ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(800);
});
image.png

image.png

响应结果json字符串2
请求URL:http://{{IP}}:{{Port}}//web/rest/submitTask
请求方式:post
传递参数:accidentNo=随机数
断言规则
A.响应状态码:是否为200
B.响应内容:是否包含指定字符串
C.响应时间:小于0.8s

{
    "responseBodyVo": {
        "auditRuleTriggers": [
            {
                "actualValue": "",
                "auditScore": 10,
                "itemInfoList": [
                    {
                        "claimItemUniqueId": "Unique0005",
                        "feeAfterDiscount": 100,
                        "itemName": "发动机油",
                        "operationTypeId": "05",
                    }
                ],
                "itemName": "玻璃胶",
                "ruleName": "请核实是否属于保险责任",
                "ruleNo": "010201002X",
                "ruleType": "03",
            }
  ]
}

1、请求发送前,参数设置Pre-request Script

// 随机事故号
environment.accidentNo = `Acc_${randomInt(100000, 999999)}`;
pm.environment.set("accidentNo", environment.accidentNo);

2、请求响应后,在Test Script中进行判断操作,思路如下

//检验JSON格式的响应数据中ruleNo是否为"0102010020"
if(tests["code is 200"] = responseCode.code === 200){ 
    pm.test("返回ruleName值 = 请核实是否属于保险责任", function () {
        var jsonData = pm.response.json();
        if(pm.expect(pm.response.text()).to.include("0102010020")){
             pm.expect(pm.response.text()).to.include("请核实是否属于保险责任");
        }
       
    });
}else{
     pm.test("测试不通过",function(){});
}


//检验响应时间是否小于0.8s
pm.test("响应时间 < 800ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(800);
});

var registNo = pm.environment.get("registNo");
var deflossMainId = pm.environment.get("deflossMainId");
//在Postman Console控制台输出registNo、deflossMainId值
// console.log(registNo);
// console.log(deflossMainId);

//检验响应的状态码是否为200
pm.test("报案号"+registNo+"   定损单号"+registNo+"    Status code is 200", function () {
    pm.response.to.have.status(200);
});

//检验是否包含规则 "0102010020"
pm.test("包含字符串'0102010020'", function () {
    pm.expect(pm.response.text()).to.include("0102010020");
});
image.png

END


如果你喜欢我的分享,那就在右下角点个喜欢吧
你的鼓励是我最大的动力来源,在此深表感恩
软件测试的路上,我们可以互相关注,相互学习,共同进步,微信ID:929194573


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352