问题描述
我有一个使用开始转换服务开始的转换。
在mongo中,我有一个监视转换状态的字段:
xgb_model_latest = xgboost.XGBClassifier() # or which ever sklearn booster you're are using
xgb_model_latest.load_model("model.json") # or model.bin if you are using binary format and not the json
。
如何创建一个步骤定义,使之等到mongo字段的状态值完成。? 如果要转换的文件很大,则转换将需要几分钟(1分钟〜30分钟)。
我不想设置修复计时器。
该功能类似:
解决方法
您应该设计功能来反映用户体验。在这种情况下,用户可以开始操作并最终获得两种(或更多)不同的体验。
-
转换非常迅速,用户可以看到转换已完成
-
转换时间很长,用户可以看到转换正在进行中
因此,您至少需要两种不同的方案来解决此问题。因此,让我们开始
Scenario: Long running conversion has finally completed
您可能想探索类似的东西
Given my conversion has status runningA
Given my conversion has status runningB
...
那么这如何回答您的最初问题?好吧,它所做的就是将其转换为一些不同的等效问题。显然,任何有用的步骤定义都不能长时间等待某些事情的发生。如果这样做,将使您的测试套件无法使用。因此,要测试长期运行的流程,您必须使用Givens将流程置于特定状态,以使您能够立即获得响应。
因此,在您的情况下,您将编写诸如
之类的GivensNever wait in a Then instead translate the waiting into the thing being done in a Given
并在探索长期运行过程行为的方案中使用这些Givens。
从上面我们可以在结实时提取“经验法则”,
{{1}}
,请参阅下面的步骤定义,但是超时 功能超时,确保承诺在5000毫秒内解决
何时(“用户等待,直到收到完成状态”,
let start = Date.now()
function getRunDetailsStaus() {
return getStatus(runDetailsId) //promise function and returns the status from mongoDB
}
function next() {
return getRunDetailsStaus().then(function (result) {
console.log("status: ",result.runStatus,Date.now() - start)
if (status == 'DONE') {
return status
}
else {
return next()
}
})
}
return next()
.then((response) => {
// process final results
})
.catch((error) => {
//process error
})
});```