如何利用loadrunner做mysql压力测试

2025-02-23 20:51:42
推荐回答(2个)
回答1:

LoadRunner测试数据库是模拟客户端去连接数据库服务器,因此,需要协议(或者说驱动的支持)。LoadRunner本身直接支持Oracle、SqlServer数据库,这两个数据库直接选择相应的协议就可以录制脚本。而MySQL数据库只能利用ODBC协议来录制(编写)脚本,所以必须要MySql的ODBC驱动,和支持ODBC的查询分析器(录脚本需要,自己编写就不需要)。

回答2:

http函数下的loadrunner编程。
globals.h
#ifndef _GLOBALS_H
#define _GLOBALS_H
#include "lrun.h"
#include "web_api.h"
#include "lrw_custom_body.h"
#include "modal_dialog_callbacks.h"
#define random(x) (rand()%x)
#include

#include
#include
#include
#include
#include
#include
#endif // _GLOBALS_H

vuser_init.c
MYSQL *db;
MYSQL_ROW record;
vuser_init()
{
char sql[128];
MYSQL_RES *results1;
lr_load_dll("libmysql.dll");
db = mysql_init(NULL);
mysql_real_connect(db, "192.168.8.32", "root", "123456", "sunboyu_test", 3311, "/tmp/mysql3311.sock", 1);
sprintf(sql, "show tables");
mysql_query(db, sql);
results1 = mysql_store_result(db);
while((record = mysql_fetch_row(results1)))
{
lr_log_message("table = %s", record[0]);
}
mysql_free_result(results1);
return 0;
}
vuser_end.c
vuser_end()
{
mysql_close(db);
mysql_server_end();
return 0;
}
Action.c
Action()
{
int r1 = 0;
char sql[128];
r1 = random(11); //10种用户,8种正常访问,两种在挖坟
lr_log_message(" %d", r1);
if(r1==11)
{
my_mysql_insert();
}
else
{
my_mysql_query( r1 );
}
return 0;
}
int my_mysql_query( int randid )
{
int r2 = 0;
int j = 0;
int count = 0;
int page = 0;
char sql[128];
MYSQL_RES *results2;
if(randid<2) //老数据,小部分 20%
{
r2 = random(700000);
sprintf(sql, "SELECT COUNT(*) AS count FROM posts_jx3 WHERE tid = %d;",r2);
lr_log_message("%s",sql);
mysql_query(db, sql);
results2 = mysql_store_result(db);
while((record = mysql_fetch_row(results2)))
{
lr_log_message("count = %d", record[0]);
}
mysql_free_result(results2);
page = count/10;
lr_log_message("page = %d", page);
for(j=0;j< =page;j++)
{
sprintf(sql, "SELECT * FROM posts_jx3 WHERE tid = %d LIMIT %d,10;",r2,j);
mysql_query(db, sql);
lr_log_message("%s", sql);
if (j>0) {
results2 = mysql_store_result(db);
while((record = mysql_fetch_row(results2)))