Выполнить SQL-запрос в последовательности в транспортире - PullRequest
0 голосов
/ 23 мая 2018

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

Теперь я хочу убедиться, что мой код должен ждать допредыдущий запрос еще не завершен, а затем только перейти к следующему запросу для выполнения.В настоящее время все запросы выполняются без ожидания завершения предыдущего запроса.

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

Ответы [ 2 ]

0 голосов
/ 31 июля 2019

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

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

}
0 голосов
/ 23 мая 2018

Можете ли вы отправить несколько команд в виде одной строки?

SQL Server увидит ее как одну транзакцию и обеспечит выполнение всех команд в порядке.

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