软件测试:Lab 3 Jemter压力测试
Lab 3 Jemter压力测试
实验内容:
(1)整体目标:
安装虚拟机,并安装一套LAMP(Linux+Apache+Mysql+PHP)待测系统,推荐ECShop(http://www.ecshop.com),基于此进行Jmeter压力测试,并在测试后得出Jmeter测试报告,并根据sysstat得出Linux服务器的CIMN(CPU、IO、Memory以及Network)的性能。
(2)队员分工:
角色1:安装LAMP:Linux服务器(Centos)、Apache及PHP
角色2:安装MySQL及ECShop(或类似B/S结构的系统)
角色3:安装sysstat并使用sysstat查看Linux服务器的CIMN的性能
角色4:使用Jmeter进行5*10、50*20的压力测试并得出Jmeter Aggregate Report,同时运用sysstat对服务器信息进行统计。
(3)实验要求:
1. 基本要求:团队分工完成,实践压力测试工具Jmeter
2. 实验相关内容:
1) Linux下top命令结果截图
2) 访问的B/S系统截图
3) Jmeter的Testplan展开截图
4) Beanshell代码
5) 运行Jmeter测试之后的Aggregate Report Result
6) 运行Jmeter测试之后的服务器性能
实验过程:
目录:
准备工作及说明...................................................................................................
安装Apache2,PHP5.6,MySQL,ECShop,sysstat.......................................
1安装PHP5.6....................................................................................................
2安装Apache2................................................................................................
3安装MySQL...................................................................................................
4安装ECShop..................................................................................................
5安装sysstat....................................................................................................
安装Jmeter...................................................................................................
Jmeter压力测试实验步骤..................................................................................................
实验结果...............................................................................................................
1 Linux下top命令结果截图...........................................................................
2访问的B/S系统截图...................................................................................
3 Jmeter的Testplan展开截图.........................................................................
4 Beanshell代码.............................................................................................
5运行Jmeter测试之后的Aggregate Report Result........................................
6运行Jmeter测试之后的服务器性能
一、准备工作及说明
服务端机器:安装VMware workstation(版本不限),同时下载Ubuntu镜像文件,本次实验使用的是Ubuntu16.04。然后配置Apache2, PHP5, MySQL,再安装ECShop和sysstat作为服务器。
客户端机器:安装Jmeter,通过录制脚本然后访问服务器端搭建好的ECShop网站,在服务器端通过sysstat来查看服务器的性能。
二、安装Apache2,PHP5.6,MySQL,ECShop,sysstat
1. 安装PHP5.6
Ubuntu 16.04默认安装php7.0环境,但是php7目前兼容性并不是很好,如果自行安装php5需要清除php7的已安装包,否则会报错。
//移除默认及已安装的PHP包
sudo dpkg -l | grep php| awk
'{print $2}'
|tr
"\n"
" "
sudo apt-
get
install aptitude
sudo aptitude purge 'dpkg -l | grep php| awk
'{print $2}'
|tr
"\n"
" "'
//添加 PPA
sudo add-apt-repository ppa:ondrej/php
//安装php5.6
sudo apt-
get
update
sudo apt-
get
install php5.6
//安装扩展
sudo apt-
get
install php5.6-gd
sudo apt-
get
install php5.6-mysql
2. 安装Apache2
//安装Apache2
sudo apt install apache2
//整合一下php和Apache
sudo apt-
get
install libapache2-mod-php5.6
3. 安装MySQL
//安装MySQL,过程中会要求输入两次密码
sudo apt install mysql-server php5.6-mysql
sudo apt-
get
install mysql-client
//重启MySQL和Apache
sudo service mysql restart
sudo service apache2 restart
4. 安装ECShop
4.1打开Ubuntu里面的火狐浏览器,下载ECShop V2.7.3(下载地址:https://pan.baidu.com/s/1dDAJvZN)。点击图中的下载--->save files。
4.2下载后的zip在Downloads中,将其复制粘贴到Home下重命名为ECShop,使用命令 unzip ECShop 解压,然后将解压后的文件重命名为ECShop。
ECShop下有三个目录,分别是docs(ecshop的安装说明和介绍等),upgrade(升级包),upload(ecshop安装程序文件等)。
4.3使用命令 cd /var ;sudo chmod -R 777 www ,然后把ECShop拷贝到 computer/var/www/html 文件夹下,再把ECShop中的upload文件夹重命名为ecshop。
4.4命令行进入/var/www/html/ECShop/ecshop, 使用chmod修改如下目录及其所有子目录权限
a) data/ 目录及其所有子目录
b) temp/ 目录及其所有子目录
c) cert/ 目录及其所有子目录
d) includes/ 目录及其所有子目录
e) images/ 目录及其所有子目录
f) themes/ 目录及其所有子目录
4.5用Ubuntu自带的火狐浏览器访问 http://localhost/ECShop/ecshop ,出现如下安装界面,执行安装即可。
【--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
从上图看到不支持JPEG格式,解决办法:打开 /var/www/html/ECShop/ecshop/install/includes/lib_installer.php 文件,找到下图所示代码,把第六行的JPG改成JPEG即可。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------】
下图建议勾选 安装测试数据。
出现下图所示界面,说明安装成功。
4.6安装完成后,访问http://localhost/ECShop/ecshop 。
【问题解决】
(1)出现错误:Parse error:syntax error,unexpected 'endforeach'(T_ENDFOREACH) in /var/www/html/ECShop/ecshop/temp/compiled/vote.lbi.php on line 13.
解决方法:用chmod修改报错文件所在文件夹的权限。修改vote.lbi.php (建议在Windows上发邮件到Ubuntu里面,然后复制粘贴就好)。
(777 :每个人都有读和写以及执行的权限)
vote.lbi.php
<?php if ($this->_var['vote']): ?>
<?php echo $this->smarty_insert_scripts(array('files'=>'transport.js')); ?><div id="ECS_VOTE">
<div class="box"><div class="box_1"><h3><span><?php echo $this->_var['lang']['online_vote']; ?></span></h3><div class="boxCenterList"><form id="formvote" name="ECS_VOTEFORM" method="post" action="javascript:submit_vote()"><?php $_from = $this->_var['vote']; if (!is_array($_from) && !is_object($_from)) {settype($_from, 'array');
}; $this->push_vars('', 'title');if (count($_from)):foreach ($_from AS $this->_var['title']):
?><?php echo $this->_var['title']['vote_name']; ?><br />(<?php echo $this->_var['lang']['vote_times']; ?>:<?php echo $this->_var['title']['vote_count']; ?>)<br /><?php endforeach; endif; unset($_from); ?><?php $this->pop_vars();; ?><?php $_from = $this->_var['vote']; if (!is_array($_from) && !is_object($_from)) {settype($_from, 'array');
}; $this->push_vars('', 'title');if (count($_from)):foreach ($_from AS $this->_var['title']):
?><?php $_from = $this->_var['title']['options']; if (!is_array($_from) && !is_object($_from)) {settype($_from, 'array');
}; $this->push_vars('', 'item_0_30844800_1297167693');if (count($_from)):foreach ($_from AS $this->_var['item_0_30844800_1297167693']):
?><?php if ($this->_var['title']['can_multi'] == 0): ?><input type="checkbox" name="option_id" value="<?php echo $this->_var['item_0_30844800_1297167693']['option_id']; ?>" /><?php echo $this->_var['item_0_30844800_1297167693']['option_name']; ?> (<?php echo $this->_var['item_0_30844800_1297167693']['percent']; ?>%)<br /><?php else: ?><input type="radio" name="option_id" value="<?php echo $this->_var['item_0_30844800_1297167693']['option_id']; ?>" /><?php echo $this->_var['item_0_30844800_1297167693']['option_name']; ?> (<?php echo $this->_var['item_0_30844800_1297167693']['percent']; ?>%)<br /><?php endif; ?><?php endforeach; endif; unset($_from); ?><?php $this->pop_vars();; ?><input type="hidden" name="type" value="<?php echo $this->_var['title']['can_multi']; ?>" /><?php endforeach; endif; unset($_from); ?><?php $this->pop_vars();; ?><input type="hidden" name="id" value="<?php echo $this->_var['vote_id']; ?>" /><input type="submit" name="submit" style="border:none;" value="<?php echo $this->_var['lang']['submit']; ?>" class="bnt_bonus" /><input type="reset" style="border:none;" value="<?php echo $this->_var['lang']['reset']; ?>" class="bnt_blue" /></form></div></div>
</div>
</div>
<div class="blank5"></div>
<script type="text/javascript">/*** 处理用户的投票*/
function submit_vote()
{var frm = document.forms['ECS_VOTEFORM'];var type = frm.elements['type'].value;var vote_id = frm.elements['id'].value;var option_id = 0;if (frm.elements['option_id'].checked){option_id = frm.elements['option_id'].value;}else{for (i=0; i<frm.elements['option_id'].length; i++ ){if (frm.elements['option_id'][i].checked){option_id = (type == 0) ? option_id + "," + frm.elements['option_id'][i].value : frm.elements['option_id'][i].value;}}}if (option_id == 0){return;}else{Ajax.call('vote.php', 'vote=' + vote_id + '&options=' + option_id + "&type=" + type, voteResponse, 'POST', 'JSON');}}/*** 处理投票的反馈信息*/
function voteResponse(result)
{if (result.message.length > 0){alert(result.message);}if (result.error == 0){var layer = document.getElementById('ECS_VOTE');if (layer){layer.innerHTML = result.content;}}}</script>
<?php endif; ?>
(2)出现错误:Strict Standards: Only variables should be passed by reference in /var/www/html/ECShop/ecshop/includes/cls_template.php on line 422。
解决方法:打开 /var/www/ECShop/html/ecshop/includes/cls_template.php ,找到第422行,把$tag_sel = array_shift(explode(' ', $tag)); 改成
$tagArr = explode(' ', $tag);
$tag_sel = array_shift($tagArr);
【备注:后面出现Strict Standards这种类似的错误,都是这样拆成两条语句】
(3)出现错误:Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/html/ECShop/ecshop/includes/cls_template.php on line 300
解决方法:参考博客 https://www.cnblogs.com/yxhblogs/p/5886191.html ,该博客里面有一个错误,cls_template.php的493行应该换成:
$out
= "<?php \n
" . '$k = ' . preg_replace_callback("
/(\
'\\$[^,]+)/" , function($r) {return stripslashes(trim($r[1],'
\
''
));}, var_export(
$t
, true)) . ";\n";
(4)出现错误:顶部的报错没掉了,左侧和底部的报错还在。
解决方法:清除ecshop的后台缓存。
关闭SQL查询结果缓存:打开 in /var/www/html/ECShop/ecshop/includes/cls_template.php ,把最大缓存时间改为0或较小的时间。
关闭SMARTY的缓存:注释掉cls_template.php中下面的代码。
(ECshop清除缓存的参考网址:http://bbs.ecmoban.com/thread-20941-1-1.html)
(5)出现错误:Parse error:syntax error,unexpected 'endif'(T_ENDIF) in /var/www/html/ECShop/ecshop/temp/compiled/promotion_info.lbi.php on line 18.
解决方法:if 开始与结束语句不匹配,把promotion_info.lbi.php文件第18行的 <?php endif; ?> 改成 {/if} 即可。
【备注:(1)类似‘endif' 'foreach' 的语法错误是因为格式不匹配,可以都改成{if} {/if} 语句,或者都声明为php语句。
(2)可以注释掉所有的if 和 foreach (如:
5. 安装sysstat
//安装sysstat
sudo apt-get install sysstat
//查看sysstat是否安装成功
sar -v
//出现下图错误(下面的值23一般是当天的日期,此处测试时间为2018年4月23日)
//解决方法
sudo gedit /etc/default/sysstat , 将ENABLED="false"改为ENABLED="true"
sudo /etc/init.d/sysstat restart
//sysstat安装成功
三、安装Jmeter
下载apache-jmeter-2.11.zip(下载地址:https://archive.apache.org/dist/jmeter/binaries/ ),解压到文件夹即可。
直接打开解压后的文件 ./apache-jmeter-2.11/bin/jmeter.bat 即可打开Jmeter工具界面,注意有两个窗口,一个为命令行窗口,一个为GUI窗口,且使用过程中命令行窗口不可关闭。(建议将语言改成英文,选项选择语言即可)
【可能出现的问题】命令行窗口出现warning提示(也可以忽略)
1.
//警告原因:PermSize和MaxPermSize不需要配置了
//解决方法:注释掉PermSize和MaxPermSize的配置即可(建议忽略这个警告)
2.
//错误原因:java.util.prefs.WindowsPreferences需要保存信息到HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs
而不是HKEY_CURRENT_USER\Software\JavaSoft\Prefs。
//解决方法:win+R 输入regedit,运行进入注册表,创建HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs项(虽然Jmeter不会保存任何
东西到该项,仍会将信息保存到HKEY_LOCAL_MACHINE\Software\JavaSoft\Prefs)。
四、Jmeter压力测试实验步骤 (参考视频:https://www.imooc.com/learn/278)
【备注1】ecshop前台登录地址:ip地址/ECShop/ecshop ; 后台管理登录地址: ip地址/ECShop/ecshop/admin 。
【备注2】在进行测试之前,先注册一个前台登录账号,并登录。
为方便起见,可以先登录后台管理界面,进入后台管理/系统设置/会员注册项,将注册时的手机号、qq、msn、手机等改成非必填。
1) 打开apache-jmeter-2.11/bin/jmeter.bat ,右键Test Plan->Add->Threads(Users)->Thread Group ,并将新建的thread group命名为test ecshop。
2) 右键test ecshop,添加HTTP Request Defaults
3) 右键WorkBench,添加HTTP(s) Test Script Recorder 和Transaction Controller。
4) 右键Transaction Controller,添加HTTP Request Defaults和Recording Controller。
5) 点击workbench下面的HTTP(s) Test Script Recorder,修改各项如下:
6) 启动HTTP(s) Test Script Recorder,点击上图的start。打开火狐浏览器(建议是火狐浏览器),设置代理服务器。
7) 在火狐浏览器中访问http://192.168.174.128/ECShop/ecshop(已登录状态下,IP地址在Ubuntu中查看),并点击首页、GSM手机、任意点击一个商品。
8) 关闭HTTP(s) Test Script Recorder,点击stop即可,并关闭火狐的代理服务器。然后删除workbench->transaction controller中访问的相关标签,只留下下图中的三个,
分别是根目录,category.php , goods.php ,并把其复制到test ecshop中。
9) 右键test ecshop,添加User Defined Variables,并设置IP变量。然后将根目录,category.php , goods.php中的ip地址都用参数${IP} 表示。然后保存Test Plan到/bin/examples目录里面。
10) 右键test ecshop,添加CSV Data Set Config。然后去到bin目录下,新建data文件夹,在文件夹中新建catgd.csv文件;
并设置参数如下图,然后把根目录,category.php , goods.php中的相关id都用参数${catid} 和${gdid}表示。
cat.gd.csv:
11) 右键category.php,添加CSS/JQuery Extractor,并设置如下图:
12) 右键category.php,添加BeanShell Assertion,BeanShell代码如下图:
13) 右键test ecshop,添加Aggregate Report和View Results。
14) 设置test ecshop参数如下,进行压力测试。
5*10压力测试 :
Aggregate Report:
5*20压力测试同上。
15) 性能测试。
先clear一下,然后设置test ecshop为多个进程(保证测试时,系统进程不间断即可)。
打开Ubuntu,根据sysstat得出Linux服务器的CIMN(CPU、IO、Memory以及Network)的性能。
//查看CPU,每1秒查看一次,一共查看8次
sar -q 1 8
sar -u 1 8
//查看Memory
sar -r 1 8
//查看IO
sar -b 1 8
sar -n 1 8
//查看Network
sar -n SOCK 1 8
sar -n DEV 1 10
五、实验结果及截图
1) Linux下top命令结果截图
2) 访问的B/S系统截图
3) Jmeter的Testplan展开截图
4) Beanshell代码
java.util.regex.Pattern p = java.util.regex.Pattern.compile("id=(\\d+)");
java.util.regex.Matcher m = p.matcher(bsh.args[0]);
boolean found = m.find();
if (found) {if(!m.group(1).equals(bsh.args[1])) {Failure = true;FailureMessage = m.group(1) + "<>" + bsh.args[1];}
}
else failure=true;
5) 运行Jmeter测试之后的Aggregate Report Result
5*10压力测试:
5*20压力测试:
6) 运行Jmeter测试之后的服务器性能
top监控:
CPU:
【注释:上图是查看系统内进程队列的情况,runq-sz 表示准备运行的进程运行队列。】
【CPU:表示机器内所有的CPU;%user 表示CPU的利用率;
%nice 表示CPU在用户层优先级的百分比,0表示正常; %system 表示当系统运行时,在用户应用层上所占用的CPU百分比; %iowait 表示请求硬盘I/0数据流出时,所占用CPU的百分比; %idle 表示空闲CPU百分比,值越大系统负载越低;
上图可见idle值非常低,一般为90%以上,空闲CPU百分比明显偏低,可见压力测试已占用绝大多数得CPU资源。】
Memory:
【kbmemfree 空闲内存大小、kbmemused 使用内存大小、kbcached 缓存内存大小、
IO:
【bread/s: 每秒从硬盘读入系统缓冲区buffer的物理块数。
lread/s: 平均每秒从系统buffer读出的逻辑块数。
%rcache: 在buffer cache中进行逻辑读的百分比。
bwrit/s: 平均每秒从系统buffer向磁盘所写的物理块数。
lwrit/s: 平均每秒写到系统buffer逻辑块数。
%wcache: 在buffer cache中进行逻辑读的百分比。
pread/s: 平均每秒请求物理读的次数。
pwrit/s: 平均每秒请求物理写的次数。
可见每秒请求写得次数比一般时候要高,猜测是mysql得写入数据】
Network:
【IFACE:设备名;
rxpck/s:每秒收到的包;rxbyt/s:每秒收到的所有包的体积;txbyt/s:每秒传输的所有包的体积;rxcmp/s:每秒收到数据切割压缩的包总数;txcmp/s :每秒传输的数据切割压缩的包的总数;rxmcst/s: 每秒收到的多点传送的包; 如图可见每秒收到得包数量显著增加,网络吞吐量大。】
软件测试:Lab 3 Jemter压力测试相关推荐
- 软件测试技能,JMeter压力测试教程,监听器之每秒事务数与响应时间(十四)
目录:导读 前言 一.监听器之每秒事务数 1.Transactions per Second 2.监听器-jp@gc - Transactions per Second 二.监听器之响应时间 1.每秒 ...
- 如何做好软件压力测试,压力测试费用是多少
软件测试人员在进行压力测试时,要保证压力测试的准确性,他们通常有相应的测试工具.如果你想做好软件压测,需要哪些工具支持,需要多少钱,下面一航软件评测小编为大家讲解软件压测怎么做. 1.系统压力测试的方 ...
- 软件压力测试工具有哪些 企业如何做好压力测试工作?
随着人们对软件质量要求越来越重视,在软件项目正式交付之前都需要做软件压力测试,目的就是为了测试系统能够承载多大的压力,能承担多少的并发.如果不做软件压力测试工作,一旦出现大的访问量的时候,系统或者程序 ...
- 软件测试——性能测试、压力测试、负载测试等详解
软件测试--性能测试.压力测试.负载测试等详解 1. 总述 先看博客:性能测试.负载测试.压力测试 区别(博主的行文很清晰,很努力地在举例子). 压力测试.负载测试都是性能测试. 压力测试是一种破坏性 ...
- 压力测试软件 loadr,初学abench压力测试 - 玄大冰 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
51Testing软件测试网-e-np9S8o*W|pO+L0t [admin@dn128015 loadtest]$ ./abench1751Testing软件测试网'n c/]/J3L usage ...
- 南柯服务器压力,性能/负载/压力测试 - Mr.南柯 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
在面试测试人员的时候,这是一个很好的问题:你如何定义性能/负载/压力测试?在很多时候,人们都是将它们作为可互相替换的相同术语来使用,然而实际上他们之间的差异是比较大的.这个贴子是根据我自己的一些经验, ...
- 【软件测试教程】Jmeter接口测试+压力测试
jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单.因为jmeter是java开发的,所以运行的时候必须先要安 ...
- 软件测试员必知!压力测试总共需要几个步骤?思路总结篇
在运维工作中,压力测试是一项很重要的工作.比如在一个网站上线之前,能承受多大访问量.在大访问量情况下性能怎样,这些数据指标好坏将会直接影响用户体验.今天我们就来深入了解下压力测试! 首先, 什么是压力 ...
- jemter接口并发数怎么算_JMeter压力测试及并发量计算
原标题:JMeter压力测试及并发量计算 本文来自:51Testing软件测试网采编 一.聚合报告 初识聚合报告是不是有些眼熟,是的你没看错,他跟Apache AB的结果是类似的,事实上LoadRun ...
最新文章
- 5 Best User Interface Design Pattern Libraries
- Spring学习笔记--spring+mybatis集成
- Python朴素贝叶斯
- LeetCode 2151. 基于陈述统计最多好人数(状态压缩)
- 移动项目开发笔记(管理不同解决方案下的DLL文件相互引用之心得体会)
- Jenkins自动部署SpringCloud项目
- 18.高性能MySQL --- 大文件传输
- 映象劫持使部分程序不可运行的解决方法
- PCB寄生电容和寄生电感的计算
- 【综合】系统架构设计师考试经历分享
- Http gzip 处理
- 单芯片快速以太网MAC控制器DM9000介绍续
- os 通过pptt table得到cache信息
- 通过YUV空间调节图像的色度和饱和度
- 《AngularJS深度剖析与最佳实践》一1.3 创建项目
- [转]奇虎360黑匣子之谜:暗藏后门盗取用户隐私
- 【推荐】我的FLASH情结2010——浅谈FLASH WEB GAME与创业(3)
- 滴滴夜莺:从监控告警系统向运维平台演化
- html语言制作简单计算器,HTML自制计算器
- matlab安装包 知乎,知乎日报