6

我希望能够进行一组 Casper JS 测试,并在成功时返回 0,在错误或测试失败时返回非零(我想从 java 运行 casper 命令并确定测试是否通过)。

我遇到的问题是总是返回退出代码 0。这是发生这种情况的示例测试:

var casper = require('casper').create();

casper.start('http://www.google.com', function() {
    this.test.assertEquals(true, casper.cli.options['value']);
});

casper.run(function() {
        casper.test.done(1);
});

以下所有命令都会导致退出代码为 0:

C:/casperjs/bin/casperjs test --value=true C:/Temp/simpletest.js
C:/casperjs/bin/casperjs test --value=false C:/Temp/simpletest.js
C:/casperjs/bin/casperjs --value=true C:/Temp/simpletest.js
C:/casperjs/bin/casperjs --value=false C:/Temp/simpletest.js

如何调用 Casper 并确定 Java 测试是成功还是失败/出错?

4

3 回答 3

1

首先,您不能在测试模式下覆盖 casper 实例,请参阅http://docs.casperjs.org/en/latest/testing.html#test-command-args-and-options

消除

var casper = require('casper').create();

从你的代码。

然后尝试

casper.start('http://www.google.com', function(test) {
    test.assertEquals(true, casper.cli.options['value']);
});

启动 casperjs

--fail-fast

这样每个测试都会以代码 1 退出。

然后在Java中

String[] args = {"/bin/sh", "-c", "casperjs test --fail-fast simpletest.js"};

Process proc = Runtime.getRuntime().exec(args);

logger.log(Level.INFO, IOUtils.toString(proc.getInputStream()));
String warnings = IOUtils.toString(proc.getErrorStream());

if (StringUtils.isNotBlank(warnings)) {
    logger.log(Level.WARNING, warnings);
}

int exitValue = proc.exitValue();

assertEquals(0, exitValue);

当然,您需要更改路径以适应您的环境。

希望有帮助!

于 2013-12-12T17:52:40.583 回答
0

我遇到的问题是总是返回退出代码 0。

您的 casper 测试应该是这样的:

var casper = require('casper').create();
var system = require('system');
var param;

casper.start('http://www.google.com', function() {

    //get parameter from command line
    system.args.forEach(function (arg, i) {
        if(arg.search(/--value=/i) != -1){
            param = arg.replace(/--value=/g, "");
        }
    });    

    this.test.assertEquals(true, Boolean(param));
});

casper.run(function() {
        this.test.done(1); 
        this.test.renderResults(true);
});

跑步:

casperjs simpletest.js --value=true

如何调用 Casper 并确定 Java 测试是成功还是失败/出错?

你应该看看这个答案:

CasperJS 将数据传回 PHP

于 2013-06-18T21:18:27.863 回答
0

返回失败的预定义代码(例如,我们给了 99(随机))

//Capture all fails
casper.test.on("fail", function () {
    casper.exit(99);
});

同样,您可以在高级别的问题上定义不同的代码

例如:要使重试逻辑到位,我们可以使用onWaitTimeout代码

casper.options.onWaitTimeout = function () {
    casper.screenCapture('POETerror', true);
    this.exit(98);
};
于 2015-02-11T15:36:57.320 回答