zoukankan      html  css  js  c++  java
  • 软件测试: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 " " " "

         sudo apt-get install aptitude
         sudo aptitude purge 'dpkg -l | grep php| awk '{print $2}' |tr " " " "'
     
         //添加 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
     
                  【备注:如果已经安装了php7,建议卸载,如果实在卸载不了,那就重装Ubuntu,重头来过。】

           2. 安装Apache2         

         //安装Apache2
         sudo apt install apache2
         //整合一下php和Apache  
         sudo apt-get install libapache2-mod-php5.6
     
              打开Ubuntu火狐浏览器,输入http://localhost,出现如下界面,则Apache安装成功。
                
     

           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
                   
                Apache,php,MySQL安装全部完成。
     
             【备注】Apache,php和MySQL 的目录为  computer/etc/  。同时查看php版本,可以通过 php5.6 -v 命令。
                         
     

           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 " . '$k = ' . preg_replace_callback("/('\$[^,]+)/" , function($r) {return stripslashes(trim($r[1],'''));}, var_export($t, true)) . "; ";

     

               (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_MACHINESoftwareJavaSoftPrefs

                                  而不是HKEY_CURRENT_USERSoftwareJavaSoftPrefs。

              //解决方法:win+R 输入regedit,运行进入注册表,创建HKEY_LOCAL_MACHINESoftwareJavaSoftPrefs项(虽然Jmeter不会保存任何

                                  东西到该项,仍会将信息保存到HKEY_LOCAL_MACHINESoftwareJavaSoftPrefs)。

                                   

    四、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  缓存内存大小、 

                 kbbuffers:内核中作为缓存区使用的物理内存容量 
                 kbcached:内核中作为缓存使用的物理内存容量 
                 kbswpfree:交换区的空闲容量 
                 kbswpused:使用中的交换区容量 
                 相比于平常时候的值,kbmemused, memused%和kbdirty的值显著偏大,显然是内存得使用率比平常要高而且存在着页面交换。

               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: 每秒收到的多点传送的包;
    如图可见每秒收到得包数量显著增加,网络吞吐量大。】

               

  • 相关阅读:
    UniConnector平台
    UniConnector平台
    UniChat 社交IM 集成环信
    移动办公OA App 工作流审批
    netcore 部署Docker
    .net core 腾讯短信发送
    Linux error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol
    Linux nginx 自启动
    Linux 配置、问题
    Swagger自定义默认首页
  • 原文地址:https://www.cnblogs.com/meiqin970126/p/8888723.html
Copyright © 2011-2022 走看看