Выполнить SQL-запрос последовательно в транспортире

Я использую инструмент транспортира для автоматизации и использую mssql для подключения к БД, чтобы выполнить любой запрос 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 user1931543 вы можете выполнять SQL-запросы внутри protractor.promise.controlFlow().execute(sqlQuery.executeQuery(SQl_query1)) - person Sudharsan Selvaraj; 24.05.2018

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

Функция, с помощью которой вы можете выполнять запрос в 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
  }

}
person Gaurav Khurana    schedule 31.07.2019