上一篇文章「e2e 自動化集成測試 架構 京東 商品搜索 實例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step 二 圖片驗證碼的識別」,html
下面講一下Node.js中如何訪問數據庫, 在作自動化測試過程當中, 常常可能遇到須要到數據庫取值,或是更新值。來驗證頁面上的數據正確性。 以前,在google, baidu.com上找了很是多的文章關於Node.js如何訪問Sql Server的文章, 都是不行的, 我想是由於, Node.js的開源性, 對於MongoDB, Mysql, 等數據庫訪問是有請多的模塊支持。但對於Sql server就只有微軟寫的驅動, 可是因爲安裝很是複雜, 我就沒安裝成功過。 最後,在baidu.com的時候,找到了一個牛人寫的模塊叫 mssqlhelper https://www.npmjs.org/package/mssqlhelper, 雖然有蠻多的不支持, 可是對於一些簡單的sql操做,仍是能夠的。 sql
以下是Node.js使用, 我將它們作了一下封裝,能夠提供select, add, delete,update操做數據庫
var db = require('./dbHelper'); npm
function select(sqlScript, EntityName, topNum, callback)
{
if(topNum == null)
{
topNum = '';
}
if(topNum == '')
{
sqlScript = sqlScript.replace('select', 'select @Param1 Parmal1, ')
}
else
{
sqlScript = sqlScript.replace('select', 'select top '+ topNum +' @Param1 Parmal1, ')
}json
db.config({
host: 數據庫地址
,port: 1433
,userName: 用戶名
,password: 密碼
,database: 數據庫名
});架構
console.log('執行 SQL ' + sqlScript.green);post
db.query( sqlScript
,{
Param1: { type : 'NVarChar', size: 7,value : 'systemDefault' }
}
,function(res){
if(res.err)throw new Error('database error:'+res.err.msg);
if(res.tables.length == 0){
console.log('無任何記錄返回');
//hrow new Error('無任何記錄返回');
return;
}
var rows = res.tables[0].rows;
if(rows.length == 0){
callback('');
}
else {
var jsonString = toJson(res.tables[0], EntityName);
var result = JSON.parse(jsonString);
console.log('數據庫查詢結果' + jsonString.green);
callback(result);測試
// var columnLength = rows[0].metadata.columns.length;
// for (var i = 0; i < rows.length; i++) {
// console.log(rows[i].getValue('Name'));
// }
}
}
);
};ui
function exeScript(sqlscript, callback){
db.query(
sqlscript
,{google
}
,function(res){
if(res.err)throw new Error('database error:'+res.err.msg);
callback();
}
);
};
function del(sqlscript,callback){
exeScript(sqlscript,callback);
}
function update(sqlscript,callback){
exeScript(sqlscript,callback);
}
function add(sqlscript,callback){
exeScript(sqlscript,callback);
}
//convert table to json
function toJson(data, entityName)
{
var jsonString;
if (data != undefined && data.rows.length > 0)
{
var rowLen=data.rows.length;
var colLen=data.rows[0].metadata.columns.length;
jsonString="{";
jsonString+="\""+entityName+"\":[";
for (var i = 0; i < rowLen; i++)
{
jsonString+="{";
for (var j = 1; j < colLen; j++)
{
if (j < colLen - 1)
{
jsonString+="\"" + data.rows[0].metadata.columns[j].name + "\":" + "\"" + data.rows[i].getValue(j)+ "\",";
}
else if (j == colLen - 1)
{
//console.log(j + ' ' + i );
jsonString+="\"" + data.rows[0].metadata.columns[j].name + "\":" + "\"" + data.rows[i].getValue(j) + "\"";
}
}
if (i == rowLen - 1)
{
jsonString+="}";
}
else
{
jsonString+="},";
}
}
jsonString+="]}";
return jsonString;
}
return jsonString;
}
exports.Add=add;exports.Delete=del;exports.Update=update;exports.Select=select;