【问题标题】:Automate UI testing with Javascript, node - starting & stopping a web server使用 Javascript、节点自动化 UI 测试 - 启动和停止 Web 服务器
【发布时间】:2023-03-14 00:03:02
【问题描述】:

我目前正在使用带有 node.js 和 phantom.js 的 Windows 上的 JavaScript 进行自动化 UI 测试研究,不出所料,我发现了许多可以在这方面提供帮助的框架(casper.js、Buster.js 等)。

到目前为止,我所看到的框架中似乎缺少的一件事是停止和启动 Web 服务器来为网页提供服务,以便测试框架可以执行其测试。一个例外是WebDriver.js,它使用Selenium standalone server,但这依赖于服务器编写的Java,目前我希望尽可能找到基于节点的解决方案。

从节点的角度来看,我查看了 Connect.jsHttp-Server(我特别喜欢),但问题是从 JavaScript 测试开始和停止这些。

我尝试创建一个 casper.js 测试,该测试将与服务器交互,运行测试然后停止服务器,但我无法让它工作,这是一个示例脚本

var childProcess = require('child_process').spawn('http-server', '/TestSite');

casper.test.begin("Load-page", 1, function suite(test){

    casper.start('http://localhost:8080/',function(){
        test.assertTitle("test page");
    });

    casper.run(function(){
        test.done();
        childProcess.kill();
    });
});

我使用以下命令从命令行调用它(casper 在我的 Path 变量中):

casperjs Load-page testFile.js

我希望会发生的是 http-server 会启动,casper 会启动测试,然后在测试运行后 http-server 会被杀死。

我也尝试过使用 Connect:

var server= connect.createServer(connect.static('/TestSite')).listen(8080)

casper.test.begin("Load-page", 1, function suite(test){

    casper.start('http://localhost:8080/',function(){
        test.assertTitle("test page");
    });

    casper.run(function(){
        test.done();
        server.stop();
    });
});

但又一次没有运气。

我可以运行有效的 Casper 示例测试,并且我的路径中也有 Node,并且可以从命令提示符调用 REPL。

目录结构为:

代码
/测试站点
/node_modules

然后我从 Code 文件夹运行测试。

我只是无法做到这一点,还是我只是不知道它应该如何工作?

【问题讨论】:

    标签: javascript windows node.js phantomjs ui-automation


    【解决方案1】:

    当你说“不走运”时,你是什么意思?

    连接示例看起来基本没问题,我更喜欢它而不是生成子进程。请记住,listen 可能是异步的,因此服务器可能不会立即可用。 listen 的第二个参数是一个回调,将在服务器侦听后运行 - 也许尝试在该回调中运行测试?

    专业提示:不要依赖端口 8080 在您正在运行的任何机器上始终处于空闲状态 - 为端口传递 0 将导致服务器在随机端口上启动,然后您可以执行 @987654325 @ 在listen 回调中获取选择的端口

    【讨论】:

    • 我刚刚注意到你正在使用 Windows,0 的东西可能在那里不起作用,YMMV
    • 我得到一个 ReferenceError 找不到变量进程 C:/GitHub/TestSite/node_modules/connect/index.js:2
    • 好吧,我完全错过了这里明显的问题 - casperjs isn't nodejs
    • 听起来你想从节点模块驱动 Casper,该链接引用了诡异的 js,但我从未使用过它(或 Casper tbh)
    【解决方案2】:

    我设法通过结合使用不同的脚本和使用 child_process spawn 来让它工作。

    我创建了一个名为 startServer.js 的脚本,它将使用 Connect 启动服务器:

    var connect = require('connect');
    
    var server= connect.createServer(connect.static('TestSite'));
    
    server.listen(8081);
    

    我创建了另一个脚本runTests.js,它将通过 spawn 调用服务器脚本,然后再次通过 spawn 调用 Casper,并运行相对于脚本运行位置的名为 tests 的文件夹中的所有 capser 测试。

    var child_process = require('child_process');
    var stillRunning = true;
    
    var server = child_process.spawn('node', ['createServer.js']);
    
    var casper = child_process.spawn('casperjs', ['test tests']);
    
    casper.stdout.on('data', function(data){
        console.log(data.toString());
    });
    
    casper.stderr.on('data', function(data){
        console.log('Error: ' + data);
    });
    
    casper.on('exit', function(code){
        server.kill();
        process.exit(0);
    });
    

    要在命令提示符下使用它,请导航到脚本所在的文件夹,然后运行node runTests.js,服务器将启动并针对站点运行测试

    【讨论】:

      猜你喜欢
      • 2013-11-22
      • 1970-01-01
      • 1970-01-01
      • 2017-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-25
      相关资源
      最近更新 更多