聊一聊Jmeter的简单使用

背景

近段时间,团队想补强测试这一块,减少重复性的一些工作,让一些内容可以自动化起来,同时对开发同学写的接口的性能也开始有所要求了。

考虑到团队内没有人有测试开发的经验,所以前期的选择还是以工具为主,编程为辅。

说起工具,用的比较多的是 Jmeter ,它即可以处理自动化的测试,也可以完成性能测试。

后面也会不定期更新一些在使用 Jmeter 时候的经验。

开篇往往都会是比较简单的内容。

所以这一篇写的内容主要是拿一个 HTTP 接口出来,然后通过配置,在 Jmeter 中成功访问这个接口,并断言请求成功与否,查看结果。

最后还会通过 CLI 来跑测试计划,输出 HTML 格式的报告。

下面就开始吧!

准备一个 HTTP 接口

这里创建一个 ASP.NET Core Web API 项目,同时写一个简单到不能再简单的接口,直接返回一个 JSON 串。

[ApiController]
[Route("[controller]")]
public class RunController : ControllerBase
{        [HttpGet]public IActionResult Get(){return Ok(new {code = 0,msg = "ok"});}
}

把这个项目启动起来,暴露出 8532 端口。

下面就开始在 Jmeter 里面对这个接口进行配置和调试了。

添加线程组

在测试计划添加一个线程组 (Thread Group)

添加完成之后可以看到下面的内容

在线程组中,最为主要的就是 Thread Properties 的配置了,不过这里先不对这个进行修改,先保持默认值。

因为首先要做的事情是,把测试接口调试通!如果接口没调好,设置再多的线程也没有意义!

所以这里只把名字改成了 sample1 。

线程组有了,就相当于有了一个骨架,下面就要对这个线程组填充内容,让它丰富起来。

由于我们主要是对 HTTP 接口进行测试,所以大部分内容会是和 HTTP 相关的。

添加 HTTP 请求默认值

在线程组里面,添加一个 HTTP 请求默认值的配置元件 (HTTP Request Defaults)

这里一般会配置一些不怎么变的东西,正常就是接口的域名信息,指定好之后,后面就可以不用在填接口的域名了。

下面就把测试接口的 IP 和 端口填上去。

添加 HTTP 信息头管理器

请求头,大部分接口都会有要求的,最常见的应该就是 Content-Type 。

这里就可以添加一个 HTTP 信息头管理器(HTTP Header Manager)来管理这些请求头。

测试接口是 JSON 格式的,所以要把 Content-Typeapplication/json 配置上去。

再下一步就是真正的请求了。

添加 HTTP 请求

在线程组里面添加一个 HTTP Request 类型的 Sampler。

这一个步骤要根据对应的测试接口填写对应的信息。

以测试接口为例:

  1. Web Server 这一块内容不用填,我们在 HTTP 请求默认值 里面已经配置了。

  2. 测试接口是 GET 请求, 测试接口的相对路径是 /run

  3. 接口参数填了 a=b&c=d ,因为是 GET 请求,放到相对路径上面去也是可以的。

到这里的话,对这个接口的请求内容已经准备好了。

要怎么判断请求这个接口是不是成功了呢?

接口成功与否,一般会有几类标识,一类是当状态码为 2xx 时就当作是成功的,一类是返回的 JSON 里面包含了一个 code ,用这个 code 的值来判断。

上面的测试接口是属于第二类,所以要判断的是返回内容里面 code 的具体值是什么。

回想到单元测试,会有一个断言的步骤去判断是不是达到了预期的结果。

同样的,Jmeter 这里也有这个内容。这里选用的是 JSON 断言。

添加 JSON 断言

在线程组里面添加一个 JSON 断言(JSON Assertion)

示例接口返回 code 为 0 时,才是成功的,所以可以这样填写

首先是判断节点存在与否,其次是勾选断言值,填上期望值。

现在请求有了,断言有了,要怎么查看结果呢?

这里就要请出监听器这个神奇的东西了。

添加监听器

监听器的种类有很多,这里选择查看结果树(View Results Tree)和聚合报告(Aggregate Report)两个。

这个时候,整一个测试计划是这样的:

运行一下,打开查看结果树,可以看到测试接口已经跑成功了,返回的 code 确实也是 0。

如果把 JSON 断言里面的 code 调整成 1,查看结果树这里就会有错误提示:

再来看看聚合报告长什么样:

主要就是平均响应时间,中位数,错误率,吞吐量这些常见指标。

到这里是不是就结束了呢?

当然没有结束,从刚才的结果来看,明显才请求了一次接口,请求一次接口怎么测试接口的压力呢?

其实一直到看到结果是能成功请求接口,返回正常的数据了,才算是刚刚把接口那部分配置调试好,并没有真正的给压力到测试接口。

前面在创建线程组的时候,采取的都是默认值 1,下面可以调整线程组的一些配置来达到压测的目的。

好比说把线程数调成 100,循环 100 次。

CLI 运行 Jmeter

在启动 Jmeter 时,可以看到下面这段话。

就是让我们做压力测试的时候不要用图形化界面,而是用脚本来操作。

要用脚本操作,还是要先有配置文件,这个配置文件在保存测试计划的那个 jmx 文件。

下面是几个常用的参数说明:

参数名含义
-n指定 JMeter 将在 cli 模式下运行
-t包含测试计划的 jmx 文件名称
-l记录测试结果的 jtl 文件名称
-j记录 Jmeter 运行日志的文件名称
-g输出报告文件( .csv 文件)
-e生成 html 格式的测试报表
-o生成测试报表的文件夹 文件夹不存在或为空

下面我们通过 CLI 来执行一下,并生成一个 HTML 报告。

 .\jmeter.bat -n -t ..\..\jmeterfiles\jmx\sample1.jmx -l result\sample1.jtl -e -o result\sample1

sample1.jmx 就是上面保存的脚本文件。

同时看看输出的测试报告

打开 index.html 可以看到测试报告了。

这个面板的内容是很详细的。

写在最后

这一篇内容比较基础,就是走了一遍 Jmeter 的基本操作。

对于一些常见的参数化,引用自定义 jar 包这些内容还没有介绍到。

相对来说,Jmeter 在测试的场景用起来还是比较 OK 的。

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

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

相关文章

win7录制系统声音 加入立体声混音 camtasia recorder录屏

很多时候,我们录屏的时候都并不是非得通过麦克风来说话,比如,你想跟好友分享一首歌曲的时候,那么你总不能把麦拿到喇叭那儿录制噻,那样录出来的不仅很麻烦,而且歌曲质量很差!那么怎么录制系统正…

百万大奖参赛攻略 | 让程序员走向财富自由

还在担忧你的区块链项目曝光量小、品牌商业化进程慢、得不到投资人关注吗?这里有站上巨人肩膀的最全攻略!2018年金链盟中国区块链应用大赛,开始向全国企事业单位、科研机构、项目团队、开发者队伍征集应用案例啦!想参加的你们&…

Web通用令牌JwtBuilder

JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。Nuget包:NewLife.Core、NewLife.Secrurity源码地址&a…

mysql---复杂的sql语句join的使用(left join,right join)

2019独角兽企业重金招聘Python工程师标准>>> SELECT u.*,count(u.id) AS sum FROM user AS uLEFT JOIN post AS pON p.user_id u.id RIGHT JOIN user_has_group as upON up.user_id u.id RIGHT JOIN user_has_email as ueON ue.user_id u.idWHERE u.username ! A…

你真的不了解这个地球

全世界有3.14 % 的人已经关注了数据与算法之美1. 首先来看看地球,看起来不错哟,地球~2. 图中圈圈里头的人口,比其他地区的所有总和都还要多。3. 以整个地球史来看,曾活过的人类高达1150亿人,其中包括现存的…

Squid反向代理加速缓存+负载均衡实验架构

实验环境: 公司有两台web服务器,运行同一套网站,读取同一台mysql数据库。 两台web服务器的主机名如下: test1.com 192.168.1.119 test2.com 192.168.1.120 squid服务器ip:192.168.1.123 DNS: 192.168.9.254 实验思路&a…

levedb 导入 mysql_LevelDB-初始篇

简介:LevelDB是一个基于本地文件的存储引擎,非分布式存储引擎,原理基于BigTable(LSM文件树),无索引机制,存储条目为Key-value。适用于保存数据缓存、日志存储、高速缓存等应用,主要是避免RPC请求带来的延迟…

当时我就震惊了:无穷带来的各种悖论

全世界有3.14 % 的人已经关注了数据与算法之美希尔伯特旅馆悖论(Hilberts paradox of Grand Hotel)希尔伯特旅馆有无限个房间,并且每个房间都住了客人。一天来了一个新客人,旅馆老板说:“虽然我们已经客满,…

砸了140亿的计算机视觉,未来到底如何?

指纹解锁、刷脸识别、语音转换文字、机器人看病、Alphago我们已经深刻的感受到,人工智能在改变我们的工作方式和认知。通过 SAS 针对企业人工自能就绪调研的报告可以看到,大部分企业认为人工智能还处于初期阶段,“目前,我们正在部…

记一次 .NET WPF布草管理系统 挂死分析

一:背景 1. 讲故事这几天看的 dump 有点多,有点伤神伤脑,晚上做梦都是dump,今天早上头晕晕的到公司就听到背后同事抱怨他负责的WPF程序挂死了,然后测试的小姑娘也跟着抱怨。。。嗨,也不知道是哪一个迭代改出…

轻量级HTTP服务器Nginx(安装篇)

一、下载与安装Nginx Nginx的官方网站是http://sysoev.ru/nginx/,英文主页为http://nginx.net,从这里可以获得Nginx的最新版本信息。Nginx有三个版本:稳定版、开发版和历史稳定版。开发版更新较快,包含最新的功能和bug的修复…

中国人的数学为什么好,为什么不好

全世界有3.14 % 的人已经关注了数据与算法之美世界人民已经懒得吐槽美国学生的数学水平了,正如他们已习惯于惊叹中国学生的天才。脱离计算器就不会四则运算,把sinx/n算成“six”,美国学生闹的笑话层出不穷,每隔一段时间&#xff0…

.NET Core 调用百度 PaddleOCR 识别图文

了解 PaddleOCR 之前,首先了解一下 PaddlePaddle。飞桨(PaddlePaddle)以百度多年的深度学习技术研究和业务应用为基础,是中国首个开源开放、技术领先、功能完备的产业级深度学习平台,集深度学习核心训练和推理框架、基础模型库、端到端开发套…

大数据时代,数据科学都有些啥?

暑假咻地一下过完啦,前几天,小天介绍了关于数模课程的开学季限时优惠(传送门),今天要介绍的是python课程。接下来,小天来详细说明一下!19月17日~23日报名《python机器学习实战》即可享受限时330…

那些被.NET大厂拒绝的大佬们,究竟弱在哪里?

如火如荼的金三银四跳槽季迎来尾声,几家欢喜几家愁,既看到腾讯阿里百度的大厂offer,又羡慕30k、40k、50k的高薪,更多其实还是各种面试失蹄的故事。成功的案例五花八门,而失败的原因却千篇一律。据统计,约70…

在python中strip_python中strip()函数怎么用?

python中strip()函数怎么用?发布时间:2020-05-19 16:57:38来源:亿速云阅读:182作者:Leah今天小编为大家分享的是python中strip()函数的使用方法。代码详细容易理解,为此分享给大家做个参考。一起跟随小编过…

有哪些经济学理论可以用在谈恋爱上?

全世界有3.14 % 的人已经关注了数据与算法之美大概两周前回加拿大的航班上,我在机舱尾部跟一位空姐聊了很久。大概两周前回加拿大的航班上,我在机舱尾部跟一位空姐聊了很久。看到浮标沉下去了,我却把鱼竿放回地上,难道我是素食主义…

python 局部变量 占内存吗_Python中全局变量和局部变量的理解与区别

前言学过编程的人应该对全局变量与局部变量这两个名词并不陌生,Python也同多数编程语言一样,也有全局变量与局部变量的概念但是与其他编程语言又有所不同全局变量与局部变量两者的本质区别就是在于作用域用通俗的话来理解的话,全局变量是在整…

C# 离线使用nuget

正常在我们使用nuget进行程序集下载的时候,直接在vs编辑器中直接进行操作,下载自己想要的各种程序,但是某些时候,在进行一些办公时,公司要求本机编码不能进行联网操作,那么这种情况下我们怎么进行nuget程序…

21个令程序员泪流满面的瞬间

「1」公司实习生找 Bug「2」在调试时,将断点设置在错误的位置「3」当我有一个很棒的调试想法时 「4」偶然间看到自己多年前写的代码「5」当我第一次启动我的单元测试时「6」数据库的Delete语句忘了使用限定词where... 「7」明明是个小bug但就是死活修不好......「8…