聊一聊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中如何计算党龄_党员的党龄如何计算?

党员的党龄应从预备期满转为正式党员之日算起。只有正式党员才计算党龄,预备党员虽有党籍,但不计算党龄。在我们党的历史上,有些时期有预备期,有些时期则没有预备期;有些时期入党时间从党员大会通过之日算起&#xff0…

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…

NET问答: 如果动态构建 Query 查询 EntityFramework

咨询区 Eduard:我想知道如何在 EntityFramework 或者 Linq 上构建动态查询。我现在要做这么一个功能,UI上大概有 50 的查询条件,用户可以根据自己的需求勾选所需的条件传到我的后端服务方法中。我知道可以通过 ExpresstionTree 去动态拼接这样…

你真的不了解这个地球

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

drbd heartbeat mysql_Heartbeat+DRBD+MySQL Replication故障处理

不久前的一次机房网络故障,再一次对我们在HeartbeatDRBDMySQL数据库架构运维水平的一个考验,之前不止一次的测试与线上部署,还有之后大言不惭的关于该架构组件的所谓深入理解,在这一次不经意的意外面前又是“很囧”的收场&#xf…

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请求带来的延迟…

c#中的多义关键字

newnew用三种场景,最常用的实例化,泛型参数时的实例化约束,第三种是显式隐藏继承成员。using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using s…

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

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

重载运算符操作_学习

//A: 操作符重载实现为类成员函数 /* #include <iostream> class Person { private:int age; public:Person(int a){this->agea;}//inline bool operator(const Person &ps)const;inline bool operator(const Person *ps)const; }; //inline bool Person::operat…

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

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

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

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

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

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

mysql视图实现的_mysql视图是什么?怎么实现?

mysql视图是什么&#xff1f;怎么实现&#xff1f;发布时间&#xff1a;2020-05-21 18:00:24来源&#xff1a;亿速云阅读&#xff1a;152作者&#xff1a;鸽子视图本身是一张虚拟表&#xff0c;不存放任何数据。在使用SQL语句访问视图的时候&#xff0c;获取的数据是MySQL从其它…

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

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

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

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

SQL SERVER2000存储过程调试

sql server2000存储过程调试基础条件启用SQLDebugger 账户账户&#xff0c;这个一般都是开启的&#xff1b;mssqlserver服务要求使用指定用户(不是本地系统用户)&#xff0c;最好是administrator启动&#xff01;这个资料上这么说。但我用本地系统用户也是可以的&#xff1b;登…