黄瓜步骤def等待,直到mongo的某个值被“完成”

问题描述

我有一个使用开始转换服务开始的转换。 在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分钟)。

我不想设置修复计时器。

功能类似:

  • ready,runningA,runningB,DONE用户上下文
  • Given用户开始转换(调用开始转换的服务)
  • When必须完成转换状态(在这里我要等到状态完成为止)

解决方法

您应该设计功能来反映用户体验。在这种情况下,用户可以开始操作并最终获得两种(或更多)不同的体验。

  • 转换非常迅速,用户可以看到转换已完成

  • 转换时间很长,用户可以看到转换正在进行中

因此,您至少需要两种不同的方案来解决此问题。因此,让我们开始

Scenario: Long running conversion has finally completed

您可能想探索类似的东西

Given my conversion has status runningA Given my conversion has status runningB ...

那么这如何回答您的最初问题?好吧,它所做的就是将其转换为一些不同的等效问题。显然,任何有用的步骤定义都不能长时间等待某些事情的发生。如果这样做,将使您的测试套件无法使用。因此,要测试长期运行的流程,您必须使用Givens将流程置于特定状态,以使您能够立即获得响应。

因此,在您的情况下,您将编写诸如

之类的Givens
Never 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
        })
});```

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...