2017-01-30 98 views
0

我检查了一些NPM库以测试网页或网络服务。但他们都期望服务器已经在运行。因为我想自动化功能测试,我怎么能安装NPM包以这样的方式在node.js中自动化功能测试

  1. 它可以启动服务器
  2. 测试应用程序
  3. 停止服务器

使我可以在本地进行测试,也可以在线上CI工具(如travis-ci或circleci)进行测试。

情况1:web服务

我写开始的NodeJS HTTP(S)服务器NPM包。它可以从命令行$stubmatic开始。目前,我用两种方法来测试它,

  1. 手册:我手动从命令行启动它。然后运行测试。
  2. 自动:我使用exec模块来运行一个unix命令,它可以启动应用程序并运行pkill命令来终止应用程序。但对于这种自动化,我的应用程序需要安装在测试机器上。

案例2:网站

我已创建一个NPM包:fast-xml-parser和回购中创建的演示页,这样我可以在浏览器中进行测试。为了测试演示页面,我目前使用http-server npm软件包手动启动本地服务器。测试应用程序。

有什么可以更好的方式来编写节点js应用程序的功能测试自动化?

注:

  • 我从来没有使用过任务运动员一样一饮而尽或呼噜声。所以我不确定他们能否在这种情况下提供帮助。
  • 在情况1中,我的应用程序启动节点js本机HTTP服务器。目前我没有使用任何第三方应用程序,如express
+0

我发现情况2.寻找案例1,现在的解决方案。 –

回答

0

案例1:Webservice的

问题1 作为server.close()的NodeJS不工作。我复制粘贴这个片段在每个测试文件,这是开始我的web服务。

try{ 
    server.setup(options); 
    server.start(); 
}catch(err){ 
    console.log(err); 
} 

所有测试完成后,服务器停止。

**问题2 我错误地使用了chai-http。这是完整的工作解决方案。

//Need to be placed before importing chai and chai-http 
if (!global.Promise) { 
    global.Promise = require('q'); 
} 

var server = require('.././lib/server'); 
var chai = require('chai') 
    , chaiHttp = require('chai-http'); 

chai.use(chaiHttp); 

try{ 
    server.setup(someoptions); 
    server.start(); 
}catch(err){ 
    console.log(err); 
} 

describe('FT', function() { 

    describe('scenario::', function() { 

    it('responds to POST', function (done) { 
     chai.request("http://localhost:9999") 
      .post('/someurl') 
      .then(res => { 
       expect(res.status).toBe(200); 
       //console.log(res.text); 
       done(); 
      }).catch(err => { 
       console.log(err); 
       done(); 
      }); 
    }); 

}); 

案例二:网站这是很简单的。

  • 我用http-server启动服务器,以便我的html文件可以被访问。
  • 我用zombie js进行浏览器测试。 (有许多可用于浏览器测试许多其他选项)

下面是代码

process.env.NODE_ENV = 'test'; 

const Browser = require('zombie'); 
const httpServer = require('http-server'); 

describe("DemoApp", function() { 
    var browser = new Browser({site: 'http://localhost:8080'}); 
    var server = httpServer.createServer(); 
    server.listen(8080); 

    beforeEach(function(done){ 
     browser.visit('/', done); 
    }); 

    describe("Parse XML", function() { 

    it("should parse xml to json", function(done) { 
     browser.pressButton('#submit'); 
     browser.assert.text('#result', 'some result text'); 
     done(); 
    }); 
    }); 

    afterEach(function(){ 
     server.close(); 
    }) 
}); 
0

这个问题提到了一个新的Docker容器系统,可以在本地复制Travis。这可能是一个办法:How to run travis-ci locally

+0

你能否多解释一下,它如何帮助编写/运行FT? –