如何增加页面加载的goto超时?

时间:2017-09-28 22:54:51

标签: node.js google-chrome testing regression-testing backstop.js

TL;博士;

我需要增加此超时时间:

  

COMMAND |命令`test`在[32.585s]之后以错误结束   命令| BackstopExcpetion:未定义的测试#1:GotoTimeoutError:goto()timeout

请考虑以下服务器代码:

const http = require('http');

const hostname = '0.0.0.0';
const port = 3000;

http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/html');
  res.end(`<!DOCTYPE html>
    <title>Test Page</title>
    <script>console.log("Hello world!")</script>
    <h1>Hello world!</h1>
  `);
}).listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

和带有4 * 3 = 12次测试的BackstopJS配置:

{
  "id": "backstop_default",
  "viewports": [
    { "label": "phone_portrait",     "width":  320,   "height":  480 },
    { "label": "phone_landscape",    "width":  480,   "height":  320 },
    { "label": "tablet_portrait",    "width":  768,   "height": 1024 },
    { "label": "tablet_landscape",   "width": 1024,   "height":  768 }
  ],
  "scenarios": [
    { "label": "Test #1",   "url": "http://localhost:3000/",   "selectors": ["body"] },
    { "label": "Test #2",   "url": "http://localhost:3000/",   "selectors": ["body"] },
    { "label": "Test #3",   "url": "http://localhost:3000/",   "selectors": ["body"] }
  ],
  "paths": {
    "bitmaps_reference": "backstop_data/bitmaps_reference",
    "bitmaps_test": "backstop_data/bitmaps_test",
    "engine_scripts": "backstop_data/engine_scripts",
    "html_report": "backstop_data/html_report",
    "ci_report": "backstop_data/ci_report"
  },
  "report": ["browser"],
  "engine": "chrome",
  "engineFlags": []
}

当我开始backstop test时,一切正常:

D:\Temp\Supertemp\server-delay>backstop test
BackstopJS v3.0.22
Loading config:  D:\Temp\Supertemp\server-delay\backstop.json

COMMAND | Executing core for `test`
createBitmaps | Selcted 3 of 3 scenarios.
Starting Chromy: port:9222 --disable-gpu,--force-device-scale-factor=1,--window-size=320,480
Starting Chromy: port:9223 --disable-gpu,--force-device-scale-factor=1,--window-size=480,320
Starting Chromy: port:9224 --disable-gpu,--force-device-scale-factor=1,--window-size=768,1024
Starting Chromy: port:9225 --disable-gpu,--force-device-scale-factor=1,--window-size=1024,768
Starting Chromy: port:9226 --disable-gpu,--force-device-scale-factor=1,--window-size=320,480
Starting Chromy: port:9227 --disable-gpu,--force-device-scale-factor=1,--window-size=480,320
Starting Chromy: port:9228 --disable-gpu,--force-device-scale-factor=1,--window-size=768,1024
Starting Chromy: port:9229 --disable-gpu,--force-device-scale-factor=1,--window-size=1024,768
Starting Chromy: port:9230 --disable-gpu,--force-device-scale-factor=1,--window-size=320,480
Starting Chromy: port:9231 --disable-gpu,--force-device-scale-factor=1,--window-size=480,320
9224 LOG >  Hello world!
9227 LOG >  Hello world!
9226 LOG >  Hello world!
9222 LOG >  Hello world!
9223 LOG >  Hello world!
9225 LOG >  Hello world!
9228 LOG >  Hello world!
9231 LOG >  Hello world!
9229 LOG >  Hello world!
9230 LOG >  Hello world!
Starting Chromy: port:9232 --disable-gpu,--force-device-scale-factor=1,--window-size=768,1024
Starting Chromy: port:9233 --disable-gpu,--force-device-scale-factor=1,--window-size=1024,768
9232 LOG >  Hello world!
9233 LOG >  Hello world!
      COMMAND | Executing core for `report`
      compare | OK: Test #1 backstop_default_Test_1_0_body_0_phone_portrait.png
      compare | OK: Test #1 backstop_default_Test_1_0_body_1_phone_landscape.png
      compare | OK: Test #1 backstop_default_Test_1_0_body_2_tablet_portrait.png
      compare | OK: Test #1 backstop_default_Test_1_0_body_3_tablet_landscape.png
      compare | OK: Test #2 backstop_default_Test_2_0_body_0_phone_portrait.png
      compare | OK: Test #2 backstop_default_Test_2_0_body_1_phone_landscape.png
      compare | OK: Test #2 backstop_default_Test_2_0_body_2_tablet_portrait.png
      compare | OK: Test #2 backstop_default_Test_2_0_body_3_tablet_landscape.png
      compare | OK: Test #3 backstop_default_Test_3_0_body_0_phone_portrait.png
      compare | OK: Test #3 backstop_default_Test_3_0_body_1_phone_landscape.png
      compare | OK: Test #3 backstop_default_Test_3_0_body_2_tablet_portrait.png
      compare | OK: Test #3 backstop_default_Test_3_0_body_3_tablet_landscape.png
       report | Test completed...
       report | 12 Passed
       report | 0 Failed
       report | Writing browser report
       report | Browser reported copied
       report | Copied configuration to: D:\Temp\Supertemp\server-delay\backstop_data\html_report\config.js
      COMMAND | Executing core for `openReport`
   openReport | Opening report.
      COMMAND | Command `openReport` sucessfully executed in [0.114s]
      COMMAND | Command `report` sucessfully executed in [0.182s]
      COMMAND | Command `test` sucessfully executed in [8.495s]

但现在让我们在发送页面之前让服务器延迟40秒:

const http = require('http');

const hostname = '0.0.0.0';
const port = 3000;

http.createServer((req, res) => {
  setTimeout(() => {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/html');
    res.end(`<!DOCTYPE html>
      <title>Test Page</title>
      <script>console.log("Hello world!")</script>
      <h1>Hello world!</h1>
    `);
  }, 40000);
}).listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

并运行backstop test

D:\Temp\Supertemp\server-delay>backstop test
BackstopJS v3.0.22
Loading config:  D:\Temp\Supertemp\server-delay\backstop.json

COMMAND | Executing core for `test`
createBitmaps | Selcted 3 of 3 scenarios.
Starting Chromy: port:9222 --disable-gpu,--force-device-scale-factor=1,--window-size=320,480
Starting Chromy: port:9223 --disable-gpu,--force-device-scale-factor=1,--window-size=480,320
Starting Chromy: port:9224 --disable-gpu,--force-device-scale-factor=1,--window-size=768,1024
Starting Chromy: port:9225 --disable-gpu,--force-device-scale-factor=1,--window-size=1024,768
Starting Chromy: port:9226 --disable-gpu,--force-device-scale-factor=1,--window-size=320,480
Starting Chromy: port:9227 --disable-gpu,--force-device-scale-factor=1,--window-size=480,320
Starting Chromy: port:9228 --disable-gpu,--force-device-scale-factor=1,--window-size=768,1024
Starting Chromy: port:9229 --disable-gpu,--force-device-scale-factor=1,--window-size=1024,768
Starting Chromy: port:9230 --disable-gpu,--force-device-scale-factor=1,--window-size=320,480
Starting Chromy: port:9231 --disable-gpu,--force-device-scale-factor=1,--window-size=480,320
      COMMAND | Command `test` ended with an error after [32.585s]
      COMMAND | BackstopExcpetion: Test #1 on undefined: GotoTimeoutError: goto() timeout
9230 LOG >  Hello world!
9228 LOG >  Hello world!
9222 LOG >  Hello world!
9224 LOG >  Hello world!
9227 LOG >  Hello world!
9231 LOG >  Hello world!
9223 LOG >  Hello world!
9225 LOG >  Hello world!
9229 LOG >  Hello world!
9226 LOG >  Hello world!

如您所见,出现错误

  

COMMAND |命令`test`在[32.585s]之后以错误结束   命令| BackstopExcpetion:未定义的测试#1:GotoTimeoutError:goto()timeout

但之后我们可以在页面上看到console.log。 Backstop开始无限期等待......无论如何,这不是问题。

我有兴趣选择放大30秒超时,因为在某些情况下,开发服务器需要更多时间来提供内容。我该如何配置?

2 个答案:

答案 0 :(得分:2)

an onBeforeScript中,您可以在发出任何请求之前访问Chromy并设置超时(以及other options):

module.exports = function (chromy) {
  chromy.options.gotoTimeout = 60000;
};

答案 1 :(得分:0)

您可以通过添加engineOptions属性来传递backstop.json中的任何chromy选项,如下所示

{
    "engineOptions": {
      "gotoTimeout": 60000
    }
}