e2e 自动化集成测试 架构 京东 商品搜索 实例 webstorm node.js mocha webdriverio selenium step by step 二 图片验证码的识别 , 下面讲一下node.js中如何访问数据库, 在做自动化测试过程中, 经常可能遇到需要到数据库取值,或是更新值。来验证页面上的
        					e2e 自动化集成测试 架构 京东 商品搜索 实例 webstorm node.js mocha webdriverio selenium step by step 二 图片验证码的识别”,
      下面讲一下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 //                    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         {
            jsonstring+={;
            for (var j = 1; j             {
                if (j                 {
                    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;
   
 
   