Postman是作接口測試的,可是不少接口並非直接就能測試的,須要一些預處理。好比登陸的時候,須要傳遞一個token。若是是網頁測試,通常打開登陸頁面的時候就會自動生成一個token,若是返回的是json格式,用Postman從中提取值很簡單的,在Test中輸入:javascript
{ "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中輸入:css
//保存響應結果json var jsonData = JSON.parse(responseBody); //將響應結果中的access_token保存爲全局變量hb_access_token //最新版本pm環境變量設置使用方法 pm.globals.set("hb_access_token",jsonData.access_token);
上面的響應結果是json格式,若是響應結果是text格式的如何獲取返回值呢?html
案例1java
VZISsIhsksx3lHKksBE68sJ8NFlzZWNyZXRJZD1BS0lEbXRoeUxFNFFXMDVXWEhqNFN5RjBEdkpBbElPeHFyY3cmY3VycmVudFRpbWVTdGFtcD0xNTYxOTc5MTMzJmV4cGlyZVRpbWU9MTU2MjE1MTkzMyZyYW5kb209MzQ0MjkwOTEyJnByb2NlZHVyZT1oYi1tcDQtMjA=
若是是這種響應結果,那麼獲取響應值以下:jquery
pm.globals.set("hb_sign",pm.response.text())
若是響應的結果是html格式,那麼怎麼獲取其中須要的value呢?正則表達式
案列2json
<!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的值,可使用如下操做:app
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的值。網上還有另一種操做方法:post
//轉換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); });