postman.setNextRequest无法正常工作

时间:2019-05-23 10:22:46

标签: javascript postman newman

我有一个从GitLab CI运行的集合,在部署它之前,我通常会在pm集合运行器中尝试它。

基于具有不同数据集的相同代码,集合具有具有相同结构的不同调用。类似于以下示例:

call 1
call 2 
call 3
call 4
call 1 
call 5
call 6
call 7
call 1
etc...

根据“呼叫1”的条件,postman.setNextRequest()决定运行呼叫2、3或4,依此类推。

代码可以正常工作,但是最后一个“循环”(意思是:调用1,调用8,调用9,调用10)和postman.setNextRequest()不起作用。

在Newman / Gitlab CI上,我得到以下字符串:Attempting to set next request to $[collection_name],但是在CollectionRunner上没有错误时,请求将不会被设置。

在代码进入的if语句中放置一些控制台日志会返回日志,这意味着它可以正常工作,但对于最后一个条件请求循环,仅 only 似乎无效。

该代码对于所有请求都是相同的。

这是适用于所有先前场景而不适用于最后一个场景的代码段。我唯一要更改的是如果字符串和“ postman.setNextRequest”请求为“ checkJobName()”

const   jsonData = JSON.parse(responseBody),
        json_identifier = jsonData.stages;

json_identifier.forEach(function cicla(arr) {
    arr.jobs.forEach(function cicla(job) {

    function checkJobName() {
        if (job.name === "premio_manuale") {
            return true;
        }
    }

    if (checkJobName() === true) {
        pm.environment.set("id_job", job.id);
        pm.environment.set("jobName", job.name);
        pm.environment.set("jobStatus", job.status);
        pm.environment.set("jobValidation", job.validation);
        JobStatusPerformer();
    }

    //// check functions 

    function JobStatusPerformer(){
        if (job.status === "success" ) {
                console.log("il job " + job.id + " " + job.label + " è in stato " + job.status + ", vado in idle ");
                postman.setNextRequest("1111");
            } 
            if (job.status === "pending" && job.validation === "manual") {
               console.log("il job " + job.id + " " + job.label + " è in stato " + job.status + " e in modalità " + job.execution + " , avvio il Job Resolve");
               postman.setNextRequest("Resolve_pm");
            }
            if (job.status === "idle" && job.validation === "manual" && job.execution === "manual") {
               console.log("il job " + job.id + " " + job.label + " è in stato " + job.status + " e in modalità " + job.execution + " , avvio il Job Run");
               postman.setNextRequest("Run_pm");
            }
            else if (job.status === "idle" && job.validation === "auto" && job.execution === "auto") {
                console.log("il job " + job.id + " " + job.label + " è in stato " + job.status + " e in modalità " + job.execution + " , attendere l'avvio e risoluzione automatica.");
                postman.setNextRequest("222");
            }
            else if (job.status === "idle" && job.validation === "manual" && job.execution === "auto") {
                console.log("il job " + job.id + " " + job.label + " è in stato " + job.status + " e in modalità " + job.execution + " , il job è in idle, attendere la risoluzione del job precedente. Se già in stato 'success' visualizzare il log errori");
                postman.setNextRequest("333");
            }
            if (job.status === "running" && job.validation === "manual" && job.execution === "manual") {
                console.log("il job " + job.id + " " + job.label + " è in stato " + job.status + " e in modalità " + job.execution + " , avvio il Job resolve");
                postman.setNextRequest("Resolve_pm");
            }
            else if (job.status === "running" && job.validation === "auto" && job.execution === "auto") {
                console.log("il job " + job.id + " " + job.label + " è in stato " + job.status + " e in modalità " + job.execution + " , attendere la risoluzione automatica.");
                postman.setNextRequest("444");
            }
            else if (job.status === "running" && job.validation === "manual" && job.execution === "auto") {
                console.log("il job " + job.id + " " + job.label + " è in stato " + job.status + " e in modalità " + job.execution + " , avvio il Job resolve");
                postman.setNextRequest("Resolve_pm");
            }
            if (job.status === "failed") {
               console.log("lo stato del job " + job.id + " è " + job.status + ". Verificare i log.");
               postman.setNextRequest("555");
            }
            else {
                postman.setNextRequest("666");
            }
    }

    });
});

1 个答案:

答案 0 :(得分:0)

如果没有对失败循环的状态更改描述,仍然很难遍历代码。此测试代码是否放置在每个请求中?在集合中如何排序?

但是,您正在两次编写setNextRequest,例如万一job.status ===“成功”

一开始

 if (job.status === "success" ) {
                console.log("il job " + job.id + " " + job.label + " è in stato " + job.status + ", vado in idle ");
                postman.setNextRequest("1111");
            }
执行

来设置postman.setNextRequest(“ 1111”);然后在最后一行中,也执行else定位。

if (job.status === "failed") {
               console.log("lo stato del job " + job.id + " è " + job.status + ". Verificare i log.");
               postman.setNextRequest("555");
            }
            else {
                postman.setNextRequest("666");
            }

然后您的原始postman.setNextRequest("1111")postman.setNextRequest("666")覆盖 请记住,setNextRequest不会立即执行nex请求。它仅更改工作流程顺序。

请尝试使用else语句重构代码,尤其是JobStatusPerformer()。