首页 文章

使用dockerized phantomjs的超时问题

提问于
浏览
0

我想在docker容器中使用nodejs和phantomjs进行一些测试 . 所有这些测试都直接在centos或debian服务器上完美运行

npm运行测试smart-tv-portal-tests@1.0.0 test / data / SmartTVPortal /测试mocha测试 - * . js测试套件xxx✓应响应200或304 xxx(173ms)✓应断言响应是application /json✓应该能够解析json✓应该验证JSON的完整性(videos.length === 6)✓应该用phantomjs验证http状态(160ms)✓应该验证carousel是否已加载(761ms)✓应该检查最后的轮播元素✓应该在主旋转木马(121ms)8中通过交互式导航(1s)

但如果我在docker容器中运行相同的测试(基于alpine / centos / ubuntu),它会因超时问题而失败

docker run -ti --net=host --rm --volume /data/SmartTVPortal/:/srv --workdir /srv/tests arte/hbbtv bash

我明白了

bash-4.3 #npm run test smart-tv-portal-tests@1.0.0 test / srv / tests mocha test - * . js测试套件xxx✓应响应200或304 for xxx(2534ms)✓应断言响应是application /json✓应该能够解析json✓应该验证JSON完整性(videos.length === 6)✓应该用phantomjs验证http状态(89ms)1)应该验证carousel是否加载未处理的拒绝文本evaluatePage全局代码evaluateJavaScript @ [native code]在/srv/tests/node_modules/node-horseman/lib/actions.js评估@ phantomjs://platform/webpage.js:390:39 phantomjs://code/bridge.js:121:61 :989:36 at tryCatcher(/srv/tests/node_modules/bluebird/js/release/util.js:16:23)在Function.Promise.fromNode.Promise.fromCallback(/ srv / tests / node_modules / bluebird / js /发布/ promise.js:179:30)在Horseman . (/srv/tests/node_modules/node-horseman/lib/actions.js:987:29)在Promise.tryCatcher(/srv/tests/node_modules/bluebird/js/release/util.js:16:23)在Promise Promise._settlePromise中的._settlePromiseFromHandler(/srv/tests/node_modules/bluebird/js/release/promise.js:510:31)(/ srv /tests/node_modules/bluebird/js/release/promise.js:567:18)在Asise._drainQueue的Promise._settlePromiseCtx(/srv/tests/node_modules/bluebird/js/release/promise.js:604:10)(/srv/tests/node_modules/bluebird/js/release/async.js:143: 12)在Instant.Async.drainQueues(/ srv / tests / node_modules / bluebird / js / release / async)的Async._drainQueues(/srv/tests/node_modules/bluebird/js/release/async.js:148:10) . js:17:14)at runCallback(timers.js:574:20)at tryOnImmediate(timers.js:554:5)at processImmediate [as _immediateCallback](timers.js:533:5)未处理的拒绝TimeoutError:超时期间 . 在Timeout.wrapper的Timeout.waitForCheck(/srv/tests/node_modules/node-horseman/lib/actions.js:1643:13)15038 ms之后的waitFor() (timers.js:425:11)在tryOnTimeout(timers.js:232:11)的Timer.listOnTimeout(timers.js:202:5)2)应检查最后的轮播元素未处理的拒绝文本evaluatePage
全局代码evaluateJavaScript @ [native code]在@ srv / tests / node_modules / node-horseman / lib /中评估@ phantomjs://platform/webpage.js:390:39 phantomjs://code/bridge.js:121:61 actions.js:989:36 at tryCatcher(/srv/tests/node_modules/bluebird/js/release/util.js:16:23)在Function.Promise.fromNode.Promise.fromCallback(/ srv / tests / node_modules / bluebird) /js/release/promise.js:179:30)在Horseman . (/srv/tests/node_modules/node-horseman/lib/actions.js:987:29)在Promise.tryCatcher(/srv/tests/node_modules/bluebird/js/release/util.js:16:23)在Promise Promise._settlePromise中的._settlePromiseFromHandler(/srv/tests/node_modules/bluebird/js/release/promise.js:510:31)(/ srv /tests/node_modules/bluebird/js/release/promise.js:567:18)在Asise._drainQueue的Promise._settlePromiseCtx(/srv/tests/node_modules/bluebird/js/release/promise.js:604:10)(/srv/tests/node_modules/bluebird/js/release/async.js:143: 12)在Instant.Async.drainQueues(/ srv / tests / node_modules / bluebird / js / release / async)的Async._drainQueues(/srv/tests/node_modules/bluebird/js/release/async.js:148:10) . js:17:14)在runCallback(timers.js:574:20)at tryOnImmediate(timers.js:554:5)at processImmediate [as _immediateCallback](timers.js:533:5)3)应该在主旋转木马
5传递(30s)3失败1)xxx的测试套件应验证carousel是否已加载:错误:超出10000ms的超时 . 对于异步测试和挂钩,确保调用“done()”;如果返回Promise,请确保它已解决 . 2)xxx的测试套件应该检查最后的轮播元素:错误:超过7000ms的超时 . 对于异步测试和挂钩,确保调用“done()”;如果退回承诺,请确保解析 . 3)xxx测试套件应在主轮播中进行交互式导航:错误:超出10000ms超时 . 对于异步测试和挂钩,确保调用“done()”;如果返回Promise,请确保它已解决 .

测试的下降部分是

it('should validate carousel is loaded', function(done) {
        this.timeout(10000);
        horseman
            .open(WEBAPP_URL)
            .waitFor(function() {
                return document.querySelector('#loadingPanel').style.visibility === 'hidden';
            }, true)
            .waitFor(function() {
                return document.querySelectorAll('.videosCarouselItem').length === 4;
            }, true)
            .then(function(res) {
                done();
            });
    });

我猜这个问题来自幻影无法解释jquery,所以无法找到选择器,但问题只出现在一个docker容器中 .

使用casperjs的问题是一样的

我挖了一点)docker容器中'timeout'的部分是

.waitForSelector('.videosCarouselItem')
  .count('.videosCarouselItem')

并给我错误

Unhandled rejection TimeoutError: timeout during .waitFor() after 15059 ms
    at Timeout.waitForCheck (/srv/tests/node_modules/node-horseman/lib/actions.js:1643:13)
    at Timeout.wrapper (timers.js:425:11)
    at tryOnTimeout (timers.js:232:11)
    at Timer.listOnTimeout (timers.js:202:5)

在码头外面没关系,我得到4(这是正确的)

1 回答

  • 0

    很抱歉给您带来不便,问题与我们经过测试的应用相关联,我不得不通过添加一些查询参数来更改网址 . 我不知道为什么它在Windows内部使用浏览器,或者直接在VM上使用phantomjs而不是在docker中,但是现在它没关系 .

    我使用快照功能发现了错误 .

相关问题