最近在產品中開發基於REST的API接口,結合自己最近對Node.js的研究,想基於它開發一個REST Client做測試之用。
通過初步研究,Node.js開發HTTP Client還是挺方便的。
選用Node的理由:
1. 使用完全基於JavaScript的Node測試JSON格式的數據,非常之方便
2. Node有很好的社區支持。(現在GitHub上已成了JavaScript最大的開源社區)
By Example:
var http = require('http');
var equal = require('assert').equal;
var username = 'falcon';
var password = '';
var _auth = 'Basic ' + new Buffer(username + ':' + password).toString('base64')
var options = {
host: 'localhost',
port: 13080,
path: '/SM/7/rest/1.1/incident_list/',
method: 'GET',
headers:{
'accept': '*/*',
'content-type': "application/atom+xml",
'accept-encoding': 'gzip, deflate',
'accept-language': 'en-US,en;q=0.9',
'authorization': _auth,
'user-agent': 'nodejs rest client'
}
};
var req = http.request(options, function (res) {
console.log('STATUS: ' + res.statusCode);
equal(200, res.statusCode);
console.log('HEADERS: ' + JSON.stringify(res.headers));
res.on('data',function (chunk) {
console.log('BODY: ' + chunk);
});
});
req.on('error', function(e) {
console.log('problem with request: ' + e.message);
});
req.end();
將上述代碼保存成RestTest.js,然后在命令行上運行: node RestTest.js 就可以看輸出的結果了。
上面的代碼只是使用Node自帶的Assert做Unit Test,如果有興趣的話,還是引入Jasmine等BDD的測試框架。(待續。。。)
生成測報告:
1. Maven Jasmine plugin (SM Client Team已在使用了)
2. Testacular by Google(本博主推薦)
P.S.:
如果你是CoffeeScript的Fans可以參考下面的代碼片段
http = require 'http' equal = require('assert').equal username = 'falcon' password = '' _auth = 'Basic ' + new Buffer(username + ':' + password).toString('base64') options = host: 'localhost' port: 13080 path: '/SM/7/rest/1.1/incident_list/' method: 'GET' headers: 'accept': '*/*' 'content-type': "application/atom+xml" 'accept-encoding': 'gzip, deflate' 'accept-language': 'en-US,en;q=0.9' 'authorization': _auth 'user-agent': 'nodejs rest client' req = http.request options, (res) -> console.log('STATUS: ' + res.statusCode) equal(200, res.statusCode) console.log('HEADERS: ' + JSON.stringify(res.headers)) res.on 'data', (chunk)-> console.log('BODY: ' + chunk) req.on 'error', (e)-> console.log('problem with request: ' + e.message) req.end()
