postman如何在前置处理器Pre-request Scripts轮询等待上个接口返回

在执行一个接口之前需要查询上一个接口的返回,但是上一个接口返回的字段value是异步返回,所以需要轮询一段时间,进行判断,所以就有了前置轮询等待的需求。

1.请求参数:以下是请求体为raw的形式,在Pre-request Scripts前置请求接口,设置轮询次数和间隔时间,base_request是需要轮询请求接口的请求参数,包括了请求的url、method、header、body;其中body包括mode(请求体类型)、raw(请求体类型为raw,则需要传raw)。以下的update_credit_request也是同理,因为轮询脚本一次调了两次接口。

2.请求方法:pm.sendRequest()用来发送请求

3.轮询核心:setInterval方法可以定时执行脚本,需要传入执行函数(getResult)、执行间隔时间(单位:mms),执行函数内调用pm.sendRequest()来发送请求,if/else做参数的匹配,如果匹配到想要的参数调用clearInterval(timer)来终止轮询,在这里我们还定义了一个i,来设置轮询的次数,超过轮询次数 我们就终止轮询。

var env = pm.environment.get("ENV")
var str_requestBody= pm.request.body.raw   // 获取请求体中的数据,字典
var json_requestBody = JSON.parse(str_requestBody)  // 把请求参数转成JSON
var mobile_no = json_requestBody.requestBody.mobile_no
console.log("请求手机号:",mobile_no) 

const base_request = {
    url: "http://www.baidu1.com",
    method: 'POST',
    header: 'Content-Type:application/json',
    body : {
    mode: 'raw',
    raw: {
    "url": "http://www.baidu.com",
    "method": "post",
    "requestBody": {
        "env": env,
        "product_code": "CHANGPING",
        "mobile_no": mobile_no
    },
    "timeout": 60,
    "headers": {
        "Content-Type": "application/json",
        "user": "qizhuxiedaima",
        "cardId_admin": "62"
    }
}
}
};

const update_credit_request = {
    url: "http://www.baidu2.com",
    method: 'POST',
    header: 'Content-Type:application/json',
    body : {
    mode: 'raw',
    raw: {
    "url": "http://www.baidu2.com",
    "method": "post",
    "requestBody": {
        "env": env,
        "product": "CHANGPING",
        "query_info": mobile_no
    },
    "timeout": 60,
    "headers": {
        "Content-Type": "application/json",
        "user": "qizhuxiedaima",
        "cardId_admin": "108"
    }
}
}
};

console.log("URL的信息:",base_request)

var i = 0;
// 封装发送请求方法,用于计数器调用
function getResult(){
    pm.sendRequest(base_request, function(err, response) {
        i += 1;
        if(err){
            console.log(err);
        }
        else{
            res = response.json()
            data = res.data.data
            a = data.hasOwnProperty("appl_no_credit_all")  // 判断是否存在该字段元素
            if(a == true){
            state = res.data.data.appl_no_credit_all
            console.log(state)
            if( state.match("PS") || state.match("RJ") || i > 40){   // 配置轮询次数,轮询终止条件:tradeStatus字段变为TRADE_SUCCESS,或轮询次数达到设定值
               clearInterval(timer); 
            }
            else{
                pm.sendRequest(update_credit_request,function(err,update_response){
                    last = update_response.json()
                    result = last.data.result
                    console.log(result)
                    if(result[0].match("通过处理阶段-FINISHED")){
                        console.log(result)
                        clearInterval(timer)
                    }
                })                
            }
            }
            else{
                console.log(data)
            }
        }

    });
    }

timer = setInterval(getResult, 30000);  // 配置轮询间隔(单位毫秒),例如没60秒轮询一次

你可能感兴趣的:(postman,postman,javascript,前端)