版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、此代码为Loadrunner 8 通过C API类型的Vuser 测试MySQL性能,或者测试sql语句性能的脚本。这东西很少有人用,网上资料很少,一般测试B/S的很多。 CODE:view plaincopy to clipboardprint?/*需要的表结构如下 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
2、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; / 数据库连接int query_result; / 查询结果集 MYSQL_RESchar* result_row; / 查询的数据衕 char *server = localh
3、ost;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 FilesMySQLMySQL Server 5.1binlibmysql.dll);if (rc != 0) lr_error_message(Could not load libmysql.dll); lr_abort(); / 创建MySQL对象db
4、_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_c
5、onnection); 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); mys
6、ql_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 (qu
7、ery_result = NULL) lr_error_message(%s, mysql_error(db_connection); mysql_free_result(query_result); mysql_close(db_connection); lr_abort();/ 如果结果集包含多行数据,需要多次调用 mysql_fetch_row 直到返回NULLresult_row = (char *)mysql_fetch_row(query_result); if (result_row = NULL) lr_error_message(Did not expect the resu
8、lt set to be empty); mysql_free_result(query_result); mysql_close(db_connection); lr_abort();/ 保存参数,用于删除这行数据lr_save_string(result_row0, paramOrderID);lr_output_message(Order ID is: %s, lr_eval_string(paramOrderID);mysql_free_result(query_result); / 在事务里更新一行数据,需要用InnoDB引擎rc = mysql_query(db_connectio
9、n, 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_con
10、nection); 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 (re
11、sult_row = NULL) lr_error_message(没有查询到结果); mysql_free_result(query_result); mysql_close(db_connection); lr_abort();lr_save_string(result_row0, 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
12、 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
13、 != 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_connec
14、tion); 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_messa
15、ge(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 = paramOrd
16、erID),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; /*需要的表结构如下CREATE TABLE test_data (order_id BIGINT UNSIGNED N
17、OT 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
18、db_connection; / 数据库连接int query_result; / 查询结果集 MYSQL_RESchar* 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 FilesMySQLMySQL Server 5.1
19、binlibmysql.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,
20、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,
21、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_connecti
22、on); 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 直到返回NULLresult_row = (char
23、 *)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_row0, paramOrderID);lr_output_message(Order ID is: %s, lr_eval_string(para
24、mOrderID);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
25、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); mys
26、ql_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_row0, paramOrderID);lr_output_message(Order ID is: %s, lr_eval_string
27、(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 FA
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 肩周炎护理员操作技能培训
- 诊所护理疼痛管理
- 白癜风患者的心理护理
- 干性皮肤的日常习惯与护理
- 护理课件学习资源丰富性评价
- 大丰市小海中学高二生物三同步课程讲义第讲种群的特征
- 2025秋人教版(新教材)初中美术八年级上册知识点及期末测试卷及答案
- 2025年保险产品代销协议
- 2025年云迁移项目风险矩阵更新:动态评估与优先级调整
- 在线摄影拍摄行业市场趋势分析
- 应急救援器材培训课件
- 小学美术四年级上册 3. 周末日记 公开课比赛一等奖
- 塑料制品行业财务工作年度绩效报告
- 皮肤科护理中的振动按摩在皮肤病管理中的应用
- 20以内进位加法100题(精心整理6套-可打印A4)
- 肠内营养考评标准终
- 2023届高考专题复习:小说专题训练群体形象与个体形象(含答案)
- 项目全周期现金流管理培训
- 生物化学实验智慧树知到答案章节测试2023年浙江大学
- 等腰三角形复习课教案
- GB/T 39741.1-2021滑动轴承公差第1部分:配合
评论
0/150
提交评论