API自動化測試與持續整合
阿新 • • 發佈:2019-01-25
目的
- 如何使用
SuperTest
測試框架,進行API測試 - 如何將API測試與構建工具結合
- 如何將API測試、構建工具與持續整合結合
SuperTest
什麼是SuperTest
To provide a high-level abstraction for testing HTTP
,提供一個高級別的HTTP
測試
如何安裝
- 命令
npm install supertest --save-dev
- 樣例
describe('Test Demo.', function() {
it('Visit URL', function(done) {
request.get('')
.expect(200 )
.end(done);
});
});
- 樣例原理:通過獲取請求的
結果
,對請求結果進行驗證
。樣例
中的驗證條件為返回的狀態碼為200
。
自動化API測試:Grunt & Gulp
Grunt篇
什麼是Grunt
The JavaScript Task Runner
,JavaScript的構建工具- 官網:Grunt
安裝
- 命令
npm install -g grunt-cli
功能分析
使用Github來Clonehttps://github.com/aimer1124/SuperTestWithGrunt.git
fileTree.png
/test/module/demo.js
var config = require('../config/endpoints'),
request = require('supertest')(config.host[config.env]);
describe('Test Demo.', function() {
this.timeout(10000);
it('Visit ' + config.env, function(done) {
request.get('')
.expect(200)
.end(done);
});
});
/test/config/endpoints.js
:環境配製
module.exports = {
host : {
master: 'https://github.com/aimer1124/SuperTestWithGrunt',
branch: 'https://github.com/aimer1124/SuperTestWithGrunt/tree/differentENV'
},
env: process.env.NODE_ENV || 'master'
};
Gruntfile.js
:Grunt執行時的命令配製package.json
:npm 安裝時所需要的包results.txt
:執行結果存放檔案
執行
- 命令:
grunt
- 執行結果
➜ SuperTestWithGrunt git:(master) ✗ grunt
Running "mochaTest:test" (mochaTest) task
Test Demo.
✓ Visit master (1640ms)
1 passing (2s)
Done, without errors.
- 結果分析:
✓ Visit master (1640ms)
表示測試正常通過;1 passing (2s)
表示整個測試所執行的時間和測試所執行的數量
Gulp篇
什麼是Gulp
安裝
- 命令
npm install --global gulp-cli
功能分析
SuperTestWithGulp.png
/test/config/endpoints.js
:環境配製
var host = {
master: require('./master.js'),
branch: require('./branch.js')
};
var ENV;
module.exports = function(env) {
if (env) {
ENV = host[env];
return;
}
return ENV;
};
/test/config/master
的具體配製
module.exports = {
url: 'http://aimer1124.github.io/',
name: 'master'
};
/test/module/test-demo.js
:測試指令碼
var data = require('../config/endpoints'),
request = require('supertest')(data().url);
describe('Test Demo.', function() {
this.timeout(10000);
it('Visit ' + data().url, function(done) {
request.get('')
.expect(200)
.end(done);
});
console.log('You are in ' + data().name);
});
gulpfile.js
:Grunt執行時的命令配製package.json
:npm 安裝時所需要的包results.txt
:執行結果存放檔案
執行
- 命令
gulp master
- 結果
➜ SuperTestWithGulp git:(master) gulp master
[17:34:44] Using gulpfile ~/Downloads/SuperTestWithGulp/gulpfile.js
[17:34:44] Starting 'master'...
[17:34:44] Finished 'master' after 37 ms
You are in master
Test Demo.
✓ Visit http://aimer1124.github.io/ (502ms)
1 passing (506ms)
- 結果分析:
✓ Visit http://aimer1124.github.io/ (502ms)
表示測試正常通過;1 passing (506ms)
表示整個測試所執行的時間和測試所執行的數量
自動化測試的持續整合
持續整合是什麼
Continuous Integration (CI) is a development practice that requires developers to integrate code into a shared repository several times a day. Each check-in is then verified by an automated build, allowing teams to detect problems early.
Travis CI
Travis與Gulp整合
- 在專案根目錄中新增
.travis.yml
檔案,language
表示使用的語言為node_js
,0.12
表示使用node_js
的版本,before_script
表示執行指令碼前執行的指令碼命令,script
表示啟動時的執行指令碼
language: node_js
node_js:
- "0.12"
before_script:
- npm install -g gulp
script: gulp master
GulpInTravis.png
- Travis會在Github程式碼有
變更
時,自動
拉取專案的程式碼並進行線上整合
gulpWithTravis.png
Jenkins
Build great things at any scale
Jenkins與Grunt整合
- 安裝
NodeJS
、Git
外掛 - 配製
Job
的build step
中execute shell
ConfigScriptInJenkins.png
- 執行
Job
即可執行API測試
LogInJenkins.png
總結
- API自動化測試已經說完了,完全沒有太複雜的程式碼和編寫難度。
- 使用SuperTest可實現多場景、多環境的API場景測試,且執行速度較UI自動化測試快很多。
- SuperTest與Grunt/Gulp的整合很方便,即使在本地進行除錯也很快捷。
- 持續整合工具Travis/Jenkins,與API測試整合後,更高效的提高測試效率。
參考
文/巴索羅米傑(簡書作者)
原文連結:http://www.jianshu.com/p/a3e35928a0aa
著作權歸作者所有,轉載請聯絡作者獲得授權,並標註“簡書作者”。