JMeter如何控制业务比例进行性能测试

一、背景介绍 一直困惑网上的关于JMeter控制业务比例的思想,链接为https://www.jianshu.com/p/db092cbcceb1,今天琢磨到凌晨两点,终于解惑。 假设要测试一个电商网站的性能, 在实际的场景中,有四个业务分别是查看积分明细、查看首页广告、浏览商品详情、浏览商品评价,业务使用比例为1:3:5:6,如何使用JMeter来模拟实现? 二、实现过程 当然新建四个线程组,分别对应四个业务,按照既定比例设定线程数的方式不可行,因为业务的响应时间不可能一致。 我们用另外一种方式来实现。 既定的比例加起来和为15,我们可以把JMeter的运行次数与15取余,前15次取余值的范围落在下面四个范围(这里要用到JMeter的元件IF控制器): {1} {2 3 4} {5 6 7 8 9} {10 11 12 13 14 15}    16 17 18 19 …… 假设四个业务分别对应的业务代码是D、C、B、A,则对应业务的控制逻辑如下, A  ${__counter(true,)}%15<1 B  ${__counter(true,)}%15<=4 && ${__counter(true,)}%15>1 C  ${__counter(true,)}%15>4 && ${__counter(true,)}%15<=9 D  ${__counter(true,)}%15>9 && ${__counter(true,)}%15<==0 大于15的运行次数也可以以这种方式类推,进行比例划分。 1  查看积分明细的业务比例在JMeter中设置为${__counter(true,)}%15<1,如下图, 2  查看首页广告的业务比例设置为${__counter(true,)}%15<=4 && ${__counter(true,)}%15>1,如下图, 3  浏览商品详情的业务比例设置为${__counter(true,)}%15>4 && ${__counter(true,)}%15<=9,如下图, 4 …

Continue Reading

Fiddler代理FireFox浏览器

一、背景介绍 一直用Fiddler抓取Chrome浏览器的HTTP包,因为不用任何设置就可以。于是有个疑问,如果一些应用只能在Firefox浏览器上才能运行或者在Firefox浏览器表现的效果较好,那怎么调试? bing了下找出了答案。 二、实现过程 1  设置Firefox代理 打开Firefox的选项–常规–网络代理–设置,选择“手动代理配置”,所填参数如下图, 其他版本的Firefox请举一反三。 2  设置fiddler代理 fiddler的代理主要是配置一个和本地不冲突的端口来监听外来请求。 设置好以后,可以用别的机器,亦可以本地联网经过fiddler代理,配置好后的fiddler抓包如下(远程抓包),

Continue Reading

自动检测网站健康shell脚本

一、背景介绍 我的WordPress网站最近老是宕机无法提供服务,网站架构是经典的 Linux + OpenResty + MySQL + PHP , 宕机后大多数情况下不能立即处理,于是想写个自动检测网站健康的shell脚本,主要功能是定时检测网站运行是否正常,如果宕机,则自动初始化MySQL和PHP服务,如果初始化后还不能访问,则邮件告警通知我。 二、实现过程 1  编写脚本 脚本的内容如下,目前运行十来天左右还算正常。 #!/bin/bash #Author:Attaboy #Description:this script is made to check website health and roll back automattically. # Modify history #       20171122 #       20171130 dst_mail="[email protected]" mail_title="Linode Website Health Report" mail_content="\nOops,Your website is still out of service after initiating!\n\n$(iptables -vnL)\n\n\n$(netstat -nltp)\n\n" free_mem=$(free -m |…

Continue Reading

Nginx吞吐量实测

传说中的Nginx吞吐量性能到底如何,小弟这里献丑测试一番。 一、测试准备 1  硬件 1)DELL 2U 服务器  被测对象 CPU : Intel(R) Xeon(R) CPU           X5650  @ 2.67GHz  12核24线程 MEM : 64G 2) 自用PC机  压力机  CPU : Intel(R) Xeon(R) CPU E3-1230 V2 @ 3.30GHz  4核8线程 MEM : 16G 2  软件 1) DELL 2U 服务器  被测对象 IP:172.17.1.170 web server : openresty 2)  自用PC机  压力机  压力测试工具:ab 3  一些设定 1)…

Continue Reading

双VPS增量备份实践

一、背景介绍     本人有两个vps,一个linode,一个阿里云,其中linode是本博客所在主机,很多资料需要定期备份。恰好阿里云的磁盘够大,整个linode主机磁盘拷贝进去也有富余,于是简单做个增量备份的shell脚本。 在这里献丑了。 二、配置过程 1  配置两个vps的ssh免密码登录 2  两个vps均安装rsync     yum install -y rsync 3  编写备份脚本 备份脚本的内容如下, #!/bin/bash   #  this script is made to automatically backup data of host linode #  Author:Attaboy #  Modify history: #       2017.11.11 #       2017.11.14  add local backup function #       2017.11.17  do not print debug info to log file when…

Continue Reading

sed删除不包含指定单词的行

问题:有个文件名为file,内容如下,   ACCTWARROOM.JFJ_JSPFP_FILL T accTwarRoom.uut_jjfJ_JJJF_OWPERP   ACC T ACCTWARROOM.JJ_POLL_JIM L TTT acctwarroom.jj_pq_jjjj_ppp t aipindictment 要求:删除不包含单词acctwarroom的行(不区分单词的大小写) ———————————————————————————————————————– 答案:   方法1  先将所有字母的小写转换为大写格式,再打印包含指定单词的行。   [pc@iZj6cj7qz0pp3b2plfmewiZ ~]$ sed -n  -e ‘s@[a-z]@\u&@g ; /ACCTWARROOM/p' file ACCTWARROOM.JFJ_JSPFP_FILL T ACCTWARROOM.UUT_JJFJ_JJJF_OWPERP   T ACCTWARROOM.JJ_POLL_JIM L ACCTWARROOM.JJ_PQ_JJJJ_PPP T   方法2  先将所有字母转为小写,再删除不包含指定单词的行   [pc@iZj6cj7qz0pp3b2plfmewiZ ~]$ cat file | sed -e ‘s@[A-Z]@\l&@g ; /\<acctwarroom\>/ !d' acctwarroom.jfj_jspfp_fill t…

Continue Reading

Linux中转换字符串大小写的姿势

在数据处理中肯定会遇到大小写的转换,下面说说Linux中转换字符串大小写的几种方式。 1  AWK awk是强大的报告生成器,其很多内置函数很有用,比如tolower和toupper就是处理大小写的,用命令说话,如下, PS:gawk才支持大小写的转换函数tolower和toupper。 2  tr tr是专门处理字符串的神器,话不多说,如下图, 3 tr tr命令还有一种方法转换大小写。 3  sed sed作为古老的流编辑器,仍然是一把文本处理的利剑。 将每个单词的首字母变为大写,如图, 将所有小写转换为大写,如图, 将所有大写转换为小写,如图,   关于sed的这个用法我还是头一次看见,有兴趣的朋友可以在shell下运行info sed查看解释,大致如下,   3.5 The `s' Command =================== The syntax of the `s' (as in substitute) command is `s/REGEXP/REPLACEMENT/FLAGS'.  The `/' characters may be uniformly replaced by any other single character within any given `s' command. The…

Continue Reading

自用PC增量备份Shell脚本

最近自己的PC硬盘里丢了个重要文件,应该是我误删除的,所以提醒大家千万别乱删文件,就算删除也要备份一俩月。于是一怒之下写了个shell脚本,专门用于备份重要文件的,主要是通过rsync这个强大的同步工具实现,脚本里也使用了函数创建和调用,具体内容如下, #!/bin/bash   #  this script is made to automatically backup data of host S5 #  Author:Attaboy #  history: #       2016.06.28 #       2016.07.03 #       2016.07.14 #       2017.09.02 #       2017.09.04 #       2017.09.14 #       2017.09.17 #       2017.11.04  anotate bak_node_3 function #       2017.11.07  allow bak_node_3 function #       2017.11.11  allow bak_node_4 function #       2017.11.12  add code to start DELL…

Continue Reading

sed删除指定字符开头的行的上一行的指定字符

最近在学习Oracle11g数据库时,需要将MySQL数据插入脚本转换成Oracle脚本,以在Oracle数据库中新建表和插入数据,方便练习。可是MySQL脚本太大,普通文本编辑器无法处理(7个G),于是用Linux下的sed老牌流编辑器,在我的DELL R710服务器上来做。 其中,有一段SQL脚本内容如下, 20000110119', '2016-02-04 02:00:01', '2016-02-04 02:00:00', '1200.00', '超时未领完'); INSERT INTO bonusreturnorder VALUES ('50', '254', '697', '2', '1', 'WX20160203085132174280', 'HBTK20160204020001045349', '2016-02-04 02:00:02', '2016-02-04 02:00:01', '600.00', '超时未领完'); — BONUSID number(11) , DELETEFLAG number(2) , TYPE number(2) , ); CREATE TABLE bonususer ( — SENDUSERID number(11) , SENDUSERNAME varchar2(32) , BONUSTICKETNO varchar2(32) , ); INSERT INTO…

Continue Reading

Nginx接口桩测试

    少数情况下,我们要模拟第三方接口来测试我们自己项目的程序,比如,迅雷快鸟公司和电信合作,电信的接口发布滞后迅雷一周,电信发布接口前,测试人员很闲,浪费了时间,而发布后工作量剧增,所以如果能提前拿到电信方的接口标准文档,模拟其既定的接口,就可以充分利用时间,提高发布质量。     主要实现的方式就是在Nginx端模拟静态文件发布,静态文件包含接口返回的信息,比如状态码等,这时候可以联合本项目其他模块进行集成测试。       静态发布文件,在Nginx服务端配置也非常简单,如下,       location /test {             root /tmp;             index interface;     }   interface 是/tmp目录下的一个文件,内容可以是你的接口要返回的东西,比如一个字符串  {"id"=89990,"sid"=0099}     在浏览器端输入    http://domainname/test/interface  即可模拟返回interface里面的内容。  

Continue Reading