如何用LR并发50个人同时注册?------注册环境Discuz论坛。
注意要点:
1.如果注册时用户名和邮件地址已经注册过,则无法注册成功。
2.要求50人同时注册,需要有集合点。
3.如何判定注册成功。
思路:
1.注册时不能用同样的数据,所以参数类型应该是唯一的。
2.集合点放在提交注册表单的事务前。
3.通过检查点,设置手工事务,判断是否注册成功。
具体实现步骤:
1. 录制单个用户脚本,然后将用户名和邮箱参数化,用VBS创建好10000个参数,参数类型设置唯一,且每次迭代取值。因为有50个Vuser,所以参数分组是200个一组,即每个Vuser有200个参数可以运行。
2. 在提交注册的表单前,插入事务。
3. 在事务前插入集合点。
4. 设置检查点,如果注册成功,会有提示信息,然后设置事务PASS,否则事务FAIL。
5. 设置Controller场景负载方式,负载时间,我设置的是10min。
6. 运行。
脚本如下
Action()
{
web_url("index.php",
"URL=http://localhost:8082/upload/index.php",
LAST);
//取出参数
lr_save_string(lr_eval_string("{parameter}"),"temp");
//设置集合点
lr_rendezvous("MyRendezous");
//开始事务
lr_start_transaction("MyTransaction");
//设置检查点,本来应该提示“感谢您注册Discuz! Board”,因不支持中文,去掉。
//如果找到Discuz!Board,返回个数给icount
web_reg_find("Search=ALL",
"SaveCount=icount",
"Text=Discuz! Board",
LAST);
//提交注册
web_submit_data("register.php",
"Action=http://localhost:8082/upload/register.php?regsubmit=yes&inajax=1",
"Method=POST",
"TargetFrame=",
"RecContentType=application/xml",
"Mode=HTML",
ITEMDATA,
"Name=formhash", "Value=326af2df", ENDITEM,
"Name=referer", "Value=http://localhost:8082/upload/index.php", ENDITEM,
"Name=handlekey", "Value=register", ENDITEM,
"Name=activationauth", "Value=", ENDITEM,
"Name=username","Value={temp}",ENDITEM,
"Name=password", "Value=111111", ENDITEM,
"Name=password2", "Value=111111", ENDITEM,
"Name=email", "Value={temp}@hello.com", ENDITEM,
"Name=regsubmit", "Value=提交", ENDITEM,
LAST);
//手工事务结束,0代表没有找到注册成功的提示
if(strcmp(lr_eval_string("{icount}"),"0")==0)
lr_end_transaction("MyTransaction", LR_FAIL);
else
lr_end_transaction("MyTransaction", LR_PASS);
web_url("return","URL=http://localhost:8082/upload",LAST);
}
总结:
我运行了10分钟,一共注册了2900个用户,一开始设置10000个用户有点多了,有这么多,是因为Vuser在负载的时候,不停的取200个一组里的参数。如第一个是1-200,那第二个就是201-400的参数。如果只有50个参数分给50个Vuser,每个Vuser只能有一个参数,那第一次注册后,后面的动作都是失败的。