Jmeter压力测试入门

 
1. 前言
  Jmeter 是Apache组织开发的基于Java的压力测试工具,开源并且支持多个操作系统,是一款很好的HTTP测试工具。本篇文章主要的目的是帮助没有接触过Jmeter的人快速上手,迅速掌握Jmeter的基本工程配置流程,并可以使用GUI界面进行基础的测试工作。
  Jmeter是由Java开发的,所以在运行之前需要安装Jre,具体的安装过程可以参考这篇文章的内容。接下来直接进入正题,假设后端开发了一个IP地址查询库,想做一下基本的性能测试,使用Jmeter如何做?
2. 基本测试
  首先打开Jmeter软件。
  jmeter_gui
  2.1 添加线程组
  所有的测试工作都是从新建一个线程组开始的。
  它的作用其实是为了模拟用户,所以也叫Users。一个线程组模块可以包含多个线程,每个线程代表一个用户,这样可以模拟高并发下的请求,并根据网站的响应信息来判断网站的相关性能。
  线程组包含很多属性,目前我们只关注线程属性那一块。其中线程数代表访问的并发数,默认是1。Ramp-Up Period 表示多长时间内容启动所有线程,如果时间很短,会造成网站的瞬间高并发,默认值是1秒。循环次数是表示执行多少次,默认值为1,表示执行一次结束,这里可以勾选永远,让其一直运行下去。
  这些属性暂时不用动,因为还没有将工程配置好,测试工程配置的时候使用单次测试容易排查问题,以后压力测试直接修改该面板的值即可。
  2.2 添加HTTP请求
  因为是HTTP接口,这里添加一个HTTP请求,用来访问网站的API接口。
  HTTP请求面板主要的目的是设置测试时候HTTP请求的相关信息,模拟浏览器访问或者其他程序访问后台的相关配置。
  该面板主要的配置包括协议、服务器IP、端口、方法、路径和参数等内容,接下来可以将测试样例的相关信息填入。
  这里测试使用的是淘宝IP地址库,首页有Rest API接口的测试接口说明:
  1. 请求接口(GET):
  /service/getIpInfo.php?ip=[ip地址字串]
  2. 响应信息:
  (json格式的)国家 、省(自治区或直辖市)、市(县)、运营商
  3. 返回数据格式:
  {"code":0,"data":{"ip":"210.75.225.254","country":"\u4e2d\u56fd","area":"\u534e\u5317",
  "region":"\u5317\u4eac\u5e02","city":"\u5317\u4eac\u5e02","county":"","isp":"\u7535\u4fe1",
  "country_id":"86","area_id":"100000","region_id":"110000","city_id":"110000",
  "county_id":"-1","isp_id":"100017"}}
  其中code的值的含义为,0:成功,1:失败。
  因为是GET请求,所以具体内容填写如下:
  该接口的参数比较简单,只有一个ip参数,如果复杂的可以添加多个或者直接在路径后面添加也可,例如:/service/getIpInfo.php?ip=xxx.xxx.xxx.xxx。
  2.3 添加结果树
  现在基本配置已经OK,但是这样执行后返回的结果却没有地方查看。为了方便查看结果,这里添加View Results Tree面板,有很多其它的结果查看面板,大家可以自己尝试一下。
  结果树主要是观察服务器响应信息,并支持将结果写入文件。
 2.4 添加HTTP镜像服务器
  在运行测试之前,如何验证我们发送的信息是否有误?如何可以理直气壮的告诉别人自己发送的测试请求没有问题?这里推荐添加HTTP镜像服务器进行校验测试。
  HTTP镜像服务器并不是测试组件,而是用来用来校验的非测试组件,具体添加位置在工作台。
  添加后,默认端口为8081,如果和你电脑上的端口不冲突,直接开启即可。
  接着回到HTTP请求面板修改IP地址和端口。
  点击运行按钮进行测试。
  如果你之前没有保存过测试方案,会提示你保存,这里直接选择一个位置保存。
  在结果树面板可以查看镜像服务器返回的结果,该结果信息就是你发送的请求配置信息。
  因为该演示发送的参数比较简单,所以感觉该操作没有必要的样子,但对于复杂的测试来说,测试之前保证自身请求的正确性是很很必要的。
  2.5 开始测试
  接下来再将HTTP请求面板改回原来的样子。点击清除按钮,清除当前无用的测试结果,然后点击开始按钮进行新的测试。
  小技巧:这里请求面板改来改去感觉很麻烦,有一个简单的办法就是改之前将面板拷贝到工作台,测试后,再将其拷贝回去,这样就节省再次更改的时间了。当然复制/禁用的效果也是类似的。
  查看测试面板:
  结果有些和想象的不一样,我们非常确定请求发送的没有问题,原因可能是淘宝的服务端做了HTTP头判断,防止其他的应用程序进行滥用,一般公司内部测试不会遇见这种情况,大多数这种手段貌似都是防爬虫之类的。
  解决方法很简单,就是再披一层皮。增加HTTP信息头管理面板:
  这里添加User-Agent头部,让请求看起来是浏览器本身访问一样。
  
  再次测试,这回返回正常。
  接下来压力测试只需要修改线程组面板,就可以尝试大批量进行请求了。不过大批量测试还需要几个地方需要学习。
3. 批量测试
  批量测试要想做好有三个最基本的问题。第一个如何做到批量输入,测试肯定越偏向于越真实越好,很多都是拿线上数据进行测试,在Jmeter中最简单的批量导入的手段就是使用CSV Data Set Config面板。第二个是如何校验返回结果,批量测试不像单个测试可以人眼扫描,大批量的数据返回肯定是看不过来的,在Jmeter中可以使用断言,类似于编程中的断言,可以校验返回结果是否正确。第三个是如何统计数据,这个最方便,因为基本的统计Jmeter有很多原生的模块。
  3.1 CSV Data Set Config
  该模块主要是从外部加载数据使用,可以按照规定的格式读取并将文本解析成对应的变量,可以供其它模块使用。
  这里拿IP地址为案例。首先准备一个文件,每行一个IP。
  然后,在CSV Data Set Config面板中如下配置:
  这里的配置很简单,Filename代表解析的文件,这里选择刚刚创建的Ip列表文件。File encoding 代表文件编码,使用默认配置。Variable Names 代表赋值的变量,这里可以填写多个变量,但是目前每行只有一个ip地址。Ignore first line 是否忽略首行,主要是对那些有标题头的文件格式,接下来Delimiter 代表每行的分隔符,这里每行一个变量,填什么都无所谓,保持默认即可。
  Recycle on EOF/Stop thread on EOF/Sharing mode 这三个设置一般用于测试文件数据的使用策略。如果你想只测试文件中的数据,测试完成后终止,那么需要将Recycle on EOF和 Stop thread on EOF 分别设置为false和true。Sharing mode这里保持默认即可。
  有了数据的输入,接下来修改HTTP请求,让每次请求的参数不同。
  将ip的值改为${ip},大括号包含的ip代表CSV Data Set Config中定义的变量,这样每次请求的ip参数将和文件中的顺序一一映射。
  提示:大家测试时候不要使用淘宝接口测试,该接口对批量请求做的限制。
  3.2 断言
  上面的结果好像全部没有问题,其实不然,查看第二个请求,你会发现,虽然请求本身没问题,但是数据返回的信息却表示输入的ip地址无效,我们却无法感知。
  如何校验返回结果?Jmeter支持添加断言模块。
  断言的种类非常丰富,这里使用最简单常用的响应断言。断言面板支持很多匹配规则,甚至支持正则表达式。这里只是简单的使用包括来进行校验。
  接着可以运行查看结果。
  3.3 聚合报告
  就剩下最后一个问题了,如何查看所有请求的综合情况。最常用的就是聚合报告模块。
  该模块可以详细的展示所有请求的综合水平。包括请求个数,平均响应时间,最大响应时间、吞吐量等等。
  下面是我测试四个请求的报告:
  4. 总结
  到这里基本的常用模块就介绍完了,通过本文可以掌握基本的测试组件,主要是对HTTP请求的相关测试,非常简单的过程,适合入门观看。
注:转载至 http://www.51testing.com/html/56/n-3723356.html

Jmeter压力测试入门操作的更多相关文章

  1. 转载:JMeter压力测试入门教程[图文]

    JMeter压力测试入门教程[图文] Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域. 它可 ...

  2. JMeter压力测试入门教程[图文]

    Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域. 它可以用于测试静态和动态资源例如静态文件. ...

  3. jmeter压力测试入门

    http://www.51testing.com/html/80/n-853680.html http://blog.csdn.net/vincy_zhao/article/details/70238 ...

  4. JMeter压力测试以文件的形式

    JMeter压力测试入门教程[图文] 1. 下载JMeter 2. 启动JMeter 3. 运行预准备 4. 运行 文章目录 Apache JMeter是Apache组织开发的基于Java的压力测试工 ...

  5. jmeter 压力测试

    转自: https://blog.csdn.net/cbzcbzcbzcbz/article/details/78023327 Jmeter压力测试简单教程(包括服务器状态监控) 2017年09月18 ...

  6. 【转】jmeter压力测试

    jmeter压力测试 Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域, 是压力测试的首选软件 ...

  7. 基准测试-jmeter压力测试activeMQ之一环境安装配置

    jmeter压力测试activeMQ 摘要:linux(CentOS)单机activeMQ安装.window(2008Server)Jmeter配置activeMQ包.Jmeter配置linux监控 ...

  8. JMeter压力测试,http请求压测,5分钟让你学会如何压测接口!

    JMeter压力测试 官网:https://jmeter.apache.org 最新款的jmeter需要java8的支持,所以请自行安装jdk8.这里就不啰嗦了. 可以根据自己的系统下载zip或者是t ...

  9. JMeter压力测试简单使用

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11915535.html JMeter压力测试简单使用: 我们可以使用JMeter来测试一下自己 ...

随机推荐

  1. django中如何建立抽象型数据库作为父模块可继承其功能

    先建立抽象数据库 from django.db import models class BaseModel(models.Model): """为模型类补充字段" ...

  2. 【bzoj4987】Tree 树形dp

    Description 从前有棵树. 找出K个点A1,A2,-,Ak. 使得∑dis(AiAi+1),(1<=i<=K-1)最小. Input 第一行两个正整数n,k,表示数的顶点数和需要 ...

  3. python2和python3 分别连接MySQL的代码

    python2中的写法如下: #coding=utf-8 import MySQLdb try: conn = MySQLdb.connect(host='localhost', port=3306, ...

  4. 《Andrew Ng深度学习》笔记2

    神经网络基础 1.图计算 计算时有两种方法:正向传播和反向传播.正向传播是从底层到顶层的计算过程,逐步推出所求公式.反向传播是从顶层到底层,从已知的式子求出因变量的影响关系. 在这里用到的反向传播算法 ...

  5. DataRow[]转DataTable

    DataRow[]有个扩展方法CopyToDataTable()

  6. iframe里面的元素触发父窗口元素事件的jquery代码 转

    例如父窗口定义了一个事件. top: $(dom1).bind('topEvent', function(){}); 那么iframe里面的元素怎样触发父窗口dom1的事件呢?这样吗? $(dom1, ...

  7. 使用 Flask 实现 RESTful API

    原文出处: Luis Rei   译文出处:nummy 简介 首先,安装Flask     1 pip install flask 假设那你已经了解RESTful API的相关概念,如果不清楚,可以阅 ...

  8. struts2学习笔记(二)—— struts2的架构【转】

    一.系统架构   Struts2的官方文档附带了Struts2的架构图. 从这张图能够非常好的去理解Struts2 关于图中的Key: Servlet Filters:过滤器链,client的全部请求 ...

  9. Android 日历视图(Calendarview)

    1.介绍 2.常用属性 3.xml文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayou ...

  10. 【算法笔记】B1008 数组元素循环右移问题

    1008 数组元素循环右移问题 (20 分) 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A​0​​A​1​​⋯A​N ...