我有一个从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");
}
}
});
});
答案 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()。