为了账号安全,请及时绑定邮箱和手机立即绑定

Jmeter+Shell,20分钟部署一整天的性能测试任务

前几天接到一个性能测试任务,要求对语音识别服务进行性能测试。当拿到任务列表时,眼前的一幕...

https://img1.sycdn.imooc.com//5d319e800001243803110352.jpg

 没错,就是这样的,要对5种长度的音频,分别在3种不同并发数下进行测试,每一小项要测试15分钟的时间。简单数了数,一共有15项,加上每组之间的间隔时间(考虑到前一项测试可能在服务端存在短暂排队的情况,以及为了便于后期统计服务器资源占用情况,应该至少间隔1-2分钟),那就是要4个小时左右,半天时间应该能测完。

      等等,还没完,把列表继续向下拉,惊喜地发现原来测试范围是4个语种(中、英、日、韩),每个语种的要求都是一样的。由于要测完整服务的性能,除了解码器外,还涉及到其他的一些层面,每个语种、每种长度音频、每种并发数都只能分开进行。于是,一个共计60项、长达16个小时的测试任务就这么到手了。

https://img1.sycdn.imooc.com//5d319ef70001f75d02650139.jpg

 这么多项的测试,如果每一项都手动进行,要耗费很大的精力,而且每隔15分钟左右开始新的一项测试,中间的间隔时间很难把控,会花费更多的时间,那就不是16个小时能测完的了。仔细观察,其实这些小项中很多步骤都是相同的,只是分组数量很多,不免让人想寻求一些简单方便的测试方法,可以让整个测试自动进行。这时我们的测试工具Jmeter以及Linux系统下的Shell就可以发挥作用了。

      下面,就来分享两种简单的方法,让我们可以花20分钟时间就部署好这16个小时的测试。

 在Jmeter(5.1.1)线程组设置的下面有一个Scheduler(调度器),其中包含两个参数:Duration(持续时间)和Startup delay(启动延迟)。Duration这个参数我们平常用得比较多,可以用于限定测试的持续时间。而另一个Startup delay参数在本次性能测试中可以起到关键作用。先来看看有关这个参数的介绍。

Startup Delay表示从当前时刻开始延迟多长时间开始运行

        我们可以一次性创建每一项测试所需的Jmeter脚本(这个步骤看似复杂,实际操作起来比较容易,因为脚本主体内容相同,直接大量复制粘贴,对于每项不同的参数修改替换即可,快的话10-20分钟就能搞定全部60个脚本),并为这些脚本设置不同的Startup delay,比如第一个脚本设置0(直接启动),第二个脚本设置1000(单位为s),第三个设置2000,依此类推。

https://img1.sycdn.imooc.com//5d319ff700018b4806420137.jpg

      由于要放到linux环境下运行,脚本中路径的设置需要注意(我这里设置的是绝对路径,为了方便的话也可以设置为相对路径),保存log时最好利用Jmeter的__time函数按时间来命名,方便进行区分,也方便观察各项测试的开始时间。

https://img1.sycdn.imooc.com//5d319fe70001930d07510056.jpg

      将这些脚本统统放入linux下的测试目录中,直接一个一个依次启动就可以了(可以使用nohup+&方式一并扔到后台去执行)。这样启动的话还是略显麻烦,而且几十个脚本的启动也比较费时间,为了简化操作,我们还可以创建sh脚本,将启动命令全部放进去一次性执行,做到真正的“秒起”。sh脚本的内容大致如下,依然只需要一些复制粘贴的时间。

    https://img1.sycdn.imooc.com//5d319fa50001604005070201.jpg

  将上述命令保存为.sh脚本文件(比如test.sh),只需一个命令


./test.sh

     全部测试任务开启,OK,可以直接期待十几个小时以后的测试结果了。


方法二

利用Linux Shell的sleep命令

https://img1.sycdn.imooc.com//5d31a0390001604005070201.jpg

      在方法一中,我们在创建每个脚本时都要为他们添加不同的Startup delay,几十个脚本下来也还是会产生几分钟工作量的,不免有些烦躁。于是,这里我们也可以用另一种方式来起到完全相同的作用——直接在sh脚本中添加启动延迟。

       在这种方法下,我们在创建Jmeter脚本时无需再设置Startup delay参数,只需稍微修改方法一中的sh脚本,添加sleep命令。

      嗯,又是熟悉的复制粘贴操作。sleep 17m表示等待17分钟后再继续执行下一条命令。

       同样保存为test.sh,执行./test.sh,可以与方法一获得相似的效果。

 通过本文介绍的方法,可以以较少的准备时间来完成大量的工作,对于此类数量较多而流程相似的测试任务有一定借鉴意义。


点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消