jmeter接口测试项目实战详解,零基础也能学

news2024/9/21 10:46:14

1.什么是jmeter?

JMeter是100%完全由Java语言编写的,免费的开源软件,是非常优秀的性能测试和接口测试工具,支持主流协议的测试

2.jmeter能做什么?

1.JMeter是100%完全由Java语言编写的软件性能测试的GUI的测试工具,方便用户可以无代码的方式编写性能测试脚本。JMeter的特点可以总结为如下:

2.JMerer测试工具不仅仅可以做性能测试,也可以做API的测试,可以和构建工具整合起来,如Ant,Maven,以及CI工具的整合,以及也可以和Grafana可视化整合起来

3.JMeter支持多种协议进行性能测试,如HTTP,HTTPS,WS

3.jmeter环境搭建

3.1前提:

1、需要安装JDK的环境,配置java环境变量(参考:)

2、查看java环境是否搭建成功:javac / java -version

3.2jmeter下载:

下载地址:

3.3jmeter环境搭建:
3.3.1mac当中jmeter环境搭建:

控制台: sudo vim .bash_profile

把下面的复制进去,JMETER_HOME=后面是jmeter的路径,改成自己的路径

#JMETER export JMETER_HOME=/Applications/tools/apache-jmeter-5.4.1 export PATH=$JMETER_HOME/bin:$PATH

3.4jmeter基本配置
3.4.1.切换语言

环境搭建成功之后,就可以直接在控制台输入jmeter启动,启动成功后,先切换成中文

 3.4.2.安装插件

第一步:选项--插件管理

第二步:在搜索框输入json 勾选第一行 点击右下角安装插件

4.jmeter组件

4.1测试计划

在JMeter的测试工具中,把测试计划可以理解为是一个工程的目录,也就是说每一个脚本都可以说是一个测试计划,在一个测试计划里面包含了很多的线程组来进行执行,测试计划也是JMeter脚本的根节点。

4.2线程组

测试套件,等于postman里面的集合。JMerer通过线程组来驱动多个(也可以理解为LR⼯具⾥⾯的虚拟⽤户)运⾏测试脚本对⽬标服务器发起⼤量的⽹络请求,在每个客户端上可以运⾏多个线程组,也就是说⼀个测试计划⾥⾯可以包含N个线程组

在JMeter的测试⼯具中,依据业务的形态来设置它的⽬录结果,但是设置性能测试的场景,主要是在线程组中来进⾏设置。JMeter的线程组可以理解为是建⽴了⼀个线程池,在执⾏的过程中处理线程组⾥⾯的各个业务逻辑,线程组的信息具体如下:

4.2.1取样器错误后要执⾏的动作

这部分可以理解为当客户端向服务端发送请求后,以及发送请求的过程中出错后的异常处理⽅式。

继续

如果有⼀个请求错误,其他的请求会继续,不会因为有⼀个请求错误的导致其他请求终⽌。

启动下⼀个进程循环

如果请求出现问题,同⼀脚本中的其他请求就都不再执⾏,直接执⾏下⼀个进程的信息。如登录后下⼀个请求是查看个⼈主⻚,但是因为登录出错,下个接⼝查看个⼈主⻚就不会被执⾏。

停⽌线程

停⽌线程指的是如果请求失败,就停⽌当前线程执⾏,不再继续执⾏。如果线程数很多的,那么导致的结果是停⽌的线程就会很多,处于真正运⾏的线程会很少,最后导致服务器的负载不够,⼀般不建议构选改选项。

停⽌测试

如果请求失败,那么停⽌所有线程执⾏,也就是说停⽌整个测试。

⽴即停⽌测试

如果请求失败,⽴即停⽌整个测试场景的执⾏。

4.2.2线程属性

线程数

⼀个线程可以理解为对应模拟⼀个⽤户,所以线程数越多,那么也就认为可以模拟的⽤户数越多。

Ramp-Up时间(秒)

 
  1. 该属性指的是所有线程从启动到开始运⾏的时间间隔,单位是秒,也就是说所有线程在多⻓时间内开始执⾏,如线

  2. 程数设置50,设置的时间为5秒,那么计算的公式为:

  3. 每秒执⾏线程数=线程数/Ramp-Up

  4. 具体如:

  5. 如设置的线程数为50,Ramp-up的时间为10,那么也就是说开启执⾏后,每秒会启动5个线程,如果Ramp-Up设置为

  6. 0,那么开始执⾏后,50个线程会⽴刻启动

循环次数

循环次数可以理解为,请求的重复次数。如果选择“永远”,那么请求将⼀直进⾏,不建议这样操作。

延迟创建线程直到需要如50个线程数,Ramp-Up时间是10秒,执⾏后线程是全部就绪的,那么就是每隔1秒启动5个线程数

调度器

思维调度器可以理解为设置何时开始运⾏。

持续时间

测试计划持续多⻓时间

启动延迟

从当前时间延迟多⻓时间开始运⾏测试,也就是说点击执⾏后,仅仅是做初始化的场景,不会执⾏测试,等待延迟

到达后开始运⾏测试,执⾏的时间为持续时间设置的时间。 

4.3jmeter监听器
4.3.1聚合报告

聚合报告是以表格的形式来显示取样器的结果信息,如果不同的取样器拥有相同的名字,那么在聚合报告会显示在⼀⾏⾥⾯,那么⼀般来说,聚合报告都是根据取样器来显示每个取样器的执⾏结果信息。聚合报告的信息具体如下:


Label:取样器名称

Samples:取样器运⾏次数

Average:单个请求的平均响应时间

Median:50%请求的响应时间

90%Line:90%请求响应时间

95%Line:95%请求响应时间

99%Line:99%请求的响应时间

Min:请求的最⼩响应时间

Max:请求的最⼤响应时间

Std.Dev:响应时间的标准⽅差

Error%:事务错误率

Throughput:吞吐率,也就是TPS

KB/sec:每秒数据包流量

Avg.Bytes:平均数据流量

Received KB/sec:每秒从服务器端接收到的数据量

SentKB/sec:每秒从客户端发送的请求的数量
4.3.2后端监听器

后端监听器可以把JMeter与influxdb,grafana整合起来,把性能测试过程中的数据存储到influxdb,然后最后显示在grafana的可视化界⾯中。

4.3.3察看结果树

结果树能够很清晰的显示每个取样器执⾏的结果信息,以及每个取样器的⽹络请求信息

4.3.4取样器

取样器是JMeter的基本单元,⼀般性的各种都是取样器来发起的

HTTP请求

可以把它理解为⼀个独⽴的测试⽤例,或者说是⼀个测试场景。

4.3.5配置元件

配置元件可以理解为对取样器的各种请求进⾏辅助配置。

HTTP信息头管理器

每个HTTP的请求都是需要请求头的信息的,那么可以把请求头的信息添加到HTTP信息头管理器,然后需要把它放在取样器的前⾯。

HTTP Cookie管理器

在系统登录成功后需要访问系统中的其他⽹络请求,但是需要记住⽤户登录成功后的sessionID的信息,那么使⽤HTTP Cookie管理器就可以⾃动记录下这些信息。

在JMeter中,如果一个网站使用的是session来实现的,但是jmeter无法获取登录成功后的sessionid,那么也就导致登录后的请求,都会重定向到登录的页面,也就是说无法验证我是谁,可以使用cookie管理器来解决它内部会记住所有网络请求的cookie信息,并且会让所有的网络请求间的cookie共享,如下图:

⽤户定义的变量

在测试中,如果某些请求参数存在变化,⽐如是⽤户名和密码,那么就可以单独的独⽴出来,⽤户定义的变量可以

很轻松的来解决这部分的问题。

HTTP请求默认值

每个取样器发送⽹络请求的时候都是需要IP地址等信息,但是使⽤HTTP请求默认值可以很轻松的把请求的地址独

⽴出来。

4.3.6逻辑控制器

逻辑控制器主要控制JMeter的执⾏顺序,它的存在使整体的测试的灵活度更⾼。⽐如接⼝A执⾏完成后得到的结果

信息,经过逻辑控制器判断之后,再执⾏接⼝B或者是接⼝C。⼀般性的⽽⾔,简单控制器使⽤的最多,但是也看具

体的场景进⾏设置。

4.3.7前置处理器

在执⾏取样器之前,需要进⾏初始化的设置,等价于UnitTest测试框架中的setUp()的⽅法。 

用户参数

我们⼀个测试点,需要多次操作,并且每次操作的数据都是不⼀样的测试步骤⼀致,但是测试数据每次不⼀样(前置处理器)

比如:登录的账户

CSV 数据⽂件设置

将数据放到一个文件里直接调用(配置元件里面)

记事本

 csv文件

4.3.8后置处理器

在执⾏取样器之后执⾏,如API测试中经常会涉及到上个API的输出是下个API的输⼊,那么就会使⽤到后置处理器

中的正则表达式提取器或者是JSON提取器,BeanShell断⾔等。

正则表达式提取器:(后置处理器--正则表达式提取器)

测试地址

  •  模板:⽤$$引⽤起来,如果在正则表达式中有多个正则表达式(多个括号括起来的东东),则可以是$2$,$3$等等,表示解析到的第⼏个值给user_id。例如:$1$表示匹配到的第⼀个值
  • 匹配数字:0代表随机取值,-1代表所有值,此时提取结果是⼀个数组,其余正整数代表第⼏个匹配的内容提取出来。如果匹配数字选择的是-1,还可以通过 {user_id_2}来取第2个匹配的内容。
  • 缺省值:正则匹配失败时,取的值
4.3.9断⾔

主要⽤来验证返回的结果数据与预期的结果数据是否完全匹配,⼀般最常⽤的是响应断⾔和JSON断⾔。

4.3.10定时器

定时器主要⽤来在测试计划执⾏的过程中,定时器⽤来缓减线程运⾏,⽐如刻意的等待3秒后再执⾏下⼀个请求的信息

延时等待

api的测试用例执行的速度非常快的,基本只在毫秒级别的,但是在某些时候,由于业务的特性吗,想让他延迟几秒钟执行,那么这个时候就用延时等待(定时器--固定定时器)

5.jmeter的目录内容:

bin目录:可执行的应用程序

extras目录:扩展插件目录

lib目录:所用到的插件目录,里面均为jar包

6.Jmeter动态参数的解决思路是什么?

假设一个图书管理系统,可以进行增删改查,我们在登录成功之后,会返回一个token值,通过登录接口的后置处理器中的json提取器或者正则表达式提取器,我们一般用json提取器,定义一个变量来存储登录成功后的token,在下个接口中我们在请求头当中调用这个变量。

7.jmeter里面调用变量是什么怎么调用?

在请求头添加token jwt ${token}

添加--配置元件--http信息头管理器--添加

8.测试报告 

8.1 认识ant
8.1.1 ant下载

下载地址:

8.1.2ant环境变量配置:

mac配置ant环境变量:

#ant环境变量

export ANT_HOME=/Applications/tools/apache-ant-1.10.1

export PATH=$ANT_HOME/bin:$PATH

windows配置ant环境变量:

把他(目录到bin目录)配置到path环境变量

8.1.3验证环境

控制台输入ant,现实如下说明环境已经搭建好

8.2 认识build.xml文件

ant构建工具,该构建工具执行的时候依赖于build.xml的文件,在build.xml文件里面会定义具体执行的脚本,执行的顺序,以及测试报告存储的目录


1 xml version="1.0" encoding="UTF8"?>

2

3 <project name="ant-jmeter-test" default="run" basedir=".">

4

5 <property name="jmeterPath" value="/Applications/tools/apache-jmeter-5.4.1"/>

6 <property name="mailhost" value="smtp.sina.cn"/>

7 <property name="username" value="wuya1303@sina.com"/>

8 <property name="password" value="admin123"/>

9 <property name="mailfrom" value="wuya1303@sina.com"/>

10 <property name="mail_to" value="1730645056@qq.com"/>

11 <property name="mailsubject" value="无涯课堂API测试报告"/>

12 <property name="mail_port" value="25"/>

13 <property name="message" value="Hi!请查收下,无涯课堂API测试报告,如有任何疑问,请联系我,谢谢!"/>

14

15

16 <tstamp>

17 <format property="time" pattern="yyyyMMddhhmm" />

18 </tstamp>

19 <property name="jmeter.home" value="${jmeterPath}" />

20 <property name="jmeter.result.jtl.dir" value="${jmeterPath}\tests\report\jtl" />

21 <property name="jmeter.result.html.dir" value="${jmeterPath}\tests\report\html" />

22 <property name="htmlReportNameSummary" value="testReport" />

23 <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${htmlReportNameSummary}${time}.jtl" />

24 <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${htmlReportNameSummary}${time}.html" />

25

26

27 <target name="run">

28 <antcall target="test" />

29 <antcall target="report" />

30 <antcall target="sendEmail" />

31 </target>

32

33 <!--执行接口测试-->

34 <target name="test">

35 <echo>执行接口自动化测试</echo>

36 <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />

37 <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">

38 <!--要执行的测试脚本-->

39 <testplans dir="${jmeterPath}\tests\script" includes="1212.jmx" />

40 <property name="jmeter.save.saveservice.output_format" value="xml"/>

41 </jmeter>

42 </target>

43

44 <!--解决报告中NAN字段显示问题-->

45 <path id="xslt.classpath">

46 <fileset dir="${jmeter.home}/lib" includes="xalan-2.7.2.jar"/>

47 <fileset dir="${jmeter.home}/lib" includes="serializer-2.7.2.jar"/>

48 </path>

49

50 <!--生成HTML测试报告-->

51 <target name="report">

52 <echo>生成接口自动测试报告</echo>

53 <xslt classpathref="xslt.classpath"

54 force="true"

55 in="${jmeter.result.jtlName}" out="${jmeter.result.htmlName}"

56 style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl" />

57

58 <!--复制图片-->

59 <copy todir="${jmeter.result.html.dir}">

60 <fileset dir="${jmeter.home}/extras">

61 <include name="collapse.png" />

62 <include name="expand.png" />

63 </fileset>

64 </copy>

65 </target>

66 <!--自动发送邮件-->

67 <target name="sendEmail">

68 <echo>发送自动化测试报告</echo>

69 <mail mailhost="${mailhost}"

70 ssl="ture"

71 user="${username}"

72 password="${password}"

73 mailport="${mail_port}"

74 subject="${mailsubject}"

75 messagemimetype="text/html"

76 tolist="${mail_to}">

77 <from address="${mailfrom}" />

78 <attachments>

79 <fileset dir="${jmeter.result.html.dir}">

80 <include name="${htmlReportNameSummary}${time}.html"/>

81 <include name="collapse.png" />

82 <include name="expand.png" />

83 </fileset>

84 </attachments>

85 <message>

86 ${message}

87 </message>

88 </mail>

89 </target>

90 </project>
8.2目录结构

tests

用来存放测试的所有资料

report

用来存放测试报告 里面再创建html和jtl的文件夹

scrip

用来存放测试脚本

8.3自动发送邮件:

1、 在JMeter的extras下找到ant-jmeter-1.1.1.jar,把它copy到ant的apache-ant-1.10.0\lib下。

2、自动发送邮件,需要三个jar包,分别是:activation.jar,commons-email-1.2.jar,mail.jar,这三个文件放在ant的lib目录下

3、输出测试报告的配置

打开jmeter的bin目录下的jmeter.properties文件,做如下修改:
把jmeter.save.saveservice.output_format=csv
修改为jmeter.save.saveservice.output_format=xml

4、build文件修改代码:

    1、修改jmeter的路径

    2、修改收到测试报告的邮箱

  3、修改要执行测试用例的路径和脚本

6.生成测试报告:在控制台进入到测试用例tests的目录下,输入ant

7.生成的报告在哪打开?

jmeter--tests--report--html

最下面就是你最新生成的 点击就能直接打开

生成的测试报告如下:

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2070154.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

书生大模型实战营(第三期闯关大挑战)- 进阶岛 第六关 MindSearch CPU-only 版部署

0 项目介绍 书生大模型实战营三期进阶岛 增加了MindSearch 快速部署任务关卡。之前的任务是在彩蛋岛的任务&#xff0c;可能之前彩蛋岛的任务中用到了DuckDuckGoSearch 这个是国外网络才好访问&#xff0c;实际使用过程中需要通过一些魔法才能解决此任务。很多小伙伴卡在网络这…

uniapp检测手机是否打开定位权限Vue3-直接复制粘贴

安卓示例&#xff1a; 苹果示例&#xff1a; 代码实现&#xff08;vue3写法&#xff09;&#xff1a; const checkGPS ()>{console.log(开始监听GPS状态);let system uni.getSystemInfoSync(); // 获取系统信息if (system.platform android) { // 判断平台var context …

【数据中心小知识】电力需求如此重要,以至于数据中心通常以耗电量而非建筑面积来衡量

我们通常认为软件是完全数字化的存在&#xff0c;是一个完全独立于“原子”世界的“位”世界。我们可以在手机上下载无限量的数据&#xff0c;而手机却不会因此而变重&#xff1b;我们可以观看数百部电影而不用接触物理磁盘&#xff1b;我们可以收集数百本书而不需要拥有一张纸…

Comsol 考虑波导的二维星形空穴型声子晶体线缺陷压电能量收集优化方案

参考文献&#xff1a;Yang X , Zhong J , Xiang J .Optimization scheme for piezoelectric energy harvesting in line-defect for 2D starlike hole-type phononic crystals considering waveguides[J].AIP Advances, 2022, 12(1):-. 利用声子晶体(PnC)增强弹性波能收集是电…

SD差点挂掉,后备军们兴奋入场,AI生图应用正在爆发?

前后不到一个月&#xff0c;两个开源生图模型相继上线。 首先是由称得上 SD 原班人马的黑森林实验室推出的 FLUX.1。黑森林实验室由 Stable Diffusion 的核心开发者 Robin Rombach 领衔创立&#xff0c;团队成员基本上都是 Stable Diffusion 3 的作者&#xff0c;其中三名元老…

学习yolo+Java+opencv简单案例(二)

对于一些源码可以参考我上一篇博客&#xff1a;学习yoloJavaopencv简单案例&#xff08;一&#xff09;-CSDN博客 这篇文章主要演示的是使用面向对象优雅的实现图像识别&#xff1a; 也有接口演示&#xff0c;包括将Onnx对象放入Bean中程序跑起来就初始化一次&#xff08;重点…

AI产品经理的35岁危机_产品经理会有35岁危机吗

01 被裁的35岁朋友 去年&#xff0c;一家知名公司大裁员&#xff0c;很多 35 岁的非高管员工被牵连&#xff0c;包括我的一位朋友。 我第一时间联系了他&#xff0c;看看有没有能够帮上忙的地方。 我&#xff1a;传闻XX公司要收购你们&#xff1f; 朋友&#xff1a;是的。我要…

shell程序设计入门(二)

shell程序设计入门&#xff08;二&#xff09; 导语shell语法变量引号环境变量参数变量 条件控制结构if else循环forwhileuntil caseAND和ORANDOR 函数 总结参考文献 导语 shell语法 变量 shell变量和C语言的标识符命名的要求类似&#xff0c;在shell中&#xff0c;可以在变…

“易碎”的留守农村人,都在被AI智能监控“兜住”

文 | 智能相对论 作者 | 陈泊丞 “村里的四伯走了&#xff0c;是第二天傍晚被邻居家的七婶发现的。” 那晚&#xff0c;和家里的父母通电话&#xff0c;他们突然提起了这件事。 四伯虽说是父亲的堂兄弟&#xff0c;但是也只是辈分相当&#xff0c;在年纪上比父亲大上许多。…

零知识证明;Halo2原理;举例说明算术电路、转换为约束系统、多项式承诺举例形式和数值;PLANK算术化;

目录 零知识证明 简单举例说明原理 原理概述 Halo2原理 Halo2原理 举例说明关键性概念 举例说明算术电路、转换为约束系统、多项式承诺举例形式和数值 1. 算术电路构建 2. 转换为约束系统 3. 多项式承诺举例形式和数值 Halo2简单示例 PLANK算术化 基础概念 简单例…

如何维护好客户关系?

在这个信息爆炸、竞争激烈的市场环境中&#xff0c;每一位客户的信任与支持都是我们最宝贵的财富。 今天&#xff0c;就让我们一起探索那些温暖人心的秘诀&#xff0c;学习如何像匠人一样&#xff0c;精心维护与每一位客户的关系&#xff0c;让每一次互动都成为加深情感的桥梁。…

XTuner微调个人小助手认知

1. 环境准备 将Tutorial仓库的资料克隆到本地 mkdir -p /root/InternLM/Tutorial git clone -b camp3 https://github.com/InternLM/Tutorial /root/InternLM/Tutorial 创建一个叫做demo的虚拟环境 # 创建虚拟环境 conda create -n demo python3.10 -y# 激活虚拟环境&…

c#实现生成AES加密的密钥key(密钥长度128位,也就是32个字符)对标Java中的AES加密(SHA1PRNG+Hex.encodeHexString)

最近在做某省份的一个健康云平台检验结果互认&#xff0c;我们的系统用的是C#&#xff0c;里面要求生成一个AES加密的密钥key&#xff08;密钥长度128位&#xff0c;也就是32个字符&#xff09;&#xff0c;后面要用这个密钥key完成一系列加密操作&#xff0c;给的实例只有Java…

http应用层协议

一、万维网 用来存放各种资源的网络。 1、如何在万维网中表示一个资源 ? url ——统一资源定位符&#xff1b; 形式&#xff1a; <协议>://<主机>:<端口>/<路径>&#xff1b; <主机>:<端口>/<路径> //表示了资源所在的…

彩色墨水屏(电子纸)智能工牌,开启职场未来想象

随着技术的进步和生活方式的变革&#xff0c;越来越多职场人士希望佩戴的工牌能够展现独特的个人风格和专业特点&#xff0c;实现自动打卡、门禁管理等功能&#xff0c;提高工作效率&#xff0c;让职场生活更加便捷。 ​因此&#xff0c;快节奏的现代职场需一个既能满足员工对…

shadertoy sdSegment 原理

sdSegment 原理 float sdSegment( in vec2 p, in vec2 a, in vec2 b ) {vec2 pa p-a, ba b-a;float h clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 );return length( pa - ba*h ); }原理: u ⃗ \vec{u} u 在 v ⃗ \vec{v} v 在夹角是 θ \theta θ 的投影长度是: &#xff…

HTML5休闲小游戏《猫猫咖啡店》源码,引流、刷广告利器

HTML5休闲小游戏《猫猫咖啡店》源码&#xff0c;直接把源码上传到服务器就能使用了&#xff01; 下载链接&#xff1a;https://www.huzhan.com/code/goods468502.html

vscode修改选中文字颜色及当前tab颜色

VSCode-》首选项-》设置->-》搜color&#xff0c;找到&#xff1a;Workbench&#xff1a;Color Customizations&#xff0c;点击&#xff1a;在 settings.json 中编辑 加上 选中的文字内容的 配置 "workbench.colorCustomizations": {//设置用户选中代码段的颜色&…

贪心+栈。。

前言&#xff1a;这个题目一开始我没想通的就是如果s当前的一个字符或者之后的一个字符和当前t的尾巴是一样的&#xff0c;那么优先选哪一个&#xff0c;其实这个就要优先选t的 class Solution { public:string robotWithString(string s) {string ans;int cnt[26]{}, min 0; …

2024年AI编程新手必备工具,快速提升技能!

在当今这个技术日新月异的时代&#xff0c;AI编程已成为一个越来越重要的领域&#xff0c;吸引着众多新手和希望提升自己的中级开发者进入。 对于这些渴望在AI领域快速成长的人来说&#xff0c;选择合适的编程工具是至关重要的。 接下来&#xff0c;我们将深入探讨几款市场上…