向服务器发送请求到接收相应的过程。
打开Jmeter即显示测试计划,测试计划用来描述一个测试(性能测试或者接口测试),包含与本次性能测试所有相关的功能,即该性能测试的所有内容是于基于一个计划的。
常见概念:
线程组设置:
线程组相当于有多个用户,同时去执行相同的一批次任务。每个线程之间都是隔离的,互不影响的。一个线程的执行过程中,操作的变量,不会影响其他线程的变量值。
测试计划右键添加->threads->线程组(控制总体并发)
采样器参数配置:
a、响应断言
b、Json断言
{"avatar_large": "https://cdn.v2ex.com/navatar/6cdd/60ea/184_large.png?m=1587133817", "name": "apple"}
[{"avatar_large": "https://cdn.v2ex.com/navatar/6cdd/60ea/184_large.png?m=1587133817", "name": "apple"},
{"avatar_large": "https://cdn.v2ex.com/navatar/6cdd/60ea/184_large.png?m=1587133817", "name": "python"}]
{"avatar_large": [{"url":https://cdn.v2ex.com/navatar/6cdd/60ea/184_large.png?m=1587133817", "name": "apple"},{"url": "https://cdn.v2ex.com/navatar/6cdd/60ea/184_large.png?m=1587133817", "name": "python"}]}
Assert json path exists:$.avatar_large[0].name
Jmeter提供的参数化方式:
测试计划中设置的参数,可以用作全局变量使用
很多变量在全局中都有使用,或者测试数据更改,可以在一处定义,四处使用,比如登录用户名、密码,服务器地址、端口等
与测试计划的用户变量参数化功能一致,不管放在测试计划下,还是某一个线程组下,参数都是可用的,可以跨线程组使用。
操作步骤:
操作步骤:
从数据库中导出的真实在线数据在csv文件(或txt)中,作为参数化的数据源,模拟大量数据
操作步骤:
如图可以查看取样器结果,请求体和请求头,响应头和响应体的结果
如下图,为参数化文件中读取到的数据
左边显示为绿色的勾,表示预期结果与实际结果一致,通过
聚合报告输出
在测试https协议的时候,如果遇到jmeter不支持该网站的https协议,需要将该网站的证书加入到jmeter:
操作步骤
测试计划->下方浏览添加jdbc的jar包到classpath: mysql-connector-java-5.1.30.jar
JDBC request->add -> config element -> JDBC connection configuration
Variable Name:数据库连接池的名称,我们可以有多个jdbc connection configuration,每个可以起个不同的名称,在jdbc request中可以通过这个名称选择合适的连接池进行使用。
Max Number of connections : 最大连接数
MAX wait :最大等待时间
Auto Commit: 是否自动提交事务
DataBase URL : 数据库连接地址 jdbc:mysql://127.0.0.1:3306/XX
JDBC Driver Class : 数据库驱动,选择对应的mysql
username:数据库用户名
password:数据库密码
xampp下启动filezilla服务,并配置ftp服务器:
ftp下载接口
一般采用两种录制方式:Jmeter代理录制及第三方工具BadBoy录制
如果客户端是PC机:则可以通过ie选项来进行配置
如果客户端是移动设备:则可以通过wlan高级设置进行代理
一般为了使脚本更加简洁,需要过滤静态资源:.*\.js .*\.jpg等
JMeter录制脚本有多种方法,其中最常见的方法是用第三方工具badboy录制,另外还有JMeter自身设置(Http代理服务器+IE浏览器设置)来录制脚本,但这种方法录制出来的脚本比较多且比较乱,个人不太喜欢,一般常见Badboy进行录制,下面来介绍下Badbody录制。
注:使用JMeter的代理或是BadBoy进行录制的时候,特别是JMeter代理的时候,操作不能太快,不然容易造成录制失败
Step01:打开badboy工具,在地址栏目中输入被测试项目的地址(badboy正常状态下是录制状态,为红色按钮)
Step02:录制完成后,点击工具栏旁边黑色按钮,结束录制
step03:File->export to Jmeter
Step04:Jmeter中打开->选择badboy导出的jmx文件
Step05:编辑并优化脚本
Step01:在Jmeter中测试计划中添加线程组及HTTP代理服务器,测试计划->添加->非测试元件,配置浏览器IE选项,JMeter HTTP代理服务器的端口和浏览器设置的端口要一致
Step02:在Requests Filtering 中输入过滤的请求:.*\.jpg,.*\.js,.*\.css 输入此3个表示不录制有此后缀的请求,可以精简脚本
Step03:Jmeter添加线程组->HTTP请求默认值,并设置默认数据
Step04:Jmeter添加线程组->配置元件,分别添加HTTP Cookie 管理器,该元件会保存服务器发到客户端的sessionId到cookie中,此处需要手动添加。
Step05:启动HTTP代理,就可以在浏览器中进行被试系统的访问操作了,对应的操作脚本会记录在Jmeter中。
Step06:再添加相应的监听器就可以回放并查看回放记录了
Jmeter提供两种场景运行方式,一种是GUI(视窗运行)方式,另外一种是非GUI方式运行(命令窗口)。
Jmeter非GUI界面,压测参数讲解:
要求:
选择可运行的信互登录及文件上传接口脚本在非GUI模式下运行,并将运行结果文件.jtl文件保存到E:\result\jtl中;将图形化HTML报告保存到E:\result\html中。
CMD命令行中执行下面指令即可:
jmeter -n -t D:\result\xinhu.jmx -l E:\result\jtl\result.jtl -e -o E:\result\html
Jmeter与ant集成:
<project name="ant-jmeter-test" default="run" basedir=".">
<property name="jmeter.home" value="E:\apache-jmeter-2.13" />
<property name="report.title" value="SZSG_三国"/>
<property name="jmeter.result.jtl.dir" value="E:\apache-jmeter-2.13\AutoTest\report" />
<property name="jmeter.result.html.dir" value="E:\apache-jmeter-2.13\AutoTest\report" />
<property name="ReportName" value="thinkive" />
<property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}.jtl" />
<property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}.html" />
<target name="run">
<antcall target="test" />
<antcall target="report" />
target>
<target name="test">
<taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
<jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
<testplans dir="E:\apache-jmeter-2.13\AutoTest" includes="Login_test.jmx" />
<property name="jmeter.save.saveservice.output_format" value="xml"/>
jmeter>
target>
<path id="xslt.classpath">
<fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
<fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
path>
<target name="report">
<tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" />tstamp>
<xslt
classpathref="xslt.classpath"
force="true"
in="${jmeter.result.jtlName}"
out="${jmeter.result.htmlName}"
style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl">
<param name="dateReport" expression="${report.datestamp}"/>
<param name="titleReport" expression="${report.title}:${report.datestamp}"/>
xslt>
<copy todir="${jmeter.result.html.dir}">
<fileset dir="${jmeter.home}/extras">
<include name="collapse.png" />
<include name="expand.png" />
fileset>
copy>
target>
project>
ant与Jenkins集成: