Изпълнете последователно SQL заявка в транспортир

Използвам инструмент за транспортир за автоматизация и използвам 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);

Сега искам да се уверя, че моят код трябва да изчака, докато предишната заявка все още не е завършена и след това само да премине към следващата заявка за изпълнение. В момента всички заявки се изпълняват, без да се чака предишната заявка да завърши.

Как можем да се уверим, че следващата заявка ще бъде изпълнена само когато първото изпълнение на заявка е завършено.


person Amit    schedule 23.05.2018    source източник


Отговори (2)


Можете ли да изпратите няколко команди като един низ?

SQL Server ще го види като една транзакция и ще гарантира, че всички команди се изпълняват в ред.

sql1 = "delete from temp1;delete from temp2;delete from temp3;delete from temp3;...delete from tempN;"
person pacreely    schedule 23.05.2018
comment
Благодаря за отговора ви, да, ще работи, но всъщност исках да изчакам всички заявки да бъдат изпълнени, преди да премине към следващата стъпка, за да изпълни някаква стъпка в потребителския интерфейс. Понастоящем с вашия подход заявките се изпълняват последователно, но преди всички заявки да бъдат изпълнени успешно, следващите стъпки на моите скриптове започват да се изпълняват в потребителския интерфейс, което не искам. Изглежда, че трябва да се обработва от код на транспортир. - person Amit; 23.05.2018
comment
@user1931543 можете да изпълнявате sql заявките вътре в protractor.promise.controlFlow().execute(sqlQuery.executeQuery(SQl_query1)) - person Sudharsan Selvaraj; 24.05.2018

Трябва да използвате концепцията за обещание, която може да направи нещата последователни само в транспортира.

Функция, чрез която можете да изпълнявате заявка в javascript, докато използвате транспортир и по друг начин

1) Ето как можете да изпълните заявка, като извикате персонализираната функция runQuery. Ще използваме вложени с ключова дума then

След това помага, като спира, докато не се изпълни първата заявка. Той ще изчака навършването на възрастта, преди да изчисли 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
  }

}
person Gaurav Khurana    schedule 31.07.2019