Postman Script用法

介紹

Postman提供了一定的腳本編寫功能沧踏,用戶可以通過編寫腳本添加一些動態(tài)行為寡壮,官方介紹如下:

Postman contains a powerful runtime based on Node.js that allows you to add dynamic behavior to requests and collections. This allows you to write test suites, build requests that can contain dynamic parameters, pass data between requests, and a lot more.

req-resp.png

Pre-request Script

在請求前執(zhí)行,用于添加一些動態(tài)的請求參數(shù)细办。

Tests

在獲取到服務(wù)端返回結(jié)果后執(zhí)行土浸,用于編寫測試用例罪针,判斷返回結(jié)果是否符合期望。

使用示例

示例簡述

有一個服務(wù)黄伊,服務(wù)調(diào)用方式如下:

  • 每次請求都需要添加當(dāng)前時間戳參數(shù)timestamp至請求頭泪酱;
  • 每次請求都需要對timestamp進(jìn)行加密生成數(shù)據(jù)簽名參數(shù)signature,并把signature添加到請求頭还最,signature參數(shù)生成算法:signature=MD5(salt+timestamp)墓阀。

模擬接口參考

以下是基于Spring Boot的接口模擬參考代碼:

package cn.centychen.demo.springboot.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * @author Cent
 * @createAt 2020/10/21
 */
@RestController
@RequestMapping("/postman")
@Slf4j
public class PostmanDemoController {

    private static final String SALT = "yJhjBoiGN8or";
    private static final char[] HEX_CHARS = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};


    @GetMapping("/demo")
    public String demo(@RequestHeader("timestamp") String timestamp, @RequestHeader("signature") String signature, String name) {
        if (!accessSignature(timestamp, signature)) {
            return "Sorry,signature is wrong!";
        }

        return String.format("%s,you do it!", name);
    }

    /**
     * 校驗(yàn)簽名
     *
     * @param timestamp
     * @param signature
     * @return
     */
    private boolean accessSignature(String timestamp, String signature) {
        return StringUtils.hasText(timestamp)
                && StringUtils.hasText(signature)
                && generateSignature(timestamp).equals(signature);
    }

    /**
     * 生成簽名
     *
     * @param string
     * @return
     */
    private String generateSignature(String string) {
        byte[] secretBytes = null;
        try {
            secretBytes = MessageDigest.getInstance("MD5").digest(
                    (SALT + string).getBytes());
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("簽名失敗拓轻!");
        }
        String signature = new String(encodeHex(secretBytes));
        log.info("signature=====>{}", signature);
        return signature;
    }

    /**
     * Encode
     *
     * @param bytes
     * @return
     */
    private char[] encodeHex(byte[] bytes) {
        char[] chars = new char[32];

        for (int i = 0; i < chars.length; i += 2) {
            byte b = bytes[i / 2];
            chars[i] = HEX_CHARS[b >>> 4 & 15];
            chars[i + 1] = HEX_CHARS[b & 15];
        }

        return chars;
    }
}

Postman調(diào)用

接口配置

image.png

Header配置

image-2.png

編寫pre-request script

//鹽值
var salt = 'yJhjBoiGN8or'

//請求參數(shù)name
var name='Cent';
pm.environment.set('name',name);

//獲取當(dāng)前時間戳
var timestamp = new Date().getTime();
//添加timestamp到環(huán)境變量
pm.environment.set('timestamp',timestamp);

//生成數(shù)據(jù)簽名斯撮,CryptoJS是Node的基礎(chǔ)包,可直接使用
var signatrue = CryptoJS.MD5(salt + timestamp).toString();
//添加signatrue到環(huán)境變量
pm.environment.set('signatrue',signatrue);

編寫tests script

pm.test("調(diào)用測試",function(){
    var name = pm.environment.get('name');
    pm.expect(pm.response.text()).eql(name+',you do it!');
});

調(diào)用測試

執(zhí)行調(diào)用返回結(jié)果如下文扶叉,驗(yàn)證通過勿锅。

請求頭

image-3.png

返回信息

image-4.png

Tests

image-5.png

參考資料

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市枣氧,隨后出現(xiàn)的幾起案子溢十,更是在濱河造成了極大的恐慌,老刑警劉巖作瞄,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茶宵,死亡現(xiàn)場離奇詭異,居然都是意外死亡宗挥,警方通過查閱死者的電腦和手機(jī)乌庶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來契耿,“玉大人瞒大,你說我怎么就攤上這事√鹿穑” “怎么了透敌?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵盯滚,是天一觀的道長。 經(jīng)常有香客問我酗电,道長魄藕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任撵术,我火速辦了婚禮背率,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嫩与。我一直安慰自己寝姿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布划滋。 她就那樣靜靜地躺著饵筑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪处坪。 梳的紋絲不亂的頭發(fā)上根资,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機(jī)與錄音同窘,去河邊找鬼嫂冻。 笑死,一個胖子當(dāng)著我的面吹牛塞椎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播睛低,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼案狠,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了钱雷?” 一聲冷哼從身側(cè)響起骂铁,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎罩抗,沒想到半個月后拉庵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡套蒂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年钞支,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片操刀。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡烁挟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出骨坑,到底是詐尸還是另有隱情撼嗓,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站且警,受9級特大地震影響粉捻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜斑芜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一肩刃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧押搪,春花似錦树酪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至厦画,卻和暖如春疮茄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背根暑。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工力试, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人排嫌。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓畸裳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親淳地。 傳聞我的和親對象是個殘疾皇子怖糊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容