Jmeter接口自动化测试

目录

 

一、目标

二、环境配置

三、实现成果

四、Jmeter介绍

五、Jmeter环境搭建

六、Jmeter目录介绍

七、Jmeter结构图

八、Jmeter基础操作

8.1 启动Jmeter,

8.2Jmeter页面如下:

8.3测试计划

8.4.添加线程组

8.5.添加http请求

8.6.添加察看结果树

8.7.Jmeter参数化

8.8、添加断言

8.9.添加断言结果

九、Jmeter进阶操作

9.1.如何实现Jmeter使用POST方法发送json数据

9.2.如何实现数据的关联

9.3.for-each控制器的使用

9.4.jmeter性能测试场景化操作

9.5.Jmeter聚合报告分析

9.6.Jmeter脚本封装以及执行的顺序

9.7.Jmeter命令行操作生成性能测试报告

十、Jmeter+ant+Jenkins实现自动化接口测试

10.1  Ant配置

10.2  Jenkins 搭建(By tomcat)


一、目标

1.Jmeter介绍

 

  • Jmeter环境搭建以及目录介绍
  • Jmeter功能页面
  • Jmeter元件使用
  • Jmeter参数化
  • Jmeter关联
  • Jmeter检查点
  • Jmeter聚合报告
  • Jmeter插件使用
  • Jmeter命令行介绍

 

2.Jmeter+ant+jenkins实现接口自动化测试集成

 

二、环境配置

 

  • JDK:1.8.0_131
  • Jmeter:4.0
  • Jenkins:Jenkins2.176.1
  • ant:1.9.6

 

备注:版本选择可以自行官网下载配置,以上为本人电脑配置

 

三、实现成果

1.生成html报告如下:

 

2.邮件通知如下:

 

四、Jmeter介绍

jmeter作为一个开源的接口性能测试工具,其本身的小巧和灵活性给了测试人员很大的帮助,但其本身作为一个开源工具,相比于一些商业工具(比如LoadRunner),在功能的全面性上就稍显不足。

五、Jmeter环境搭建

1.Jmeter环境建

Jmeter下载安装,官网地址:http://jmeter.apache.org/download_jmeter.cgi

 

  • 下载完成后解压到当前目录即可,如下图:
  • 环境变量配置_新增系统环境变量
  • 变量名称:JMETER_HOME:
  • 变量值:D:\Develop\apache-jmeter-4.0  //即Jmeter的目录
  • 环境变量配置_将Jmeter环境变量添加的Path变量下

 

备注:jdk下载以及环境变量配置自行操作

六、Jmeter目录介绍

Bin目录:存放可执行文件和配置文件
Jmeter.bat: windows系统中JMeter的启动文件
ApacheJMeter.jar Java环境下的JMeter启动文件
Jmeter.log:日志文件
Jmeter.sh: linux系统中JMeter的启动文件
Jmeter.properties:系统配置文件
Jmeter-server.bat: windows分布式测试要用到的服务器配置
Jmeter-serve: linux分布式测试要用到的服务器配置
lib/ext/目录 就扩展插件:在配置元件中可以看到到的组件
extras目录 主要是用来做ant自动化和报告模板

七、Jmeter结构图

八、Jmeter基础操作

8.1 启动Jmeter,

点击Jmeter目录下的"jmeter.bat"文件,D:\Develop\apache-jmeter-4.0\bin\jmeter.bat

8.2Jmeter页面如下:

备注:Jmter4.0版本左侧的树形导航仅包含“测试计划”,“无工作台”

8.3测试计划

作用:

  • 本次测试所需要的【组件】都是基于测试计划添加;
  • 本次测试所有组件的设置与执行都基于测试计划;
  • 组件:完成指定功能代码段的封装;

8.4.添加线程组

 

右键点击“测试计划” -> “添加”-> “Threads(Users)” -> “线程组”

  • 线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
  • Ramp-Up Period(in seconds)准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为10,准备时长为2,那么需要2秒钟启动10个线程,也就是每秒钟启动5个线程。
  • 循环次数:每个线程发送请求的次数。如果线程数为10,循环次数为100,那么每个线程发送100次请求。总请求数为10*100=1000 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。
  • Delay Thread creation until needed:直到需要时延迟线程的创建。
  • 调度器:设置线程组启动的开始时间和结束时间(配置调度器时,需要勾选循环次数为永远)
  • 持续时间(秒):测试持续时间,会覆盖结束时间
  • 启动延迟(秒):测试延迟启动时间,会覆盖启动时间

8.5.添加http请求

右键点击“线程组” -> “添加” -> “Sampler” -> “HTTP请求”

接口地址:http://www.baidu.com/s?ie=utf-8&wd=jmeter接口测试

备注

1.自动重定向:仅对get方法有效,可以自动跳转到请求的新url,但不会显示转换url的详情

2.跟随重定向:针对get、post均有效,可以显示链接的请求过程

8.6.添加察看结果树

右键点击“线程组” -> “添加” -> “监听器” -> “察看结果树”

这时,我们运行Http请求,修改响应数据格式为“HTML Source Formatted”,可以看到本次搜索返回结果页面标题为”jmeter接口测试_百度搜索

8.7.Jmeter参数化

方式一:

添加用户自定义变量

我们可以添加用户自定义变量用以Http请求参数化,右键点击“线程组” -> “添加” -> “配置元件” -> “用户定义的变量”:

新增一个参数wd,存放搜索词"自动化测试"

并在Http请求中使用该参数,格式为:${wd}

方式二:"CSV 数据文件设置"

1.新建一个csv文件,保存如下数据:注意使用notepad编辑,将其转换为utf-8编码方式,否则中文在jmeter中显示乱码

2.右键点击“线程组” -> “添加” -> “配置元件” -> “CSV 数据文件设置”:

在Http请求中使用该参数,格式为:${keyword} ,并运行可以在结果树中查看到如下结果,则表示已从csv文件中读取对应的参数

8.8、添加断言

右键点击“HTTP请求” -> “添加”-> “断言” -> “响应断言”

校验返回的文本中是否包含搜索词,添加参数${keyword}到要测试的模式中:

8.9.添加断言结果

右键点击“HTTP请求” -> “添加”-> “监听器” -> “断言结果”,然后运行测试,即可看到断言的结果

 

九、Jmeter进阶操作

9.1.如何实现Jmeter使用POST方法发送json数据

添加"http信息头管理器”

右键点击“线程组”->"添加"->"配置元件"->"http信息头管理器",添加字段:Content-type:application/json

在http请求中选择"BodyData",编写Json数据

9.2.如何实现数据的关联

方式一:使用后置处理器,"正则表达式提取器"

右键点击“http请求”->"添加"->"后置处理器"->"正则表达式提取器"

(1)引用名称:下一个请求要引用的参数名称,如填写authld,则可用${authld}引用它。

(2)正则表达式:左边界(.+?)右边界

():括起来的部分就是要提取的。

.:匹配任何字符串。

+:一次或多次。

?:不要太贪婪,在找到第一个匹配项后停止。

(3)模板:用$$引用起来,如果在正则表达式中有多个正则表达式,则可以是$1$$2$等等,表示解析到的第几个值给title。如:$1$表示解析到的第1个值

(4)匹配数字:0代表随机取值,-1代表全部取值,通常情况下填0

(5)缺省值:如果参数没有取得到值,那默认给一个值让它取,我填的Error。

 

* 0 表示随机

* -1 表示全部

* 1表示第一个

* 2表示第二个

* ......

测试正常表达式:

引用提取的变量如下:

练习:

查看提取变量的结果可以使用debug Samper

使用表达式:"name":"(.+?)","code":(.+?),

使用模板:$0$,提取包含表达式在内的字符串。如下:

使用模板:$1$,提取包含表达式在内的字符串。如下:

使用模板:$2$,提取包含表达式在内的字符串。如下:

使用模板:$1$$2$,提取包含表达式在内的字符串。如下:

此时的则把2个(.*?)所匹配的内容拼接起来"city=江苏省320",要引用值,可以使用${city_1},${city_2}

方式二:使用后置处理器,"JSON Extractor"

右键点击“http请求”->"添加"->"JSON Extractor"

例如:在接口1中获取比赛id,然后在接口2中使用比赛id,获取当前节目的状态

在接口二中引用变量时,使用${sdspMatchId_1}

9.3.for-each控制器的使用

使用场景:循环使用变量

例如:接口二中的参数是动态获取接口一的返回的变量

在接口一中,提取的所有赛事的id

添加ForEach控制器

右键点击“线程组”->"添加"->"逻辑控制器"->"ForEach控制器"

在http请求中的变量引用forEach中的输出变量名${competitionid_mip_prd}

在结果树中查看到如下结果,forEach控制器下的http请求会遍历所有的competitionid

9.4.jmeter性能测试场景化操作

添加"Stepping Thread Group"

右键点击"测试计划"->"添加"->"Threads(Users)"->"Stepping Thread Group"

如下图:

(1)共30个线程即30个虚拟用户,每10s启动10个线程,然后运行20s

(2)启动30个线程后在持续运行120s

(3)每3s停止10s线程

备注:Jmeter默认没有"Stepping Thread Group",线程组,需要安装插件

(1):首先下载Jmeter插件管理器"jmeter-plugins-manager-1.3.jar",地址:https://jmeter-plugins.org/install/Install/

(2):下载完成后,将其放入jmeter安装目录下的lib/ext目录,然后重启jmeter,即可。

启动jemter,点击选项,最下面的一栏,如下图所示:

启动插件管理器-选择"Available Plugins" -选择"jpgc-Standard Set"->点击"Apply Changes and Restart Jmeter",安装即可

9.5.Jmeter聚合报告分析

右键点击“线程组”->"添加"->"监听器"->"聚合报告"

聚合报告参数详解:

  • Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值
  • #Samples:请求数——表示这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100
  • Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,以Transaction 为单位显示平均响应时间
  • Median:中位数,也就是 50% 用户的响应时间
  • 5. 90% Line:90% 用户的响应时间
  • Min:最小响应时间
  • Max:最大响应时间
  • Error%:错误率——错误请求数/请求总数
  • Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数
  • KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec

 

  • 一般而言,性能测试中我们需要重点关注的数据有: #Samples 请求数,Average 平均响应时间,Min 最小响应时间,Max 最大响应时间,Error% 错误率及Throughput 吞吐量。

 

9.6.Jmeter脚本封装以及执行的顺序

执行顺序

  • 配置元件
  • 前置处理器
  • 定时器
  • 取样器
  • 后置处理器 (如果 SampleResult 不为空)
  • 断言 (如果 SampleResult 不为空)
  • 监听器 (如果 SampleResult 不为空)

 

9.7.Jmeter命令行操作生成性能测试报告

  非GUI界面,命令说明:

                     -h 帮助

-n 非GUI模式

-t 指定要运行的 JMeter 测试脚本文件

-l 记录结果的文件 每次运行之前,(要确保之前没有运行过,即xxx.jtl不存在,不然报错)

-r Jmter.properties文件中指定的所有远程服务器

-e 在脚本运行结束后生成html报告

-o 用于存放html报告的目录(目录要为空,不然报错)

需要修改报告的输出格式:使用CSV,修改Jmeter目录下的"jmeter.properties"文件,例如:

"F:\接口\jmeter课件资料\apache-jmeter-4.0\bin\jmeter.properties"

修改如下字段:

jmeter.save.saveservice.output_format=csv

命令:

jmeter -n -t E:\project\智慧零售\测试工作\接口\平台接口.jmx -l result.jtl -e -o E:\project\智慧零售\测试工作\接口\html

Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8

Creating summariser <summary>

Created the tree successfully using E:\project\智慧零售\测试工作\接口\平台接口.jmx

Starting the test @ Thu Oct 10 15:16:17 CST 2019 (1570691777018)

Waiting for possible Shutdown/StopTestNow/Heapdump message on port 4445

summary =     29 in 00:00:01 =   38.7/s Avg:    20 Min:0 Max:   133 Err:     8 (27.59%)

Tidying up ...    @ Thu Oct 10 15:16:18 CST 2019 (1570691778190)

... end of run

19038992@CNHQ-19038992N E:\

报告如下:

十、Jmeter+ant+Jenkins实现自动化接口测试

10.1  Ant配置

1.下载ant

2.下载完成后配置ant的环境变量

3.Jmeter脚本已经录制好了,并测试通过,存在(xxx.jmx)脚本

4.将Jmeter所在的目录下extras子目录的ant-jmeter-1.1.1.jar复制到Ant所在目录lib目录下,这样运行Ant时才能找到"org.programmerplanet.ant.taskddfs.jmeter.JMeterTask"这个类,从而成功触发JMeter脚本

5、jmeter默认保存的是.csv格式的文件,所以我们先设置下bin/jmeter.properties文件内存,保存

jmeter.save.saveservice.output_format=xml

6.主要逻辑思路:F:\Test\apiTest\script.jmx脚本,生成.jtl文件放入

F:\Test\apiTest\resultlog\jtl文件中,ant在将相应的文件转换为对应的html文件放入F:\Test\apiTest\resultlog\html中

7.ant的编译文件build.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<project name="pc" default="all" basedir=".">
    <tstamp>
        <format property="time" pattern="yyyyMMddHHmm" />
    </tstamp>
    <!-- 需要改成自己本地的 Jmeter 目录-->
    <property name="jmeter.home" value="D:\Develop\apache-jmeter-4.0" />
    <!-- jmeter生成jtl格式的结果报告的路径-->
    <property name="jmeter.result.jtl.dir" value="F:\Test\apiTest\resultlog\jtl" />
    <!-- jmeter生成html格式的结果报告的路径-->   
    <property name="jmeter.result.html.dir" value="F:\Test\apiTest\resultlog\html" />
    <!-- 生成的报告的前缀 -->
    <property name="ReportName" value="TestReport" />
    <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" />
    <!-- 接收测试报告的邮箱 -->
    <property name="mail_from" value="502107543@qq.com" />
    <property name="mail_to" value="502107543@qq.com" />
    <!-- 电脑地址 -->
     <!-- <property name="ComputerName" value="jkqsh-l0285" />-->
    <target name="all">
        <antcall target="test" />
        <antcall target="report" />
<antcall target="send" />
    </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="F:\Test\apiTest\script" />
        </jmeter>
    </target>
 
    <path id="xslt.classpath">
  <!-- 解决报告中NAN字段显示问题-->
        <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>
    <!-- 发送邮件 -->
<target name="send" >
        <mail mailhost="smtp.suning.com" mailport="25" subject="Test Report!" messagemimetype="text/html" user="502107543@qq.com" password="xxxxx" >
        <from address="${mail_from}"/>
        <to address="${mail_to}"/>
        <message>This email was sent automatically by ANT. Please check the automation test report. Thank you!</message>
<attachments>
<fileset dir="${jmeter.result.html.dir}">
<include name="${ReportName}${time}.html"/>
<include name="collapse.png" />
                <include name="expand.png" />
</fileset>
</attachments>
</mail>
    </target>
</project>

生成报告如下:

 

10.2  Jenkins 搭建(By tomcat)

1、 Jenkins官网https://jenkins.io/download/下载最新版本jenkins.war

2、将jenkins.war 放到D:\Develop\tomcat7\webapps,目录下:

3.启动tomcat 服务:"startup.bat"

4、出现如下信息,则表示Jenkins已启动OK

5.在浏览器中输入地址:http://localhost:8080/jenkins/

6.新建任务

任务配置:

 

每行由 5 个值组成(空格或TAB分隔),分别表示 分(0-59)、时(0-23)、日(1-31)、月(1-12)、周(0-7, 0/7=周日)

使用ant执行脚本

保存后,点击Build now

编译完成后可以点击查看控制台的输出如下:

生成的html报告如下:

  • 2
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值