webdriverio mysql_e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (三) Sql...

下面讲一下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操作,还是可以的。

如下是Node.js使用, 我将它们做了一下封装,可以提供select, add, delete,update操作

var db = require('./dbHelper');

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, ')

}

db.config({

host: 数据库地址

,port: 1433

,userName: 用户名

,password: 密码

,database: 数据库名

});

console.log('执行 SQL ' + sqlScript.green);

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'));

// }

}

}

);

};

function exeScript(sqlscript, callback){

db.query(

sqlscript

,{

}

,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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值