咕噜咕噜的任务 - 等待服务器(selendroid)准备就绪



我想等待服务器准备就绪,然后在其上运行任务

编辑:我已经想通了一些。我正在正确过滤我的字符串。但是,我怎样才能让它在后台运行,并在咕噜声序列完成时终止它?

考虑 grunt common server spec-e2e这将运行常见任务,运行 grunt 服务器,然后(不停止服务器)在顶部运行下一个任务。完成所有这些操作后,它会自动关闭服务器。

这就是我正在尝试创建的功能。

我学到的几个要点:

  • 从节点启动的进程 - 例如 require('child_process').spawn(...) - 将继续为所有后续的 grunt 任务运行(单个任务完成后,它们不会关闭)。
  • 一旦 grunt 完成任务序列的运行,它将终止所有生成的进程。

因此,命令 grunt selendroid:selendroid.jar spec-e2e - selendroid 任务启动服务器的位置 - 将使服务器保持运行,直到spec-e2e任务完成。

我的selendroid任务的代码是:

grunt.registerTask('selendroid', 'Start selendroid server', function (appLocation) {
    var done = this.async();
    var timeout = setTimeout(function() {
        console.log('Selendroid took too long to start');
        done(false);
    }, 30000);
    function checkLoaded(data) {
        data = data.toString();
        if (data.indexOf('Selendroid standalone server has been started on port') > -1) {
            clearTimeout(timeout);
            done();
        }
    }
    if (typeof appLocation === 'undefined') {
        console.log('App to test not set, aborting...'.red);
        done(false);
    }
    var cmd = require('child_process').spawn('java', ['-jar', 'selendroid.jar', '-app', appLocation]);
    cmd.stdout.on('data', function(data) {
        checkLoaded(data);
    });
    cmd.stderr.on('data', function(data) {
        checkLoaded(data);
    });
});

相关内容

最新更新