1

我一直在使用 mountebank 为性能测试做一些存根,它是一个很棒的工具。功能团队询问是否可以将其重新用于支持功能测试,我说我会看看。

我想要实现的是从 mysql 数据库中选择一个帐号及其帐户余额,然后将余额返回给客户端(在本例中为 jmeter 工具)

function (request, state, logger) {

logger.info('GBG - getAccountBalance');

var mysql = require('mysql');
var result = '';

var con = mysql.createConnection({
host: "localhost",
user: "user",
password: "password",
database: "customer"
});

con.connect(function(err) {
    if (err) throw err;
    console.log("Connected!");
});  

con.query('select * from accounts', function (err, rows, fields) {
    if (err) throw err;
    console.log(rows);
    console.log('accountNumber is : ', rows[0].accountNumber);
    result = rows[0].accountNumber;
});

console.log('result is : ', result);
var response = result;

return {
    headers: {
                'Content-Type': 'application/xml',
                'Connection': 'Keep-Alive'
            },
    body: response
};      

}  

控制台日志的结果是:

result is :
Connected!
[ RowDataPacket { accountNumber: 777777, accountBalance: 777 } ]
accountNumber is :  777777

不知道我做错了什么以及为什么结果是:尽管在代码中稍后会出现行。

任何建议表示赞赏。

完全披露,我已经使用 mountebank 大约两个星期了,所以我是一个真正的初学者。

4

1 回答 1

1

and里面的function关键字叫做callbacks,只有在函数本身完成后才会执行。所以你的代码看起来像:connectquery

con.connect(function(err) {
    if (err) throw err;
    console.log("Connected!");


con.query('select * from accounts', function (err, rows, fields) {
    if (err) throw err;
    console.log(rows);
    console.log('accountNumber is : ', rows[0].accountNumber);
    result = rows[0].accountNumber;

    console.log('result is : ', result);
    var response = result;
});        
});  

等等,但你只是在代码中引入了回调地狱
async是你的朋友。


编辑:以下示例:

async.waterfall([
    function (callback) {
        //do some async function here
        con.connect(function(err) {
            if (err) throw err;
            console.log("Connected!");
            //call this when you are done
            //you can even pass param to next function
            callback(null,true);
        }); 
    },function (isConnected,callback1) {
        if !(isConnected){
        console.log("Connection failed! Skipping Query...")
        callback1(null,"Error");
        }
        //do another async function here:
        con.query('select * from accounts', function (err, rows, fields) {
            if (err) throw err;
            console.log(rows);
            console.log('accountNumber is : ', rows[0].accountNumber);
            result = rows[0].accountNumber;
            callback1(null,"Complete");
        });
    }
    ], function (err,result) {
                if(result == "Error"){
                alert("Someting went wrong!");
                }
                if(result == "Complete"){
                alert("Done!");
                }
                return 0;
            });

注意:我有一段时间没有写JS了。用一些现有的代码写出来,还没有经过测试。此外,Promise 也有帮助,但没有亲自研究过。BlueBird 是一个图书馆。

于 2017-07-24T01:23:04.467 回答