ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Postman提取返回值

2019-07-02 10:03:49  阅读:375  来源: 互联网

标签:乡愁 提取 Postman json jsonData token globals 返回值 pm


json响应结果

Postman是做接口测试的,但是很多接口并不是直接就能测试的,需要一些预处理。比如登录的时候,需要传递一个token。如果是网页测试,一般打开登录页面的时候就会自动生成一个token,如果返回的是json格式,用Postman从中提取值很简单的,在Test中输入:

{
    "access_token": "dda7b55f-574d-4de6-9f62-d849d5894ba9",
    "token_type": "bearer",
    "refresh_token": "1da3f4fb-dbf7-40d6-9316-32916f4c0d03",
    "expires_in": 3599,
    "scope": "READ WRITE"
}

如上要提取access_token的值,在Test中输入:

//保存响应结果json
var jsonData = JSON.parse(responseBody);
//将响应结果中的access_token保存为全局变量hb_access_token  
//最新版本pm环境变量设置使用方法
pm.globals.set("hb_access_token",jsonData.access_token);

上面的响应结果是json格式,如果响应结果是text格式的如何获取返回值呢?

text响应结果

案例1

VZISsIhsksx3lHKksBE68sJ8NFlzZWNyZXRJZD1BS0lEbXRoeUxFNFFXMDVXWEhqNFN5RjBEdkpBbElPeHFyY3cmY3VycmVudFRpbWVTdGFtcD0xNTYxOTc5MTMzJmV4cGlyZVRpbWU9MTU2MjE1MTkzMyZyYW5kb209MzQ0MjkwOTEyJnByb2NlZHVyZT1oYi1tcDQtMjA=

如果是这种响应结果,那么获取响应值如下:

pm.globals.set("hb_sign",pm.response.text())

如果响应的结果是html格式,那么怎么获取其中需要的value呢?

案列2

<!DOCTYPE html>
<html lang="zh">
    <head>
        <meta charset="utf-8" />
        <title>Redmine</title>
        <meta name="description" content="Redmine" />
        <meta name="keywords" content="issue,bug,tracker" />
        <meta name="csrf-param" content="authenticity_token" />
        <meta name="csrf-token" content="UhYn8Ww03yLd1hNoliKSmU5uUZO33AmuxH+NQEqD3r2YCCdC64pmgmWOQNjyoAoki9MRJLosWAC0RX20+Th+gA==" />
        <link rel='shortcut icon' href='/redmine/favicon.ico' />
        <link rel="stylesheet" media="all" href="/redmine/stylesheets/jquery/jquery-ui-1.11.0.css" />
        <link rel="stylesheet" media="all" href="/redmine/stylesheets/application.css" />
        <script src="/redmine/javascripts/jquery-1.11.1-ui-1.11.0-ujs-3.1.3.js"></script>
        <script src="/redmine/javascripts/application.js"></script>
        <script>

如上,需要获取csrf-token的值,可以使用以下操作:

var cs_token_temp = pm.response.text();
var cs_token_temp_01 = data01.match(/name="csrf-token" content="(.*?)"/)[1];
//match()里面的前后两个反斜杠是必要的
pm.globals.set("cs_token", cs_token_temp_01);
console.log(pm.globals.get("cs_token"));

以上是使用正则表达式获取token的值。网上还有另外一种操作方法:

//转换XML body为JSON对象
var jsonObject = xml2Json(responseBody);
pm.globals.set("cs_token", jsonObject.html.head.meta[4].$.content);

可以使用pm.globals.set("getstring", JSON.stringify(jsonObject.html.head.meta));获得html的分层信息。

但是在使用这个操作的时候,一直是提示html 没有定义。查找postman的手册也没发现有什么特定的操作,不知道是不是收费版本才有的高级功能呢?


扩展

上面说到的json格式是简单的{}形式,如果碰到复杂的如下:

{
"status": 1,
"message": "success",
"data": [
    {
    "id": 1,
    "title": "乡愁",
    "author": "余光中",
    "content": "小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头。长大后,乡愁是一张窄窄的船票,我在这头,新娘在那头"
    },
    {
    "id": 5,
    "title": "乡愁",
    "author": "余光中",
    "content": "小时候,乡愁是一枚小小的邮票,我在这头,母亲在那头。长大后,乡愁是一张窄窄的船票,我在这头,新娘在那头"
    }
]
}

跟上面不同的是,data里面可能有多个json格式的数据,如果我们想断言data里面第一个json应该如何断言呢?其实也非常简单,我们在tests输入框中填写:

var jsonData = JSON.parse(responseBody);
tests["Check respose status value"] = jsonData.status === 1;
pm.test("判断data里面第一个json数据的id为1", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.data[0].id).to.eql(1);
});

标签:乡愁,提取,Postman,json,jsonData,token,globals,返回值,pm
来源: https://www.cnblogs.com/LOVEYU/p/11118627.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有