我正在使用量角器工具进行自动化,并使用 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);
现在,我想确保我的代码应该等到上一个查询尚未完成,然后才转到下一个查询执行。目前,所有查询都在执行而不等待以前的查询完成。
我们如何确保仅在第一次查询执行完成时才执行下一个查询。
答案 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
}
}