loadrunner并发测试会不会把测试插入数据库

Loadrunner测试数据库性能测试SQL语句性能的脚本例子_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Loadrunner测试数据库性能测试SQL语句性能的脚本例子
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩9页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢LoadRunner性能测试工具使用指导书_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
LoadRunner性能测试工具使用指导书
&&性能测试工具 LoadRunner使用详解,图文
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩47页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢使用Loadrunner测试数据库性能
使用LR对数据库进行性能测试,实际上有多种办法,包括通过现有的数据库协议进行CS模式的先录制后执行的模式,以及通过socket方式向服务器发包方式的测试方式。这些是常规书籍上介绍的比较简单上手的测试方法,但是不具备通用性,受已有协议或socket编程方式的限制,所以需要更为通用的测试方法。
user的协议进行所有数据库性能的测试工作:
不需要录制,把所有的操作通过java语言进行实现,通过lr调用java的class进行加压批量操作,这样可以不关心被测系统是哪个数据库,只要能够通过jdbc进行访问,就能实现性能测试。
一、测试环境准备
被测服务器准备,根据测试目的,搭建需要的数据库服务器,确保数据库能够正常访问,正常操作;
Java代码的准备,无论使用哪种IDE,只要能够编写访问数据库的class就可以,形式可以是j2se,也可以是j2ee,因为在操作时只使用class的部分方法,所以j2ee就可以了;
LR的脚本调试,把java的class导入到脚本调试模式,根据需要添加事务以及其他操作。
二、编写数据库访问
使用myeclipse,创建web project,创建如下图的包目录:
Java文件中包含各种访问数据库的方法。
需要注意的是,class中的方法必须是public static,否则LR中无法调用。由于创建的是j2ee程序,所以不用main函数,在web中就可以进行功能验证。
确认class中的方法编写完成,创建一个web.jsp文件,如下:
声明类,并实例化,直接调用刚才编写的3个方法,因为这3个方法是直接对数据库进行操作,不需要实参,也没有返回值,所以直接实现即可。
此时启动web服务,在浏览器中输入jsp的地址,直接刷新页面,就可以调用这3个方法,如果正确,就会对相应的表进行操作,如果不正确,则需要修改相应的代码。
LR脚本准备:
LR脚本实际上就是对访问代码的调用,关键在于需要根据测试场景划分不同的脚本布局。
例如:在myEclipse里,我们只编写了一个class,其中包含三个方法,如果在执行性能测试时,这三个方法相互独立,互不干涉,则最简单的划分方法是,创建三个java user,每个java user中包含一个方法,做三份脚本,场景执行时分别进行调用。如果三个方法之间有相互关系,则需要根据实际情况,把有关联的方法放在一起,具体情况可按实际灵活分配。
因为已经将class文件进行编译发布了,所以可以在“java2postgres\WebRoot\WEB-INF\classes\com\lr\test”目录中找到对应的class文件,
复制这个文件,找到LR的目录:HP\LoadRunner\classes\com\lr\test\
如果没有文件夹,按相同的内容创建。
在LR脚本中进行引包操作:
将需要执行的java类以及方法,放在action中,可根据实际测试情况和所需要验证的内容,具体调试代码。
在这里可以像编写普通LR脚本一样,添加事务或集合点等内容。
由于是通过JDBC对数据库进行访问,因此要在java user中加载jdbc驱动。
运行时设置中,增加jdbc驱动,需要注意的是java user使用的本地jdk,需要至多1.6版本,若使用1.7版本,回放会有错误,这是jdk版本的问题。
操作完成之后,按F5或点击运行,进行脚本回放,实际此时也对数据库进行了操作,可以直接查询对应的表,检查功能是否正确。
三、执行性能测试
已经有了java
user的脚本,和普通web性能测试一样,设计场景、执行测试、收集报告、分析性能瓶颈即可。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。脚本实例:Loadrunner测试数据库、SQL语句性能 - msnshow的个人空间 - 51Testing软件测试网 51Testing软件测试网-中国软件测试人的精神家园
有正在从事web测试和APP测试工作或想从事此行业的测友们,欢迎与我联系,相互交流!测试交流微信公众号:gh_03e570cb5168
长期招聘不同级别测试工程师(WEB\APP\性能)有意者请与本人联系!
脚本实例:Loadrunner测试数据库、SQL语句性能
& 20:00:33
/ 个人分类:
此代码为 8 通过C API类型的Vuser 测试性能,或者测试语句性能的脚本。这东西很少有人用,网上资料很少,一般测试B/S的很多。view plaincopy to clipboardprint?Action()&&{&&&&&int db_ // 连接&&int query_ // 查询结果集 MYSQL_RES&&char** result_ // 查询的数据衕&&&&&char *server = "localhost";&&char *user = "root";&&char *password = "123456";&&char *database = "";&&int port = 3306;&&int unix_socket = NULL;&&&int flags = 0;&&&&&&// 找到libmysql.dll的所在位置.&&rc = lr_load_dll("C:\\Program Files\\MySQL\\MySQL
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 db_ // 数据库连接int query_ // 查询结果集 MYSQL_RESchar** result_ // 查询的数据衕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 直到返回NULLresult_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测试流程 的文章

 

随机推荐