操作系统:Windows
Web服务器软件:Apache
运行环境:PHP
Web应用:phpwind
数据库:MySQL
phpwind的访问地址如下:
http://192.168.0.153:8090/phpwind/index.php
使用10个线程同时发帖,持续时间5分钟,测试下服务器的平均响应时间是多少?成功多少?失败多少?
1)录制发帖的LR脚本
2)修改LR脚本(设置cookies,添加集合点,添加事务,文本检查,参数化)
3)调试LR脚本(确保回放成功)
4)创建并设计性能测试的场景
5)运行性能测试
6)测试报告
1)非登录状态下,用户(游客)是没有权限发帖的。服务器返回的登录验证码(动态)是图片,不是文本,无法使用LR的关联技术进行关联。可以使用cookie绕过登录,欺骗服务器,让服务器认为用户已经登录进来,然后发帖。
2)先缓存cookie数据(目的:后面发请求时,会自动发送这些cookie数据,服务器就会认为用户已经登录)
web_add_cookie("Bzi_winduser=msL4udGA%2BPNSm7bGPAdLhpDKMwseQABD2Z6iMxwPN%2FrtT65uQOO6cw%3D%3D;DOMAIN=192.168.0.153");
…
3)使用web_submit_data函数发送数据给服务器(发送请求)(模拟发帖)
4)帖子的内容不能重复,否则会被phpwind网站屏蔽,可以使用随机生成的字符串作为帖子的内容。
5)我们在性能测试项目中,遇到事务与集合点放置顺序问题时,需要将集合点插在开始事务之前。
###设计性能测试的LR脚本
LR脚本的代码如下:
Action()
{
char subject[11]="";//保存帖子的标题
char content[101]="";//保存帖子的内容
char arr[]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
int i;
int index;
//生成一个随机的字符串(10个字符)
for(i=0;i<10;i++){
index=rand()%62;//得到一个0~61之间的随机整数
strncat(subject,arr+index,1);//将arr字符串index位置开始的1个字符添加到目标字符串subject的后面
}
lr_log_message("帖子的标题是:%s",subject);
//将subject变量的内容保存到参数subject里面
lr_save_string(subject,"subject");
//生成一个随机的字符串(100个字符)
for(i=0;i<100;i++){
index=rand()%62;
strncat(content,arr+index,1);
}
lr_log_message("帖子的内容是:%s",content);
//将content变量的内容保存到参数content里面
lr_save_string(content,"content");
web_add_cookie("csrf_token=e4233250ddbbd331; DOMAIN=192.168.0.153");
web_add_cookie("PHPSESSID=eaqejk6kcaqj3mtklv5pnv64b1; DOMAIN=192.168.0.153");
web_add_cookie("Bzi_winduser=hcUEN%2B3i2IZqpSSFne3zHlq7fDwr%2FEPnZWxN76AatVoIJ9dbCK0LFA%3D%3D; DOMAIN=192.168.0.153");
lr_rendezvous("同时发送");
lr_start_transaction("发帖");
//设置请求的类型为异步请求
web_add_header("X-Requested-With",
"XMLHttpRequest");
//设置接收数据的格式为JSON
web_add_header("Accept",
"application/json, text/javascript, */*; q=0.01");
//提交帖子
web_submit_data("index.php_7",
"Action=http://192.168.0.153:8090/phpwind/index.php?c=post&a=doadd&_json=1&fid=2",
"Method=POST",
"EncType=multipart/form-data",
"RecContentType=text/html",
"Referer=http://192.168.0.153:8090/phpwind/index.php?c=post&fid=2",
"Snapshot=t12.inf",
"Mode=HTML",
ITEMDATA,
"Name=atc_title", "Value={subject}", ENDITEM,
"Name=atc_content", "Value={content}\n[img]{url}[/img]", ENDITEM,
"Name=pid", "Value=", ENDITEM,
"Name=tid", "Value=", ENDITEM,
"Name=special", "Value=default", ENDITEM,
"Name=reply_notice", "Value=1", ENDITEM,
"Name=csrf_token", "Value=e4233250ddbbd331", ENDITEM,
LAST);
//验证发帖是否成功
web_find("web_find",
"What=\"state\":\"success\"",
LAST);
lr_end_transaction("发帖", LR_AUTO);
return 0;
}
虚拟用户数量: 10
迭代发帖(持续)时间: 5 min
发帖事务的平均响应时间: 5.321 s
发帖成功数: 258
发帖失败数: 10
失败的原因: 内容重复
测试主机 | cpu平均占用率 | 内存平均占用率 | 磁盘平均读写效率 |
---|---|---|---|
Apache服务器 | N/A | N/A | N/A |
MySQL服务器 | N/A | N/A | N/A |
分析:
虽然帖子的内容是随机的,但是这些虚拟用户每次并发提交的内容其实是一样的。
另外,并发的情况下,即使帖子的内容重复也可以提交成功。
用户的等级已经是精灵王
查看帖子的内容
[01] LoadRunner12安装教程
https://blog.csdn.net/weixin_41585557/article/details/85049457
[02] LoadRunner关联详解
https://blog.csdn.net/u011446864/article/details/38395975
[03] LoadRunner12.02参数化与关联以及中文乱码的解决
https://blog.csdn.net/qq_26718241/article/details/80535333
[04] LoadRunner参数化详解
https://www.cnblogs.com/fnng/archive/2012/06/22/2558900.html
[05] LoadRunner中事务和集合点的放置顺序问题
http://blog.sina.com.cn/s/blog_49e4019f0102vxv5.html
[06] LoadRunner中的时间处理- 响应时间、事务时间、消耗时间等
https://blog.csdn.net/ivyweimiao/article/details/81535120
[07] 事务时间如何去掉wasted time
http://www.cnblogs.com/qmfsun/p/4523150.html
[08] Loadrunner如何进行有效的IP欺骗
https://www.cnblogs.com/liulinghua90/p/9202991.html
[09] 一般台式机用loadrunner最多可以跑多少个虚拟用户
https://www.imooc.com/wenda/detail/395879
[10] Page Download Time Breakdown选项详解
https://blog.csdn.net/lhl_lhl_lhl/article/details/42611969
[11] 页面下载时间分解
https://www.cnblogs.com/littlecat15/p/9456376.html
[12] 如何利用loadrunner12录制app脚本
https://www.cnblogs.com/software-tester/p/8491679.html
[13] LoadRunner函数
http://blog.sina.com.cn/s/blog_93cfcfff0102wwa4.html
[14] nmon的安装及使用
https://www.cnblogs.com/mululu/p/6398483.html
[15] 一篇文章学会使用 nmon
https://www.sohu.com/a/219012698_151779
微信扫一扫关注公众号
点击链接加入群聊
https://jq.qq.com/?_wv=1027&k=5eVEhfN
软件测试学习交流QQ群号:511619105