zoukankan      html  css  js  c++  java
  • e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (三) SqlServer数据库的访问

      上一篇文章“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 < 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;

  • 相关阅读:
    Flask——session
    UISB ScrollView
    UISB 登陆
    UISB TextField
    UISB 进步器 分栏控制器
    UISB UISlider ProgressView
    UISB Switch
    UISB 定时器
    Django-Celery文档
    UISB UIViewController
  • 原文地址:https://www.cnblogs.com/Stephending/p/4043882.html
Copyright © 2011-2022 走看看