在量角器中按顺序执行SQL查询

时间:2018-05-23 06:41:30

标签: promise jasmine protractor e2e-testing angularjs-e2e

我正在使用量角器工具进行自动化,并使用 mssql 连接到DB,以便在数据库上执行任何SQL查询。

我有一堆查询需要按顺序执行。

            sql1 = "delete from temp1"
            sql2 =  "delete from temp2"
            sql3 = "delete from temp3"
            .
            .
            sqln = "delete from tempn"

            **I have created below method to execute the queries- sqlcommands.js**
            var sql = require("mssql")

            var MSSqlExecution = function () {
             var dbConfig = {
                server: "00.00.00.00" ,
                database: "WQER" ,
                user: "REW" ,
                password: "WER",
                port: 11433,
                connectionTimeout: 999999999,
                requestTimeout: 999999999
             };

            this.executeQuery = function (sql_query){
                console.log("Executin query: "+sql_query);
                var conn = new sql.ConnectionPool(dbConfig);
                conn.connect().then(function(){
                    var req = new sql.Request(conn);
                    console.log("Executin query: "+sql_query);
                    req.query(sql_query).then(function(recordset){
                        console.log(recordset);
                        browser.sleep(12000);
                        conn.close();
                    }).catch(function(err){
                        console.log("Execute query error :  "+err);
                        conn.close();
                    });
                }).catch(function(error){
                    console.log("conn error :::: "+error);
                    conn.close();
                });
             };
            };
            module.exports = new MSSqlExecution();

现在我在beforeAll()方法中从我的测试类调用这些方法。

        var sqlQuery = require('../../../commands/sqlcommands.js');
         sqlQuery.executeQuery(SQl_query1);
            sqlQuery.executeQuery(SQl_query2);
            sqlQuery.executeQuery(SQl_query3);
            sqlQuery.executeQuery(SQl_queryn);

现在,我想确保我的代码应该等到上一个查询尚未完成,然后才转到下一个查询执行。目前,所有查询都在执行而不等待以前的查询完成。

我们如何确保仅在第一次查询执行完成时才执行下一个查询。

2 个答案:

答案 0 :(得分:0)

您是否可以将多个命令作为单个字符串发送?

SQL Server会将其视为单个事务,并确保所有命令都按顺序执行。

sql1 = "delete from temp1;delete from temp2;delete from temp3;delete from temp3;...delete from tempN;"

答案 1 :(得分:0)

您必须使用 promise 的概念,该概念只能使量角器中的东西顺序排列。

功能,您可以在使用量角器的同时在 javascript 中执行查询,否则也可以

1)在这里,您可以通过调用自定义函数 runQuery 来运行查询。我们将使用嵌套的关键字然后

然后通过停止直到第一个查询运行来提供帮助。在计算DOB之前,它将等待年龄的出现

 query = " select age from employee"
 // Query to get age from employee
    db.runQuery(query).then(function (queryResult) {
        age = queryResult[0].age

        // here next query is dependent on first
        query = "select dob from employee where age = '" + age + "'";

        db.runQuery(query).then(function (queryResult) {
            dateofBirth = queryResult[0].dob;
         });
    })
 });

其中runQuery是一个通用函数,例如在另一页中的executeQuery

var sql = require('mssql');
var basePage = require('../pages/base_page.js');

var dbutil = function () {

this.runQuery = function (query) {
    return new Promise(function (resolve, reject) {
        var conn = basePage.buildAppsDbConnection();
        var req = new sql.Request(conn);
        conn.connect(function (err) {


            if (err) {

                console.log(err);
                return;
            }
            console.log("query = " + query);
            req.query(query + " for json auto;", function (err, recordset) {

                if (err) {

                    console.log(err);
                } else {



                        var desiredString = recordset['recordset'][0]['JSON_F52E2B61-18A1-11d1-B105-00805F49916B'];
                        if (desiredString.length) {
                            var desiredJson = JSON.parse(desiredString);
                            console.log(desiredJson);
                            resolve(desiredJson);
                        }
                        else {
                             desiredJson = '{"For Query":"No Rows Returned"}';
                             resolve(desiredJson);
                        }

                }
                conn.close();
            })
        });


    });

}
 }

module.exports = new dbutil();

这是我们存储配置的另一页中的函数

 var BasePage = function () {
  var sql = require('mssql');
  this.buildAppsDbConnection = function () {

var dbConfig = {

  server: "servernamehere",
  database: "DBname",
  user: "username",
  password: "password",
  options: {
    encrypt: true // Use this if you're on Windows Azure
  }

}