在 node.js 中自动化功能测试
Automate Functional Testing in node.js
我检查了一些 NPM 库来测试网页或网络服务。但是他们都希望服务器已经 运行ning。由于我想自动化功能测试,我该如何设置 NPM 包
- 可以启动服务器
- 测试应用程序
- 停止服务器
这样我就可以在本地以及在线 CI 工具(例如 travis-ci 或 circleci.
上进行测试
案例一:网络服务
我写了一个启动 nodejs HTTP(s) 服务器的 NPM 包。它可以从命令行 $stubmatic
启动。目前,我使用两种方法来测试它,
- manual : 我从命令行手动启动它。然后 运行 测试。
- 自动:我使用
exec
模块到 运行 可以启动应用程序的 unix 命令和 运行 pkill
命令来终止应用程序。但是对于这个自动化,我的应用程序需要安装在测试机器上。
案例二:网站
我已经创建了一个 NPM 包:fast-xml-parser
并在存储库中创建了一个演示页面,以便我可以在浏览器中进行测试。为了测试演示页面,我目前手动使用 http-server
npm 包启动本地服务器。测试应用程序。
为 node js 应用程序编写自动化功能测试的更好方法是什么?
注:
- 我从来没有用过 运行 像 gulp 或 g运行t 这样的任务。所以我不确定他们是否可以在这种情况下提供帮助。
- 在案例 1 中,我的应用程序启动了 node js 本机 HTTP 服务器。我目前没有使用
express
等任何第 3 方应用程序。
这个问题提到了一个新的 Docker Travis 容器系统,可以在本地复制。这可能是一种方式:How to run travis-ci locally
你看过supertest (SuperAgent driven library for testing HTTP servers) and expect (Assertions library)(documented here) with mocha (Test Framework)了吗?
我使用它们,直到现在我做的所有测试都没有遇到过任何问题。
链接中的文档包含构建测试所需的所有信息。
案例一:网络服务
问题 1
由于 nodejs server.close()
不工作。我将这段代码复制粘贴到每个启动我的网络服务的测试文件中。
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();
});
});
});
案例2:网站 这很简单。
- 我使用
http-server
启动服务器,以便可以访问我的 html 文件。
- 我用僵尸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();
})
});
我检查了一些 NPM 库来测试网页或网络服务。但是他们都希望服务器已经 运行ning。由于我想自动化功能测试,我该如何设置 NPM 包
- 可以启动服务器
- 测试应用程序
- 停止服务器
这样我就可以在本地以及在线 CI 工具(例如 travis-ci 或 circleci.
上进行测试案例一:网络服务
我写了一个启动 nodejs HTTP(s) 服务器的 NPM 包。它可以从命令行 $stubmatic
启动。目前,我使用两种方法来测试它,
- manual : 我从命令行手动启动它。然后 运行 测试。
- 自动:我使用
exec
模块到 运行 可以启动应用程序的 unix 命令和 运行pkill
命令来终止应用程序。但是对于这个自动化,我的应用程序需要安装在测试机器上。
案例二:网站
我已经创建了一个 NPM 包:fast-xml-parser
并在存储库中创建了一个演示页面,以便我可以在浏览器中进行测试。为了测试演示页面,我目前手动使用 http-server
npm 包启动本地服务器。测试应用程序。
为 node js 应用程序编写自动化功能测试的更好方法是什么?
注:
- 我从来没有用过 运行 像 gulp 或 g运行t 这样的任务。所以我不确定他们是否可以在这种情况下提供帮助。
- 在案例 1 中,我的应用程序启动了 node js 本机 HTTP 服务器。我目前没有使用
express
等任何第 3 方应用程序。
这个问题提到了一个新的 Docker Travis 容器系统,可以在本地复制。这可能是一种方式:How to run travis-ci locally
你看过supertest (SuperAgent driven library for testing HTTP servers) and expect (Assertions library)(documented here) with mocha (Test Framework)了吗?
我使用它们,直到现在我做的所有测试都没有遇到过任何问题。
链接中的文档包含构建测试所需的所有信息。
案例一:网络服务
问题 1
由于 nodejs server.close()
不工作。我将这段代码复制粘贴到每个启动我的网络服务的测试文件中。
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();
});
});
});
案例2:网站 这很简单。
- 我使用
http-server
启动服务器,以便可以访问我的 html 文件。 - 我用僵尸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();
})
});