云智慧压测实战分享之JMeter脚本录制实例

在前面的《云智慧压测实战分享之JMeter工具使用初探》中我们对JMeter的功能特点和常用元件做了简单介绍,接下来说说JMeter的脚本录制。JMeter有多种录制脚本方法,其中最常见的是通过第三方工具Badboy录制,另外还有JMeter自身设置(Http代理服务器+IE浏览器设置)来录制脚本,下面以压测宝为例来介绍下Badboy脚本录制过程。

  注:使用JMeter的代理或是Badboy进行录制的时候,操作不能太快,不然容易造成录制失败。

  1、打开Badboy工具,在地址栏目中输入被测试项目的地址。注意:Badboy启动默认是录制状态,为红色按钮,如图:

  录制完成后点击工具栏旁边黑色按钮,结束录制。

  2、选择“文件”--Export to JMeter…

  3、打开JMeter工具,选择“文件”-->“打开”选择刚才保存的文件(.jmx类型),将文件导入进来了。

  录制的脚本一定要添加HTTP Cookie Manager,否则脚本运行失败。

  对于JMeter来说,一个测试计划只能有一个Cookie管理器,因为当多个Manager存在时,JMeter没有方法来指定使用哪个Manager,同时一个Cookie Manager中存储的Cookie也不能被其他Cookie Manager所引用,所以同一个测试计划中不建议使用多个Cookie Manager。

  JMeter压测实例

  下面我们用几个JMeter压测实例来熟悉一下JMeter的使用。

  1、使用JMeter进行http接口测试

  Jmter工具设计之初是用于性能测试的,它在实现对各种接口的调用方面已经比较成熟,因此可直接使用JMeter工具来完成对Http接口的测试。

  1)、开发接口测试案例的整体方案:

  • 第一步:我们要分析出测试需求,并拿到开发提供的接口说明文档;

  • 第二步:从接口说明文档中整理出接口测试案例,里面要包括详细的入参和出参数据以及明确的格式和检查点。

  • 第三步:和开发一起对接口测试案例进行评审。

  • 第四步:结合开发库,准备接口测试案例中的入参数据和出参数据,并整理成csv格式的文件。

  • 第五步:结合接口测试案例文档和csv格式的数据文档,做接口测试案例的自动化案例开发。

  2)、接口自动化适用场景:

  目前设计的自动化接口测试案例有两个运行场景:

  a. 测试前置、开发自测:一个新的自动化接口测试案例开发完成后,直接发给接口对应的开发,安排在开发本地环境执行,一旦开发确认完成接口开发,就开始执行接口测试案例,基本上可以实时拿到测试结果,方便开发快速做出判断。【开发本地运行的方式就是打开JMeter工具,导入JMX文件,开始执行即可。】

  b. 回归测试:开发本地测试通过后,或整个需求手工测试通过后,把自动化的接口测试案例做分类整理,挑选出需要纳入到回归测试中的案例,在持续集成环境重新准备测试数据,并把案例纳入到持续集成的job中来,这些用于回归的接口测试案例需要配置到持续集成平台自动运行。

  3)、接口测试环境准备

  •  Jdk1.6或以上:http://www.oracle.com/technetwork/java/javase/downloads/index.html

  •  JMeter,下载址址:http://jmeter.apache.org/download_jmeter.cgi

  •  插件的下载安装地址:http://www.jmeter-plugins.org/

  4)、创建工程:

  a、打开JMeter:下载好JMeter后,双击bin目录下的jmeter.bat文件:

  

  b、添加线程组:在“测试计划”上点击鼠标右键-->添加-->threads(Users)-->线程组,添加测试场景设置组件,接口测试中一般设置为1个“线程数”,根据测试数据的个数设定“循环次数”。

  

  c、添加“HTTP Cookie管理器”:

  d、添加“Http请求默认值”组件,当被测系统有唯一的访问域名和端口时,这个组件很好用:

  e、在“HTTP 请求默认值”组件配置页面,填写被测系统的域名和端口,http请求的实现包版本以及具体协议类型,线程组里的所有“HTTP Sampler”可默认使用此设置。

  

  f、在“线程组”里添加“HTTP 请求”的Sampler

  

  g、在HTTP请求设置页面,录入被测接口的详细信息,包括请求路径,对应的请求方法,以及随请求一起发送的参数列表:

  

  h、设置检查点:在被测接口对应的“HTTP 请求”上,添加“响应断言”

  

  i、在设置页面上添加对相应结果的正则表达式存在性判断即可:

  

  j、添加监听器:方便查看运行后的结果

  

  上述步骤完成了一个简单测试实例的创建,复杂测试实例均在此基础上扩展完成。使用JMeter工具开发的接口测试案例,一个子系统建议放在同一个“测试计划”中,流程测试可以通过“线程组”来区分,这样也便于设定不同的测试数据个数。比较独立的接口,可以统一放在一个线程组内,顺序完成测试。

  流程性接口的测试:如果要测试的接口可以组成一个流程,只需要顺序添加多个“HTTP 请求”的Sampler,各请求之间可以提取需要在上下文传递的数据作为参数,以保证流程中数据的一致性。

  2、JMeter分布式测试

  在使用JMeter进行性能测试时,如果并发数比较大(比如最近项目需要支持1000并发),单台电脑(CPU和内存)可能无法支持,这时可以使用JMeter提供的分布式测试的功能。

  1)、JMeter分布式执行原理:

  JMeter分布式测试时,选择其中一台作为调度机(master),其它机器做为执行机(slave)。

  执行时,master会把脚本发送到每台slave上,slave 拿到脚本后就开始执行,slave执行时不需要启动GUI,我理解它应该是通过命令行模式执行的。

  执行完成后,slave会把结果回传给master,master会收集所有slave的信息并汇总。

  2)、执行机(slave)配置:

  a、slave机上需要安装JMeter,具体如何安装这里不详细介绍了。

  b、添加环境变量:JMETER_HOME=D:\B_TOOLS\apache-jmeter-2.13,此处为你JMeter的路径

  c、启动bin目录下的:jmeter-server.bat,启动成功如下图:

  

  d、上图上标红的IP和端口会在master里配置时用到。IP就是slave机器IP,端口默认是1099,端口也可以自定义,这里我自定义为1000,这个后面会讲。

  e、多台slave的话,重复1~4步骤就好。

  3)、调度机(master)配置:

  a、脚本:简单的一个访问压测宝的脚本: 

  b、找到JMeter的bin目录下jmeter.properties文件,修改如下配置,IP和Port是slave机的IP以及自定义的端口(这里端口我自定义为100,后面会讲如何自定义):

        remote_hosts=10.13.223.202:1000,10.13.225.12:1000

    多台slave之前用","隔开,我这配置了2台,可以看到标红的这个就是上面截图slave的IP和Port.

  c、打开JMeter,选择运行,有运程启动、运程全部启动两个选项:

  

  d、选择远程启动-->10.13.225.12:1000

    a) master结果,这里我只启动了10.13.225.12:1000这一台slave,所以只有一个结果(线程数和循环次数都是1):

  

    b) slave控制台信息:

  

  e、选择远程启动-->远程全部启动:

    a) master结果,全部启动,我配置了2台slave,所以有两次执行结果:

  

  4)、自定义端口:

  上面其实已经实现了JMeter的分布式测试,这部分主要介绍下如何自定义slave端口:

  a、slave:在slave机的JMeter的bin目录下,找到jmeter.properties文件,修改如下两个配置项,比如我这里修改为1888:

      server_port=1888

      server.rmi.localport=1888

  b、启动slave机上的jmeter-server.bat,如下图,端口已经修改为:1888

  

  c、master:修改master机器的jmeter.properties文件:

      remote_hosts=10.13.223.202:1000,10.13.225.12:1888

  d、重启jmeter.bat,如下图,端口已经变了:

  

  5)、其它说明:

  a、调度机(master)和执行机(slave)最好分开,由于master需要发送信息给slave并且会接收slave回传回来的测试数据,所以mater自身会有消耗,所以建议单独用一台机器作为mater。

  b、参数文件:如果使用csv进行参数化,那么需要把参数文件在每台slave上拷一份且路径需要设置成一样的。

  c、每台机器上安装的JMeter版本和插件最好都一致。

  3、搭建持续集成接口测试平台

  下面介绍最后一个实例,搭建持续集成接口测试平台(Jenkins+Ant+JMeter)。

  1)、环境准备:

  JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.html

  Ant:http://ant.apache.org/bindownload.cgi

  Jenkins:http://jenkins-ci.org/

  2)、Jemter脚本准备:

  a、脚本目录:D:\B_TOOLS\apache-jmeter-2.13\demo

  b、脚本内容:都是访问压测宝或google首页

  Script_yacebao.jmx  

  Script_google.jmx

  3)、ANT的build.xml代码准备:

  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

  12

  13

  14

  15

  16

  17

  18

  19

  20

  21

  22

  23

  24

  25

  26

  27

  28

  29

  30

  31

  32

  33

  34

  35

  36

  37

  38

  39

  40<xslt p="" <="" in="${jmeter.result.jtlName}">

  41 out="${jmeter.result.htmlName}"

  42 style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl"/>

  43

  44

  45

  46

  47

  48

  49

  50

  51

  4)、配置Jenkins Job并运行:

  a、job配置如下:

  b、在job的workspace目录下会生成结果报告:

  c、TestReport.html:

  5)、配置发送邮件功能

  a、自已写一个发送邮件的功能并打成sendmail.jar包,放在job的workspace目录中

  b、jenkins增加构建步骤

  a)进入到测试报告的目录

  b) 调用sendmail.jar命令发送邮件

  说明:

  由build3.xml的第12、13行可知,报告文件生成目录为:${env.WORKSPACE}/results/${env.BUILD_ID},所以这里要先cd到具体执行的那个build_id目录下。

  可以把上面的两行命令写在成一个批处理文件,例如第1步有个sendmail.bat文件就是,然后调用时直接写sendmail.bat就好了。

  持续集成接口测试平台(Jenkins+Ant+JMeter)就此搭建成功,以上是关于Jmeter脚本录制和压测的几个实例,接下来为您带来进阶的《云智慧压测实战分享之JMeter场景设置与监控》,敬请期待。

转载地址:http://news.chinabyte.com/175/14014175.shtml

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/415393.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云轻应用服务器 宝塔面板 mongodb 配置外网连接 其二 配置账号密码

其一的设置&#xff0c;不需要通过账号密码&#xff0c;就能直接访问数据库&#xff0c;安全性堪忧&#xff0c;我之前就踩过坑&#xff0c;也在之前的文章中讲过&#xff0c;这次用阿里云轻应用服务器重新介绍一波。 命令行窗口可以直接通过阿里云轻应用服务器里面自带的。 1、…

各种Span设置

备注&#xff1a;各种Span设置 &#xff08;转自http://blog.csdn.net/harvic880925/article/details/38984705 &#xff09; 在前面的一个小示例&#xff0c;大家应该也可以看出&#xff0c;要应用一个Span总共分三步&#xff1a; 1、构造String 2、构造Span 3、利用SetSpan…

工作152:阅读之后台管理登录样式

<template><div class"login-wrap"><div class"ms-login"><div class"ms-title">后台管理系统</div><el-form :model"param" :rules"rules" ref"login" label-width"0px&q…

div中图片下方有边距

遇到一个小问题&#xff0c;记录一下。 1、问题描述 <div class"thumb-box"><img class"tt-img" src"https://cdn.w7.cc/images/2017/11/09/15102068385a03ed7644fbf_OxLCy7ypXKpd.png?imageView2/5/w/88/h/88/format/png" alt"…

sign check fail: check Sign and Data Fail!-错误处理

一、报这个错大多都是支付宝公钥配置错误&#xff0c;不同环境的公钥是不同的&#xff0c;大家先确认自己的支付宝公钥获取是否正确:1. 沙箱公钥【查看】创建应用可参照&#xff1a;【如何创建应用】打开应用查看mapi网关适用于【 移动支付 】&#xff0c;【 老版手机网站支付 …

Android 事件分发,分发机制

1. 基础认知 1.1 事件分发的对象是谁&#xff1f; 答&#xff1a;点击事件&#xff08;Touch事件&#xff09; 定义 当用户触摸屏幕时&#xff08;View 或 ViewGroup派生的控件&#xff09;&#xff0c;将产生点击事件&#xff08;Touch事件&#xff09;Touch事件的相关细节…

工作154:代码之解析position 解决

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>日常请假</title><style>* {margin: 0px…

教程-上传应用公钥并获取支付宝公钥

教程-上传应用公钥并获取支付宝公钥 1. 点击签名验签工具右下角的“上传公钥”会打开支付宝开放平台网页&#xff0c;输入账号登录。&#xff08;建议使用IE或Chrome浏览器。) 2. 在“我的应用”中&#xff0c;选择要配置密钥的应用&#xff0c;点击“查看”。记录对应的APPID…

小程序 获取用户信息 openid 等

获取用户信息主要有两种方式 1、直接使用wx.getUserInfo获取一些基础信息。 在userInfo字段中&#xff0c;存在基础信息&#xff0c;比如下图&#xff1a; 2、在正常使用中&#xff0c;我们是需要获取openid的。需要用到wx.login方法。 调用微信小程序中的API接口获取code…

2.mysql优化---增删改优化

整理自互联网 补充知识点&#xff1a;操作数据语句优化的认识 通常情况下&#xff0c;当访问某张表的时候&#xff0c;读取者首先必须获取该表的锁&#xff0c;如果有写入操作到达&#xff0c;那么写入者一直等待读取者完成操作&#xff08;查询开始之后就不能中断&#xff0c;…

工作155:icon图标前置和后置

<el-button slot"append"></el-button> 里的 slot"append" 就是一个UI摆放的位置,其实就是封装的样式布局。 append&#xff1a;代表放在紧贴在依赖组件的后面prepend&#xff1a;代表放在紧贴在依赖组件的前面<el-form :model"for…

Edittext不可编辑可点击,输入密码可见与不可见,验证码换格输入实现方法,车牌号自定义输入键盘

不可编辑可点击&#xff1a;设置两个属性即可 mEdittext.setFocusable(false); mEdittext.setOnClickListener(this::onClick); 输入密码可见与不可见 private boolean ifonpenteyestrue; if (ifonpenteyes){ ifshowpawimage.setImageResource(R.mipmap.openeyes); l…

小程序button去除边框

在小程序给官方button增加自定义样式的时候&#xff0c;需要注意隐藏button的border。 我用的less&#xff0c;加上一行代码就可以解决。 &:after {border: none; }例如下图自定义样式的代码是 .login-btn {background: #ecb810;color: #2e2f2e;display: flex;align-ite…

Alpha 冲刺 (7/10)

队名&#xff1a;天机组 组员1友林 228&#xff08;组长&#xff09; 今日完成&#xff1a;get到了一份对winsock各功能封装好的代码明天计划&#xff1a;继续封装剩余任务&#xff1a;对接主要困难&#xff1a;头文件迷之出错收获及疑问&#xff1a;加深了c以及java类的理解本…

表单提交中的input、button、submit的区别

参考博文&#xff1a;http://www.cnblogs.com/shytong/p/5087147.html 设置typesubmit后&#xff0c;输入控件会变成一个按钮&#xff0c;显示的文字为其value值&#xff0c;默认值是Submit。form[method]默认值为GET&#xff0c;所以提交后会使用GET方式进行页面跳转。input[t…

小程序 authorize scope.userLocation 需要在app.json中声明permission字段

使用wx.authorize遇到的一个小问题&#xff0c;解决办法就是在app.json中增加permission字段。 官方地址&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html

【洛谷P3389】【模板】高斯消元

题目链接 题目描述 给定一个线性方程组&#xff0c;对其求解 输入输出格式 输入格式&#xff1a; 第一行&#xff0c;一个正整数 n 第二至 n1行&#xff0c;每行 n1 个整数&#xff0c;为a1, a2 .....an​ 和 b&#xff0c;代表一组方程。 输出格式&#xff1a; 共n行&#xff…

微信小程序上传的视频显示封面 我是阿里云oss的实现

我们一般用wx.chooseVideo拍摄视频或从手机相册中选视频&#xff0c;然后上传到后台存储空间。 但是给用户显示视频列表的时候&#xff0c;需要视频封面额。 阿里oss地址&#xff1a;https://help.aliyun.com/document_detail/64555.html?spm5176.11065259.1996646101.searc…

Android 仿微信多张图片选择器,适配android10系统,open failed: EACCES (Permission denied)

实现效果 只需引入模块&#xff0c;比起依赖&#xff0c;更方便自定义 implementation project(:imagepicker) //图片加载 implementation com.github.bumptech.glide:glide:4.11.0 初始化即可使用 private void initImagePicker() {ImagePicker imagePicker ImagePicker.g…

前端学习(2640):懂代码之登录页login.vue存入用户信息

<template><div class"login-wrap"><div class"ms-login"><div class"ms-title">后台管理系统</div><!--1定义参数类型 2定义路由规则 3使用ref去进行指向 --><el-form :model"param" :rules&…