在postman中调用自定义签名方式的API


编   写:袁 亮
时   间:2017-02-09
说   明:在postman中自定义签名方式调用接口

一、目的
    1、电商项目内部api接口使用的签名方式导致在postman中不能使用
        需要在postman中,自行实现签名方式以方便测试API接口
    2、接口地址
        https://api.shop.ci123.com/apidoc/
    
二、实现原理
    1、在postman实际调用接口前,可以执行自定义js,从而实现数据签名
    2、自定义JS可以获取到请求参数、链接参数,并且可以自定义变量

三、实现过程
    1、增加链接参数 params
        appid:{{appid}}
    2、接口post参数增加
        expire:{{expire}}
        mdstr:{{mdstr}}
    3、添加预执行脚本 Pre-request script
        var appid = '10101';
        var appsercet = '8e2160ec2b07f1faca9055be530bf09d';

        // 定义appid
        postman.setEnvironmentVariable("appid", appid);

        // 定义时间戳
        var expire = new Date().getTime();
        postman.setGlobalVariable("expire", expire);

        // 数据签名
        var data = [];
        jQuery.each(request.data, function(key, value){
            if (key == 'expire') { // request里存储的是定义的值,而不是我们赋的值,需要单独处理
                value = expire;
            }
            if (key != 'mdstr') {
                data.push(key+'='+value);
            }
        });
        data.sort();
        var str = data.join('&')+appsercet;
        var mdstr = CryptoJS.MD5(str).toString().toLowerCase();
        postman.setGlobalVariable("mdstr", mdstr);
    
四、环境切换
    1、变量
        环境变量:EnvironmentVariable
            在整个environment内都可以用
            ps:在预执行脚本中,需要用environment.变量名来获取,不能执行获取到
        全局变量:GlobalVariable
            可以在任意环境下使用
            ps:预执行脚本中定义的变量并不能在url、params使用
                原因是因为拼接在预执行脚本之前
                单在body里又是可以用的,数据组装在预执行脚本代码之后
        自定义变量:
            仅能在预执行脚本中用
    2、环境管理
        2.1 可以将不同环境的变量定义在环境变量中
            比如测试机host,比如appid和appsecret等
        2.2 在url、params、body中的数据,预执行脚本等地方使用
    3、接口调用
        3.1 选择环境
        3.2 接口地址、参数等使用环境变量{{变量名}}
        3.3 添加接口特定参数
    4、添加预执行脚本
        // 定义时间戳
        var expire = new Date().getTime();
        postman.setGlobalVariable("expire", expire);

        // 数据签名
        var data = [];
        jQuery.each(request.data, function(key, value){
            if (key == 'expire') { // request里存储的是定义的值,而不是我们赋的值,需要单独处理
                value = expire;
            }
            if (key != 'mdstr') {
                data.push(key+'='+value);
            }
        });
        data.sort();
        var str = data.join('&')+environment.appsercet;
        var mdstr = CryptoJS.MD5(str).toString().toLowerCase();
        postman.setGlobalVariable("mdstr", mdstr);
    
    
    

发表评论