通过loadrunner 11常规通用的C语言API类型的Vuser 方式,测试验证MySQL数据库插入、查询、修改、删除数据性能脚本实例

本文主要是介绍通过loadrunner 11常规通用的C语言API类型的Vuser 方式,测试验证MySQL数据库插入、查询、修改、删除数据性能脚本实例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

通过loadrunner 11常规通用的C语言API类型的Vuser 方式,测试验证MySQL数据库插入、查询、修改、删除数据性能脚本实例
继上一篇mysql数据库性能测试三种实现方法,另外一种常规通用的方法
loadrunner和mysql安装配置省略,下面是脚本实例
/*需要的表结构如下 
CREATE TABLE `test_data` ( `order_id` BIGINT UNSIGNED NOT NULL COMMENT 'Order ,numbers. Must be unique.', `status` BOOL NOT NULL DEFAULT '0' COMMENT 'Whether data has been used or not. A value of 0 means FALSE.', `date_used` DATETIME NULL COMMENT 'Date/time that the data was used.', UNIQUE ( `order_id` ) 
) ENGINE = innodb COMMENT = 'LoadRunner test data'; 
*/  
Action()  
{  int rc;   int db_connection; // <a href="http://lib.csdn.net/base/mysql" class='replace_word' title="MySQL知识库" target='_blank' style='color:#df3434; font-weight:bold;'>数据库</a>连接  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//<a href="http://lib.csdn.net/base/mysql" class='replace_word' title="MySQL知识库" target='_blank' style='color:#df3434; font-weight:bold;'>mysql</a>//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;  
}  


这篇关于通过loadrunner 11常规通用的C语言API类型的Vuser 方式,测试验证MySQL数据库插入、查询、修改、删除数据性能脚本实例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/847190

相关文章

C语言小项目实战之通讯录功能

《C语言小项目实战之通讯录功能》:本文主要介绍如何设计和实现一个简单的通讯录管理系统,包括联系人信息的存储、增加、删除、查找、修改和排序等功能,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录功能介绍:添加联系人模块显示联系人模块删除联系人模块查找联系人模块修改联系人模块排序联系人模块源代码如下

Java中注解与元数据示例详解

《Java中注解与元数据示例详解》Java注解和元数据是编程中重要的概念,用于描述程序元素的属性和用途,:本文主要介绍Java中注解与元数据的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参... 目录一、引言二、元数据的概念2.1 定义2.2 作用三、Java 注解的基础3.1 注解的定义3.2 内

将sqlserver数据迁移到mysql的详细步骤记录

《将sqlserver数据迁移到mysql的详细步骤记录》:本文主要介绍将SQLServer数据迁移到MySQL的步骤,包括导出数据、转换数据格式和导入数据,通过示例和工具说明,帮助大家顺利完成... 目录前言一、导出SQL Server 数据二、转换数据格式为mysql兼容格式三、导入数据到MySQL数据

Redis的Zset类型及相关命令详细讲解

《Redis的Zset类型及相关命令详细讲解》:本文主要介绍Redis的Zset类型及相关命令的相关资料,有序集合Zset是一种Redis数据结构,它类似于集合Set,但每个元素都有一个关联的分数... 目录Zset简介ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZ

Java中List转Map的几种具体实现方式和特点

《Java中List转Map的几种具体实现方式和特点》:本文主要介绍几种常用的List转Map的方式,包括使用for循环遍历、Java8StreamAPI、ApacheCommonsCollect... 目录前言1、使用for循环遍历:2、Java8 Stream API:3、Apache Commons

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

C#提取PDF表单数据的实现流程

《C#提取PDF表单数据的实现流程》PDF表单是一种常见的数据收集工具,广泛应用于调查问卷、业务合同等场景,凭借出色的跨平台兼容性和标准化特点,PDF表单在各行各业中得到了广泛应用,本文将探讨如何使用... 目录引言使用工具C# 提取多个PDF表单域的数据C# 提取特定PDF表单域的数据引言PDF表单是一

MySQL分表自动化创建的实现方案

《MySQL分表自动化创建的实现方案》在数据库应用场景中,随着数据量的不断增长,单表存储数据可能会面临性能瓶颈,例如查询、插入、更新等操作的效率会逐渐降低,分表是一种有效的优化策略,它将数据分散存储在... 目录一、项目目的二、实现过程(一)mysql 事件调度器结合存储过程方式1. 开启事件调度器2. 创

SQL Server使用SELECT INTO实现表备份的代码示例

《SQLServer使用SELECTINTO实现表备份的代码示例》在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误,在SQLServer中,可以使用SELECTINT... 在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误。在 SQL Server 中,可以使用 SE

基于Go语言实现一个压测工具

《基于Go语言实现一个压测工具》这篇文章主要为大家详细介绍了基于Go语言实现一个简单的压测工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录整体架构通用数据处理模块Http请求响应数据处理Curl参数解析处理客户端模块Http客户端处理Grpc客户端处理Websocket客户端