Jmeter 一个正常的流应该有的模块
Test Plan
|______> Thread Group
|_______> Config Element:配置参数
|_______> Pre-Processor: 编辑变量
|_______> Timers: 设置等待时间
|_______> Logic Controller: 逻辑控制
|_______> Sampler: 编辑请求
|_______> Post-Processor:处理响应数据
|_______> Assertion: 验证响应数据
|_______> Listener: 查看结果报告
|______> ...
|______> ...
|______> Test Fragment
|______> ...
***注意事项:
1. View result Tree会消耗大量的内存,建议调试单个请求的时候拿他看看error的信息, 最后run的时候不要使用
2. 使用csv格式的输出, xml的输出 不建议使用
3. 使用少的assertion
4. 不建议使用jmeter graphs, 可以使用JTLs tab 在web端看结果
5. 跑之前清除下不需要的log文件
什么是Jemeter
Apache的jemeter是一个纯粹的java开源软件。首先是由Apache软件基金会成员stefano开发的, 用于测试软件性能和负载行为。起初是被用于测试web应用或者FTP应用,目前被用于功能测试 数据库服务器测试等
一测试过一个web服务器的有效性吗, 验证这个服务器能成熟多少个用户同时登陆。
jemeter的优点:
- 开源: 完全的开源 免费,允许开发者使用源代码
- 友好地界面: 使用简单很快就能上手
- 平台的独立性:纯粹基于java应用, 能够在不同的平台上使用
- 多线程框架: 多线程组独立完成不同的测试 JMeter allows concurrent and simultaneous sampling of different functions by a separate thread group
- 可视化的测试结果:能够汇总并以不同的形式显示测试结果
- 简单的安装
- 容易扩展:你可以写你自己的测试,jemter也支持可视化的plugin 允许你扩展你的测试
- 多种测试策略: 支持负载测试,分布测试, 功能测试等
- 模拟: 能模拟多个用户进行压力测试
- 支持多协议: jemeter不支持web应用测试但是允许评估数据库服务器的性能。所有的协议像HTTP,JDBC,LDAP,SOAP,JMS,FTP都支持
- 记录&回放: 记录用户活动并模拟其行为
- 脚本测试: jemeter能够与bash以及selenuim集成用于自动化测试。
Jmeter工作原理
Jmeter能模拟多个用户向目标服务器发送请求,并返回一个可视化的图来呈现统计结果
完整的工作原理如下所示
JMeter安装
- 安装java (注意安装的时候选择JDK版本 最好是JDK8,(而安装的要求是必须版本大于JDK6) 因为12属于短期的支持版本)
- 下载JMeter 下载路径, 选择tgz/zip文件, 然后解压到电脑中
注意:选择哪个文件来下载取决于你使用的电脑, 如果是mac使用tgz, 如果是windowns使用zip
解压后的文件得到如下:
- 开启JMeter
有以下三种模式
- GUI mode 打开bin/JMeter.bat文件即可
- Server mode
JMeter的GUI会浪费很多电脑的空间,为了节省资源,我们最好选择使用Non GUI,我们就需要使用下列的命令,注意是需要进入到/bin路径下
$jmeter -n -t testPlan.jmx - l log.jtl -H 127.0.0.1 -P 8000
根据所需, 我们需要一个或多个可选择的packages
Java compiler: 用于开发额外的插件
SAX xml parser:解析xml文件的jar包
email support:支持自动发送邮件,并有SMTP
JDBC driver:安装jdbc driver支持测试数据库
- Command line mode
jmeter: 运行 JMeter(GUI mode)
jmeter-server: 开启JMeter-server模型
jmeter.sh: 基础
mirror-server.sh:启动镜像服务器
shutdown.sh: 关闭
stoptest.sh:中断测试
JMeter中的元素
下图指出来JMeter中基本的元素
研究所有的组件看起来复杂而又无聊,我们仅讨论你开始测试之前的必备知识
下面的组件将会重点讨论
- Thread Group
- Samplers
- Listeners
-
Configuration
Thread Group
线程组是线程的集合。每一个线程代表一个使用该应用的用户。一般而言,一个线程模拟一个向服务器发送请求的真实用户
线程组的控制就是设置该组中线程的数量
例如,如果你设置线程的数量为100, 那JMeter就是创建某100个用户来向服务器发出请求。
Samplers
我们都知道JMeter能支持测试HTTP,FTP,JDBC以及其他的协议, 现在线程组用来设置请求服务的用户数量,那如何能让每一个线程知道具体的请求是什么呢,这就需要使用Samples
其实Samples顾名思义就是给出一些例子, 它能够对不同的测试给出一定的性能测试的样例供我们擦靠使用
-
FTP Request
假设你想做FTP服务器的性能测试,你可以使用FTP Sample来完成这个任务。Controller让你向FTP server发一个下载文件或者上传文件的请求。
例如,如果你想从FTP服务器下载一个文件“Text.txt”,你需要配置以下的参数:
-
HTTP Request
这个Sampler让我们向服务器发送一个请求, 在后面的章节会做出详细的介绍。
-
JDBC Request
示意图如下
假设,一个数据库服务器有一个列名为test_result且存放在table test_tbl中。你想从这个数据库服务器中检索这个数据;你可以命令这个JMeter向该服务器发送这个请求来得到这个数据。
-
BSFSampler
以下的实例是允许我们使用BSF脚本 来写sampler
-
Access Log Sample
这个sampler是演示如果阅读本地的文件然后生成http请求, 本地文件可以为html css image等
SMTP Sampler:
如果你想测试邮件服务器,你可以使用以下的sampler。这个sampler或使用SMTP协议来传送邮件:
Listener
Listener:显示执行的结果,并可以使用多种形式来表示:tree 图或log形式
- Graph
注意图形式的result会反应服务器的响应时间
-
Tree
树状图反应用户请求的动作,比如在一个session 里面的动作
-
Table
表格会显示测试过程的汇总
-
log
log会显示测试结果
配置元素
可以通过Sampler来设置默认值和变量供后续者使用。
下图显示的是JMeter常用的配置元素
- CSV Data set config
假设你想去测试一个有100个用户使用不同证书登陆的网站。你没必要去记录100次脚本运行。你可以参数化你的脚本使它包含不同的用户登陆证书。这个登陆信息(账户密码等)就可以在一个txt文件中存储。JMeter有一个element能从txt文件中读取不同的参数。这就是CSV data set config,被用于从文件中读取每一行,并将其拆成不同的变量
这个就是一个CSV data,包含了登陆网站的用户和密码
HTTP Cookie Manager
理解这个需要引入下面的例子
你使用你的浏览器(Firefox,IE等)来进入www.google.com
然后登陆google账号使用你自己的密码和帐号。你的账号和密码将会被你的电脑以cookie来保存,下一次,当你来访问的时候,你会自动登录而不需要自己重新登陆。这是因为你的浏览器会使用你的cookies来作为用户登陆的信息。
HTTP Cookie Manager就具有和浏览器同样的作用。如果你有一个HTTP的请求并且相应会包含一个cookie,这个manager会自动记录这个cookie,当以后登陆该网站的时候会使用这个cookie。-
HTTP request default
这个element会让我们为http请求控制器使用来设置默认的值。
例如,
你正在向goole发送100个http请求。
你不得不手动为这100个申请输入服务器名。
当然,你可以添加一个单独的http请求默认值如: Server Name or IP" field = google.com
-
login Config Element
该元素能让我们添加或重写在sampler中设置的账号和密码
例如,你想模拟用户使用某个账号和密码来登陆facebook,你可以设置改element 来为用户请求添加账号密码。
那这个与CSV Data config的区别