jemeter入门
简介
- apache旗下,开源的性能测试工具,通过多线程的方案实现性能测试
- 插件丰富,扩展性强,像一个巨大的组装车间
- 默认1线程,也可以做功能测试
- 学习曲线比较曲
安装
- 安装jdk
- 官网下载,安装,配置环境变量:添加安装的bin目录到环境变量path
- 运行:cmd > jmeter
工作结构
默认:测试计划(test plan) >>> 线程(thead user).线程组(thread group) >>> 采样器(sampler).http请求(http request) >>> 监听(listener).查看结果树(view result tree)
测试计划:对应项目,可设置用户定义变量
线程组:对应模块,可设置请求默认值,应用于组下全部采样器;设置线程数,启动所有线程时间
采样器:对应测试用例,可设置请求头管理器(新增旧改,可用于添加token),参数化(${变量名}),json采集器,断言
监听:对应测试结果,可拖拽不同层级,查看不同层次的结果
参数化
格式为${变量名}
- 用户定义变量(user defined variables):全局变量,在测试计划界面设置,应用于整个项目
- 用户参数(User Parameters):局部变量,在http request >>> add >>> pre processors >>> user Parameters,应用于这个请求
- CSV Data Set Config:工作使用最多的一种参数化,应用于这个请求,add >>> config element >>> CSV Data Set Config,配置数据文件路径、变量名等
- 函数助手(function helper dialog):菜单栏tools下,设置参数,生成函数,比如产生1-100的随机数:${__Random(1,100,)},可一键生成复制放入请求数据。
断言
常用的断言:响应断言,json断言,xml断言
http request >>> add >>> assertions >>> response assertion/Json assertion
响应断言:选择response code,值填200
json断言:填写json路径表达式,比如$.message,填写预期值
关联
jmeter通过上游接口的后置处理器(post processors)来提取response的内容,然后在下游接口直接引用。
常用的有json提取器(json),正则提取器(html),xpath提取器(xml)
以json提取器为例:
添加json提取器,http request >>> add >>> post processors >>> JSON Extractor,填写变量名,如:token,提取变量的json路径表达式,如: . d a t a . t o k e n ,下游接口引用: .data.token,下游接口引用: .data.token,下游接口引用:{token}
生成报告
jmeter的工作目录,一般有jmx;jtl;report,3个文件夹,jmx放项目文件,jtl放测试结果文件,report放测试报告。
新建dos,执行命令
jmeter -n -t D:\jmeter_testcase\jmx\test.jmx -l D:\jmeter_testcase\jtl\test.jtl -e -o D:\jmeter_testcase\report
选项解释:
-n:以非GUI形式运行Jmeter
-t:source.jmx 脚本路径
-l:result.jtl 运行结果保存路径(.jtl),此文件必须不存在
-e:在脚本运行结束后生成html报告
-o:用于存放html报告的目录
缺点1:每次都得手动输
解决方案:让jenkins帮我自动构建,见jenkins篇
缺点2:如何批量执行项目呢?
解决方案:ant(完成构建)+jenkins
集成ant
简介
Apache Ant,是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于集成开发环境中
安装
1、下载ant,官网apache ant
2、配置环境变量
新建系统变量ANT_HOME,值E:\soft\ant
系统变量CLASSPATH,值后面添加E:\soft\ant\lib
系统变量Path,值后面添加E:\soft\ant\bin
3、cmd=>ant,提示:"build.xml does not exist ",说明安装成功
配置
1、将jmeter\extras下的ant-jmeter-1.1.1.jar复制到ant\lib,目的:这样让ant认识jmeter
2、配置jmeter:打开配置文件jmeter\bin\jmeter.properties
jmeter.save.saveservice.output_format=csv改成 jmeter.save.saveservice.output_format=xml,记得去掉前面的“#”
3、在jmeter的工作目录,新建build.xml,jmx可以放多个测试项目,一起测试
4、配置build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="ant-jmeter-test" default="run" basedir=".">
<tstamp>
<format property="time" pattern="yyyy_MM_dd_hhmm" />
</tstamp>
<!-- 需要改成自己本地的 Jmeter 目录-->
<property name="jmeter.home" value="D:\software\jmeter" />
<!-- jmeter生成jtl格式的结果报告的路径-->
<property name="jmeter.result.jtl.dir" value="D:\jmeter_testcases\jtl" />
<!-- jmeter生成html格式的结果报告的路径-->
<property name="jmeter.result.html.dir" value="D:\jmeter_testcases\report" />
<!-- 生成的报告的前缀-->
<property name="ReportName" value="test" />
<property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}_${time}.jtl" />
<property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}_${time}.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}">
<!-- 声明要运行的脚本。"*.jmx"指包含此目录下的所有jmeter脚本-->
<testplans dir="D:\jmeter_testcases\jmx" includes="*.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}"/>
</xslt>
<!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 -->
<copy todir="${jmeter.result.html.dir}">
<fileset dir="${jmeter.home}/extras">
<include name="collapse.png" />
<include name="expand.png" />
</fileset>
</copy>
</target>
运行
在工作目录下,即放置测试用例的目录,如:D:\jmeter_testcase,运行cmd,执行ant。