bustersword 发表于 2011-5-4 15:04:12

本帖最后由 bustersword 于 2011-5-4 15:05 编辑

100Vuser*15条数据一次性加载100VUser

顺带说下,这三次测试,我都在登录完后设置了集合点



Analysis SummaryPeriod: 04-05-2011 12:49:28 - 04-05-2011 12:54:32


Scenario Name:Scenario1
Results in Session:d:\res\res\res.lrr
Duration:5 minutes and 4 seconds.


Statistics Summary


Maximum Running Vusers:100
Total Throughput (bytes):173,669,703
Average Throughput (bytes/second):569,409
Total Hits:11,493
Average Hits per Second:37.682View HTTP Responses Summary


Transaction Summary


Transactions:Total Passed: 3,586Total Failed: 14Total Stopped: 0         Average Response Time


Transaction NameMinimumAverageMaximumStd. Deviation90 PercentPassFailStop
Action_Transaction10.38620.05138.0515.527.60110000
login0.1851.1732.4060.5881.98210000
loginout0.0010.0040.0410.0060.01310000
outInput0.0050.3424.5640.6260.34110000
save12.1285.89120.4492.959.43110000
save20.1547.22937.6653.2868.6271,39370
SavePicSingle_Transaction0.1547.22937.6653.2868.6271,39370
startInput0.89210.31416.3473.45512.63610000
vuser_end_Transaction0.0060.3464.5660.6250.34310000
vuser_init_Transaction0.3441.3512.4350.5552.01210000
file:///C:/Documents%20and%20Settings/Administrator/%E6%A1%8C%E9%9D%A2/15%E4%B9%98100%E7%94%A8%E6%88%B7-%E7%BB%93%E6%9E%9C%E5%88%86%E6%9E%90-2011-5-4/15%E4%B9%98100%E7%94%A8%E6%88%B7-%E7%BB%93%E6%9E%9C%E5%88%86%E6%9E%90-2011-5-4/dot_trans.gif


HTTP Responses Summary


HTTP ResponsesTotalPer second
HTTP_20011,29337.026
HTTP_3022000.656
file:///C:/Documents%20and%20Settings/Administrator/%E6%A1%8C%E9%9D%A2/15%E4%B9%98100%E7%94%A8%E6%88%B7-%E7%BB%93%E6%9E%9C%E5%88%86%E6%9E%90-2011-5-4/15%E4%B9%98100%E7%94%A8%E6%88%B7-%E7%BB%93%E6%9E%9C%E5%88%86%E6%9E%90-2011-5-4/dot_trans.gif



file:///C:/Documents%20and%20Settings/Administrator/%E6%A1%8C%E9%9D%A2/15%E4%B9%98100%E7%94%A8%E6%88%B7-%E7%BB%93%E6%9E%9C%E5%88%86%E6%9E%90-2011-5-4/15%E4%B9%98100%E7%94%A8%E6%88%B7-%E7%BB%93%E6%9E%9C%E5%88%86%E6%9E%90-2011-5-4/dot_trans.gif


Filters: (do not Include Think Time)




file:///C:/Documents%20and%20Settings/Administrator/%E6%A1%8C%E9%9D%A2/15%E4%B9%98100%E7%94%A8%E6%88%B7-%E7%BB%93%E6%9E%9C%E5%88%86%E6%9E%90-2011-5-4/15%E4%B9%98100%E7%94%A8%E6%88%B7-%E7%BB%93%E6%9E%9C%E5%88%86%E6%9E%90-2011-5-4/dot_trans.gif


bustersword 发表于 2011-5-4 15:10:56

三次的TPS是
11.18

11.191

11.757

现在我不会出现大量丢失数据的情况,但是少量的fail,算不算测试中的正常情况呢?
再者,我现在系统的TPS是不是也到瓶颈了?

我又测试了缓慢加载用户的场景,TPS都差不多,200用户每10S增加5Vuser的场景,fail的次数就多点40左右,TPS11.497 ,最大 运行用户120
实际中,200用户同时去处理,会怎么样呢?

giftoflife 发表于 2011-5-4 15:35:25

场景运行过程中有错误么?是哪些呢?

bustersword 发表于 2011-5-4 15:54:42

运行中的错误都是关联没有找到匹配的错误 ,我想应该是页面来不及响应,所有也就来不及匹配了...

giftoflife 发表于 2011-5-4 16:05:20

数据库和服务器的性能检测呢?

bustersword 发表于 2011-5-4 16:15:57

数据库没检测.....服务器是IIS的,运行的时候cpu使用率蛮高的。。。。。具体数据没保留................

bustersword 发表于 2011-5-4 16:39:25

三次的TPS是
11.18

11.191

11.757

现在我不会出现大量丢失数据的情况,但是少量的fail,算不算测 ...
bustersword 发表于 2011-5-4 15:10 http://bbs.51testing.com/images/common/back.gif

这些问题,根据现有数据,或者你的经验,谁来回答下....3Q

qingyi0711 发表于 2011-5-4 22:13:38

时间是否设置的够呢??500个并发,每个并发迭代15次,每次迭代的时间算好后,再计算500并发的时间,估计得跑一段时间吧.......

sherryshi 发表于 2011-5-5 10:48:41

借楼主热帖问下,什么情况下设置思考时间,什么情况下不设置思考时间?另外这个思考时间指的是什么呢?

sherryshi 发表于 2011-5-5 10:50:37

再问个问题,如何排除应用服务器和程序,只对数据进行压力测试。这样的测试如何进行呢。我现在在做一个系统的压力测试,不知道怎么分析到底是程序问题,中间件问题,还是数据库问题?

bustersword 发表于 2011-5-5 17:29:16

我今天又测试了100用户*100数据,也就是一共插入10000条数据,丢失4条数据,但是保存数据的响应时间竟然达到了10S左右,我了个去......50用户插入750条数据,倒是3S内,现在至于要根据这些结果,让我去改程序,或者服务器,数据库,我还真是有点迷茫了..........天啊!
怎么搞负载均衡,什么分布式缓存,神马神马啊!
疯了

sherryshi 发表于 2011-5-5 17:47:19

我今天又测试了100用户*100数据,也就是一共插入10000条数据,丢失4条数据,但是保存数据的响应时间竟然达到 ...
bustersword 发表于 2011-5-5 17:29 http://bbs.51testing.com/images/common/back.gif


    你已经很厉害了,呵呵

我更加迷茫,现在有一个功能点在多并发的情况下速度很慢,让我分析原因,是程序还是服务器还是数据库。姐姐我不知道怎么弄啊,分析不来呀,压力做了又做????

bustersword 发表于 2011-5-5 18:06:08

我真的很不厉害............是菜鸟,我现在是完全找不到东南西北

bustersword 发表于 2011-5-5 18:11:18

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, "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, "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;
}
/*需要的表结构如下
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; // 数据库连接
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;

bustersword 发表于 2011-5-5 18:11:24

// 找到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, "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, "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;
}


我想知道上面这段连接mysql测试的前提环境配置----------------------------------求解

bustersword 发表于 2011-5-6 13:46:15

顶下,等待高手

sherryshi 发表于 2011-5-6 15:45:13

恩,也顶一记,等待高人

wuwoyiran 发表于 2011-5-6 17:16:46

学习了

bustersword 发表于 2011-5-9 10:24:09

.....我想知道怎么解决服务器响应慢的问题。优化SQL语句,优化页面,and???????

sherryshi 发表于 2011-5-9 13:23:18

.....我想知道怎么解决服务器响应慢的问题。优化SQL语句,优化页面,and???????
bustersword 发表于 2011-5-9 10:24 http://bbs.51testing.com/images/common/back.gif


    应该找出原因吧,我现在就急于求教如何分析是哪部分原因造成的
页: 1 [2] 3
查看完整版本: 虚拟500个用户同时对数据库进行插入操作,每个用户循环插入30条数据。该怎么设计呢