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

e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (三) SqlServer数据库的访问的更多相关文章

  1. e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (六) 自动化测试结构小节

    上一篇‘e2e 自动化集成测试 架构 京东 商品搜索 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (五) 如何让窗体记录登录 ...

  2. e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (四) Q 反回调

    上一篇文章“e2e 自动化集成测试 架构 京东 商品搜索 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (三) SqlServ ...

  3. e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (二) 图片验证码的识别

    上一篇文章讲了“e2e 自动化集成测试 架构 京东 商品搜索 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step 一 京东 商品搜索 ...

  4. e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (一) 京东 商品搜索

    之前有发布一篇文章“e2e 自动化集成测试 环境搭建 Node.js Selenium WebDriverIO Mocha Node-Inspector”, 主要是讲了,如何搭建环境, 其中开发环境使 ...

  5. e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (五) 如何让窗体记录登录状态Session

    在写自动化测试的Node.js脚本时, 时常需要测试所写的case, 可能都需要去重新登录一遍,这将相当的耗时, 好在Selenium都借了Session的机制, 如果在最初的浏览器没有关闭的情况下, ...

  6. e2e 自动化集成测试 环境搭建 Node.js Selenium WebDriverIO Mocha Node-Inspector

    Node.js已经出来了许多年载,至今才开始接触.周未在家闲来无事,一时心血来潮,Google了大量的文章,经过实验,终于可以把整个环境给搭起来, 废话不多话,请看步骤. 特别注意, 本文章是针对Wi ...

  7. 前端自动化之路之gulp,node.js

    随着现在前端技术的不断发展,和各个公司对前端项目开发更新速度的要求,前端自动化越来越受到大家的重视,之前传统的前端开发方式已经越来越不能满足开发的需求了,于是各种自动化工具随之产生了.而gulp就是其 ...

  8. 【nodejs笔记1】配置webstorm + node.js +express + mongodb开发博客的环境

    1. 安装webstorm 并破解 2. 安装node (以及express框架) 至官网下载并安装.(http://nodejs.org)v0.10.32   msi  安装后测试,打开命令行, c ...

  9. WebStorm+Node.js开发环境的配置

    1 下载地址:  webstorm:http://www.jetbrains.com/webstorm node.js:https://nodejs.org/download/ 2 安装node.js ...

随机推荐

  1. MITK-Qt4.8.4(x64)+VS2012+Win7_X64 编译记录

    本文参考 http://blog.csdn.net/lanxuxml/article/details/9232529(中文) http://docs.mitk.org/nightly-qt4/Buil ...

  2. poj 3013 Big Christmas Tree (最短路径Dijsktra) -- 第一次用优先队列写Dijsktra

    http://poj.org/problem?id=3013 Big Christmas Tree Time Limit: 3000MS   Memory Limit: 131072K Total S ...

  3. HTML <iframe> 标签

    参考地址:http://www.w3school.com.cn/tags/tag_iframe.asp ------------------------------------------------ ...

  4. notepad++ 开启/关闭 记住最后打开的文件

    开启记住最后打开的文件 1) 6.3以前版本如下设置: 设置-->首选项-->其他 把左下角的 "记住最后打开文件" 勾选. 2) 6.3以后版本如下设置: 设置--& ...

  5. 分析jQuery中的each方法

    在看jQuery源码是怎么实现each方法之前,我们看一下js的原生实现. ECMAScript 5为数组定义了一个forEach方法,该方法接受两个参数:第一个参数是要在每一个数组项上运行的函数,第 ...

  6. 【leetcode】Permutations II (middle)

    Given a collection of numbers that might contain duplicates, return all possible unique permutations ...

  7. POJ3096Surprising Strings(map)

    题意:输入很多字符串,以星号结束.判断每个字符串是不是“Surprising Strings”,判断方法是:以“ZGBG”为例,“0-pairs”是ZG,GB,BG,这三个子串不相同,所以是“0-un ...

  8. MVC 文件上传和图片剪辑

    http://www.cnblogs.com/hinton/archive/2012/03/01/2375465.html http://gallery.kissyui.com/uploader/1. ...

  9. JVM并发机制的探讨——内存模型、内存可见性和指令重排序

    并发本来就是个有意思的问题,尤其是现在又流行这么一句话:“高帅富加机器,穷矮搓搞优化”. 从这句话可以看到,无论是高帅富还是穷矮搓都需要深入理解并发编程,高帅富加多了机器,需要协调多台机器或者多个CP ...

  10. Power Station POJ 4045

    题意:给你一棵树,让你求一点,使该点到其余各点的距离之和最小.如果这样的点有多个,则按升序依次输出. 树型dp #include <cstdio> #include <cstring ...