Loadrunner测试数据库、SQL语句性能

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介:
Action()   
 
int rc;     
int db_connection; //  数据库 连接   
int query_result; // 查询结果集 MYSQL_RES   
char** result_row; // 查询的数据衕   
     
char *server = "localhost";   
char *user = "root";   
char *password = "123456";   
char *database = " test ";   
int port = 3306;   
int unix_socket = NULL;     
int flags = 0;     
     
// 找到libmysql.dll的所在位置.   
rc = lr_load_dll("C:\\Program Files\\MySQL\\MySQL  Server  5.1\\bin\\libmysql.dll");   
if (rc != 0) {   
        lr_error_message("Could not load libmysql.dll");   
        lr_abort();   
 
     
// 创建MySQL对象   
db_connection = mysql_init(NULL);   
if (db_connection == NULL) {   
        lr_error_message("Insufficient memory");   
        lr_abort();   
 
     
// 连接到MySQL数据库   
rc = mysql_real_connect(db_connection, server, user, password, database, port, unix_socket, flags);   
if (rc == NULL) {   
        lr_error_message("%s", mysql_error(db_connection));   
        mysql_close(db_connection);   
        lr_abort();   
 
     
// 向数据库插入数据   
// 此处的 {ORDER_ID} 是一个参数,简单 测试 时可以用一个常数代替   
lr_save_string (lr_eval_string("INSERT INTO test_data (order_id) VALUES ({ORDER_ID})"),"paramInsertQuery");     
rc = mysql_query(db_connection, lr_eval_string("{paramInsertQuery}"));   
if (rc != 0) {   
        lr_error_message("%s", mysql_error(db_connection));   
        mysql_close(db_connection);   
        lr_abort();   
 
     
// 从数据库读取一个数据并显示   
rc = mysql_query(db_connection, "SELECT order_id FROM test_data WHERE status IS FALSE LIMIT 1");   
if (rc != 0) {   
        lr_error_message("%s", mysql_error(db_connection));   
        mysql_close(db_connection);   
        lr_abort();   
 
query_result = mysql_use_result(db_connection);   
if (query_result == NULL) {   
        lr_error_message("%s", mysql_error(db_connection));   
        mysql_free_result(query_result);   
        mysql_close(db_connection);   
        lr_abort();   
 
// 如果结果集包含多行数据,需要多次调用 mysql_fetch_row 直到返回NULL   
result_row = (char **)mysql_fetch_row(query_result);     
if (result_row == NULL) {   
        lr_error_message("Did not expect the result set to be empty");   
        mysql_free_result(query_result);   
        mysql_close(db_connection);   
        lr_abort();   
 
// 保存参数,用于删除这行数据   
lr_save_string(result_row[0], "paramOrderID");   
lr_output_message("Order ID is: %s", lr_eval_string("{paramOrderID}"));   
mysql_free_result(query_result);   
     
// 在事务里更新一行数据,需要用InnoDB引擎   
rc = mysql_query(db_connection, "BEGIN"); //启动事务   
if (rc != 0) {   
        lr_error_message("%s", mysql_error(db_connection));   
        mysql_close(db_connection);   
        lr_abort();   
 
// 使用 "FOR UPDATE" 锁住要更新的数据行   
rc = mysql_query(db_connection, "SELECT order_id FROM test_data WHERE status IS FALSE LIMIT 1 FOR UPDATE");     
if (rc != 0) {   
        lr_error_message("%s", mysql_error(db_connection));   
        mysql_close(db_connection);   
        lr_abort();   
 
query_result = mysql_use_result(db_connection);   
if (query_result == NULL) {   
        lr_error_message("%s", mysql_error(db_connection));   
        mysql_free_result(query_result);   
        mysql_close(db_connection);   
        lr_abort();   
 
result_row = (char **)mysql_fetch_row(query_result);     
if (result_row == NULL) {   
        lr_error_message("没有查询到结果");   
        mysql_free_result(query_result);   
        mysql_close(db_connection);   
        lr_abort();   
 
lr_save_string(result_row[0], "paramOrderID");   
lr_output_message("Order ID is: %s", lr_eval_string("{paramOrderID}"));   
mysql_free_result(query_result);   
lr_save_string(lr_eval_string("UPDATE test_data SET status=TRUE, date_used=NOW() WHERE order_id='{paramOrderID}'"),"paramUpdateQuery");   
rc = mysql_query(db_connection, lr_eval_string("{paramUpdateQuery}"));   
if (rc != 0) {   
        lr_error_message("%s", mysql_error(db_connection));   
        mysql_close(db_connection);   
        lr_abort();   
 
rc = mysql_query(db_connection, "COMMIT"); // 提交事务   
if (rc != 0) {   
        lr_error_message("%s", mysql_error(db_connection));   
        mysql_close(db_connection);   
        lr_abort();   
 
     
// 再次查找数据,应该为空了,因为前面的事务更新了标志   
rc = mysql_query(db_connection, "SELECT order_id FROM test_data WHERE status IS FALSE LIMIT 1");   
if (rc != 0) {   
        lr_error_message("%s", mysql_error(db_connection));   
        mysql_close(db_connection);   
        lr_abort();   
 
query_result = mysql_use_result(db_connection);   
if (query_result == NULL) {   
        lr_error_message("%s", mysql_error(db_connection));   
        mysql_free_result(query_result);   
        mysql_close(db_connection);   
        lr_abort();   
 
result_row = (char **)mysql_fetch_row(query_result);   
if (result_row == NULL) {   
        lr_output_message("Result set is empty as expected");   
        mysql_free_result(query_result);   
} else {   
        lr_error_message("Did not expect the result set to contain any rows");   
        mysql_free_result(query_result);   
        mysql_close(db_connection);   
        lr_abort();   
 
     
// 删除数据   
lr_save_string(lr_eval_string("DELETE FROM test_data WHERE order_id = '{paramOrderID}'"),"paramDeleteQuery");   
rc = mysql_query(db_connection, lr_eval_string("{paramDeleteQuery}"));   
if (rc != 0) {   
        lr_error_message("%s", mysql_error(db_connection));   
        mysql_close(db_connection);   
        lr_abort();   
 
     
// 释放MySQL资源   
mysql_close(db_connection);   
        return 0;   
}

Action()
{
int rc;
int db_connection; // 数据库连接
int query_result; // 查询结果集 MYSQL_RES
char** result_row; // 查询的数据衕

char *server = "localhost";
char *user = "root";
char *password = "123456";
char *database = "test";
int port = 3306;
int unix_socket = NULL;
int flags = 0;

// 找到libmysql.dll的所在位置.
rc = lr_load_dll("C:\\Program Files\\MySQL\\MySQL Server 5.1\\bin\\libmysql.dll");
if (rc != 0) {
        lr_error_message("Could not load libmysql.dll");
        lr_abort();
}

// 创建MySQL对象
db_connection = mysql_init(NULL);
if (db_connection == NULL) {
        lr_error_message("Insufficient memory");
        lr_abort();
}

// 连接到MySQL数据库
rc = mysql_real_connect(db_connection, server, user, password, database, port, unix_socket, flags);
if (rc == NULL) {
        lr_error_message("%s", mysql_error(db_connection));
        mysql_close(db_connection);
        lr_abort();
}

// 向数据库插入数据
// 此处的 {ORDER_ID} 是一个参数,简单测试时可以用一个常数代替
lr_save_string (lr_eval_string("INSERT INTO test_data (order_id) VALUES ({ORDER_ID})"),"paramInsertQuery");
rc = mysql_query(db_connection, lr_eval_string("{paramInsertQuery}"));
if (rc != 0) {
        lr_error_message("%s", mysql_error(db_connection));
        mysql_close(db_connection);
        lr_abort();
}

// 从数据库读取一个数据并显示
rc = mysql_query(db_connection, "SELECT order_id FROM test_data WHERE status IS FALSE LIMIT 1");
if (rc != 0) {
        lr_error_message("%s", mysql_error(db_connection));
        mysql_close(db_connection);
        lr_abort();
}
query_result = mysql_use_result(db_connection);
if (query_result == NULL) {
        lr_error_message("%s", mysql_error(db_connection));
        mysql_free_result(query_result);
        mysql_close(db_connection);
        lr_abort();
}
// 如果结果集包含多行数据,需要多次调用 mysql_fetch_row 直到返回NULL
result_row = (char **)mysql_fetch_row(query_result);
if (result_row == NULL) {
        lr_error_message("Did not expect the result set to be empty");
        mysql_free_result(query_result);
        mysql_close(db_connection);
        lr_abort();
}
// 保存参数,用于删除这行数据
lr_save_string(result_row[0], "paramOrderID");
lr_output_message("Order ID is: %s", lr_eval_string("{paramOrderID}"));
mysql_free_result(query_result);

// 在事务里更新一行数据,需要用InnoDB引擎
rc = mysql_query(db_connection, "BEGIN"); //启动事务
if (rc != 0) {
        lr_error_message("%s", mysql_error(db_connection));
        mysql_close(db_connection);
        lr_abort();
}
// 使用 "FOR UPDATE" 锁住要更新的数据行
rc = mysql_query(db_connection, "SELECT order_id FROM test_data WHERE status IS FALSE LIMIT 1 FOR UPDATE");
if (rc != 0) {
        lr_error_message("%s", mysql_error(db_connection));
        mysql_close(db_connection);
        lr_abort();
}
query_result = mysql_use_result(db_connection);
if (query_result == NULL) {
        lr_error_message("%s", mysql_error(db_connection));
        mysql_free_result(query_result);
        mysql_close(db_connection);
        lr_abort();
}
result_row = (char **)mysql_fetch_row(query_result);
if (result_row == NULL) {
        lr_error_message("没有查询到结果");
        mysql_free_result(query_result);
        mysql_close(db_connection);
        lr_abort();
}
lr_save_string(result_row[0], "paramOrderID");
lr_output_message("Order ID is: %s", lr_eval_string("{paramOrderID}"));
mysql_free_result(query_result);
lr_save_string(lr_eval_string("UPDATE test_data SET status=TRUE, date_used=NOW() WHERE order_id='{paramOrderID}'"),"paramUpdateQuery");
rc = mysql_query(db_connection, lr_eval_string("{paramUpdateQuery}"));
if (rc != 0) {
        lr_error_message("%s", mysql_error(db_connection));
        mysql_close(db_connection);
        lr_abort();
}
rc = mysql_query(db_connection, "COMMIT"); // 提交事务
if (rc != 0) {
        lr_error_message("%s", mysql_error(db_connection));
        mysql_close(db_connection);
        lr_abort();
}

// 再次查找数据,应该为空了,因为前面的事务更新了标志
rc = mysql_query(db_connection, "SELECT order_id FROM test_data WHERE status IS FALSE LIMIT 1");
if (rc != 0) {
        lr_error_message("%s", mysql_error(db_connection));
        mysql_close(db_connection);
        lr_abort();
}
query_result = mysql_use_result(db_connection);
if (query_result == NULL) {
        lr_error_message("%s", mysql_error(db_connection));
        mysql_free_result(query_result);
        mysql_close(db_connection);
        lr_abort();
}
result_row = (char **)mysql_fetch_row(query_result);
if (result_row == NULL) {
        lr_output_message("Result set is empty as expected");
        mysql_free_result(query_result);
} else {
        lr_error_message("Did not expect the result set to contain any rows");
        mysql_free_result(query_result);
        mysql_close(db_connection);
        lr_abort();
}

// 删除数据
lr_save_string(lr_eval_string("DELETE FROM test_data WHERE order_id = '{paramOrderID}'"),"paramDeleteQuery");
rc = mysql_query(db_connection, lr_eval_string("{paramDeleteQuery}"));
if (rc != 0) {
        lr_error_message("%s", mysql_error(db_connection));
        mysql_close(db_connection);
        lr_abort();
}

// 释放MySQL资源
mysql_close(db_connection);
return 0;
}  








====================================分割线================================



最新内容请见作者的GitHub页:http://qaseven.github.io/

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2天前
|
SQL 数据库
SQL数据库基础语法-查询语句
SQL数据库基础语法-查询语句
|
2天前
|
SQL 存储 数据库
SQL数据库基础语法-增删改
SQL数据库基础语法-增删改
SQL数据库基础语法-增删改
|
2天前
|
SQL 关系型数据库 分布式数据库
提升数据库性能
【5月更文挑战第6天】提升数据库性能
15 1
|
4天前
|
SQL 数据库 Windows
sql数据库安装过程,SQL数据库的安装过
本文概述了安装SQL Server数据库的步骤:准备硬件和软件环境,运行安装程序,选择安装类型,接受许可协议,设定安装路径和组件,配置实例和服务账户,选择身份验证模式,配置其他设置,然后安装并完成。安装后需检查验证SQL Server是否正常工作。确保遵循步骤以顺利完成安装。
42 3
|
8天前
|
存储 大数据 测试技术
矢量数据库的性能测试与评估方法
【4月更文挑战第30天】本文探讨了矢量数据库的性能测试与评估方法,强调其在大数据和AI时代的重要性。文中介绍了负载测试、压力测试、容量测试、功能测试和稳定性测试五大评估方法,以及实施步骤,包括确定测试目标、设计用例、准备环境、执行测试和分析结果。这些方法有助于确保数据库的稳定性和高效性,推动技术发展。
|
8天前
|
存储 缓存 固态存储
优化矢量数据库性能:技巧与最佳实践
【4月更文挑战第30天】本文探讨了优化矢量数据库性能的技巧和最佳实践,包括硬件(如使用SSD、增加内存和利用多核处理器)、软件(索引优化、查询优化、数据分区和压缩)和架构(读写分离、分布式架构及缓存策略)方面的优化措施。通过这些方法,可以提升系统运行效率,应对大数据量和复杂查询的挑战。
|
8天前
|
分布式计算 Hadoop 测试技术
|
8天前
|
分布式计算 Hadoop 测试技术
|
8天前
|
分布式计算 Hadoop 测试技术
Hadoop节点网络性能的带宽测试
【4月更文挑战第23天】
23 1
|
8天前
|
SQL 关系型数据库 MySQL
利用 SQL 注入识别数据库方法总结
利用 SQL 注入识别数据库方法总结