Jenkins 无法让JSCover和PhantomJS在Cloudbees上运行Jasmine测试

Jenkins 无法让JSCover和PhantomJS在Cloudbees上运行Jasmine测试,jenkins,jasmine,phantomjs,cloudbees,jscoverage,Jenkins,Jasmine,Phantomjs,Cloudbees,Jscoverage,我目前正试图在web服务器模式下运行JSCover,以确定在PhantomJS headless浏览器中执行的Jasmine测试的覆盖率。我还使用grunt+nodejs启动测试 我在GrunFile中用于启动JSCover服务器并执行phantomJS的代码是: // Start JSCover Server var childProcess = require('child_process'), var JSCOVER_PORT = "43287"; var JAVA_HOME = proc

我目前正试图在web服务器模式下运行JSCover,以确定在PhantomJS headless浏览器中执行的Jasmine测试的覆盖率。我还使用grunt+nodejs启动测试

我在GrunFile中用于启动JSCover服务器并执行phantomJS的代码是:

// Start JSCover Server
var childProcess = require('child_process'),
var JSCOVER_PORT = "43287";
var JAVA_HOME = process.env.JAVA_HOME;

var jsCoverChildArgs = [
        "-jar", "src/js/test/tools/JSCover-all.jar",
        "-ws",
        "--branch",
        "--port="+JSCOVER_PORT,
        "--document-root=./",
        "--report-dir=target/",
        "--no-instrument=src/js/lib/",
        "--no-instrument=src/js/test/",
        "--no-instrument=src/js/test/lib/"
    ];

var jsCoverProc = childProcess.spawn(JAVA_HOME + "/bin/java", jsCoverChildArgs);

// Start PhantomJS
var phantomjs = require('phantomjs'),
var binPath = phantomjs.path,

var childArgs = [
        'src/js/test/lib/phantomjs_jasminexml_runner.js',
        'http://localhost:'+JSCOVER_PORT+'/src/js/test/SpecRunner.html',
        'target/surefire-reports'
    ];
runner = childProcess.execFile(binPath, childArgs);

runner.on('exit', function (code) {
    // Tests have finished, so clean up the process
    var success = (code === 0) ? true : false;
    jsCoverProc.kill(); // kill the JSCover server now that we are done with it

    done(success);
}); 
但是,当我在cloudbees中的Jenkins节点上运行web服务器,然后对其运行phantomjs时,会出现以下错误之一:

  • 某些测试开始运行,但随后进程失败:

    A spec : should be able to have a mock lo-dash ... 
    Warning: Task "test" failed. Use --force to continue.
    
    Aborted due to warnings.
    Build step 'Execute shell' marked build as failure
    Recording test results
    Finished: FAILURE
    
  • PhantomJS无法访问JSCover服务器:

    Running "test" task
    phantomjs> Could not load 'http://127.0.0.1:43287/src/js/test/SpecRunner.html'.
    Warning: Task "test" failed. Use --force to continue.
    
对于第二个错误,我尝试使用我设置的不同端口和主机名(例如,主机名为127.0.0.1或localhost,端口为4327、43287等)。在构建时没有动态设置端口-我在grunt脚本中对它们进行了硬编码


有没有想过为什么会出现上述错误,或者为什么我在Cloudbees Jenkins节点上运行和访问JSCover服务器时遇到问题(但从来没有在我的本地机器上)?

我想说,在生成JSCover之后,您需要等待一段时间-过去我在生成时使用webdriver,然后等待它可用(理想情况下,您可以寻找响应并休眠,重复,直到生成的进程准备就绪)


Ie在继续之前,先从127.0.0.1:43287中查找有效的http响应(无论“有效”意味着服务器已启动)。

我想说,在生成JSCover之后,您需要等待一段时间-在过去,我在生成webdriver时使用webdriver,然后等待它可用(理想情况下,您可以寻找响应并睡眠,重复,直到生成的进程准备就绪)


Ie在继续之前,先从127.0.0.1:43287中查找有效的http响应(无论“有效”表示服务器已启动)。

因此,当您对任何进程执行JSCover时,启动都需要时间。如果我们希望它能更早地启动,那么错误肯定会出现

引用这篇伟大的文章:

现在我有了一个满足我所有需求的代码覆盖工具, 最后一部分是让此代码作为Jenkins构建的一部分运行 (它使用了一个咕噜的脚本)。这很容易运行,但是我 遇到两个始终破坏我的构建的错误:

  • 有时phantomJS无法连接到JSCover服务器
  • 有时候,phantomJS会连接到服务器,但在运行过程中会放弃在随机点执行测试
  • 这些都是非常奇怪的问题,只发生在我的团队的Jenkins节点上,很难诊断——尽管它们被证明是简单的修复

    对于问题1,该错误是由于我的grunt脚本在执行phantomJS之前没有等待JSCover启动造成的。


    对于第二个问题,我的团队使用了一个特殊的jasmine测试运行程序来帮助在测试完成后生成XML文件。这个文件的问题是它有一个函数等待jasmine完成它的执行,但是在它放弃运行测试之前使用了一个非常短的超时时间。这是一个问题w因为现在必须从web服务器而不是直接从文件系统加载测试,所以加载和运行测试需要更长的时间。幸运的是,此修复与增加超时一样简单。

    因此,当您对任何进程执行JSCover时,都需要时间。如果我们希望它能够更早地启动,我会是的,错误肯定会发生

    引用这篇伟大的文章:

    现在我有了一个满足我所有需求的代码覆盖工具, 最后一部分是让此代码作为Jenkins构建的一部分运行 (它使用了一个咕噜的脚本)。这很容易运行,但是我 遇到两个始终破坏我的构建的错误:

  • 有时phantomJS无法连接到JSCover服务器
  • 有时候,phantomJS会连接到服务器,但在运行过程中会放弃在随机点执行测试
  • 这些都是非常奇怪的问题,只发生在我的团队的Jenkins节点上,很难诊断——尽管它们被证明是简单的修复

    对于问题1,该错误是由于我的grunt脚本在执行phantomJS之前没有等待JSCover启动造成的。


    对于第二个问题,我的团队使用了一个特殊的jasmine测试运行程序来帮助在测试完成后生成XML文件。这个文件的问题是它有一个函数等待jasmine完成它的执行,但是在它放弃运行测试之前使用了一个非常短的超时时间。这是一个问题w因为现在必须从web服务器而不是直接从文件系统加载测试,所以加载和运行测试需要更长的时间。幸运的是,此修复与增加超时一样简单。

    有没有办法将JSCover进程配置为日志?我想知道这是由低速度导致的并发问题d单核构建从机(与本地计算机相比),phantomJS开始运行测试,但JSCover服务器尚未完全启动是否有办法将JSCover进程配置为日志?我想知道这是由低速单核构建从机(与本地计算机相比)引起的并发问题,phantomJS开始运行测试,但JSCover服务器尚未完全启动。有趣的是,我(OP)是这篇博文的作者,你抢先回答了我自己的问题。:)很高兴听到你喜欢我的文章!天哪,哈哈,再好不过了!!好文章,兄弟!哈哈。有趣的是,我(OP)是这篇博文的作者,你抢先回答了我自己的问题。:)很高兴听到你喜欢我的文章!天哪,哈哈,再好不过了!