压力测试:使用 JMeter 进行压力测试

这篇具有很好参考价值的文章主要介绍了压力测试:使用 JMeter 进行压力测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

新建工程

创建新目录 jmeter_demo 在该目录下打开命令行输入:

 

shell

复制代码

go mod init jmeter_demo go mod tidy

随后创建各目录与文件如下:

 

shell

复制代码

-- jmeter_demo -- main main 函数目录(启动http和grpc服务) -- main.go -- proto grpc server 的目录 -- chat.go -- chat.pb.gp -- chat.proto -- test_plan jmeter 测试计划 -- test_plan.jmx go.mod

main 函数

 

go

复制代码

package main import ( "google.golang.org/grpc" "io" proto "jmeter_demo/proto" "log" "net" "net/http" ) func main() { // start a grpc service lis, err := net.Listen("tcp", ":8000") if err != nil { log.Fatalf("Fail to listen: %v", err) } s := proto.Server{} grpcServer := grpc.NewServer() proto.RegisterChatServiceServer(grpcServer, &s) go func() { if err := grpcServer.Serve(lis); err != nil { log.Fatalf("Fail to serve: %v", err) } }() // start a http service http.HandleFunc("/fib1", fibHandler1) http.HandleFunc("/fib2", fibHandler2) go func() { http.ListenAndServe(":2000", nil) }() select {} } func fibHandler1(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { w.Write([]byte("method error")) return } bodyBytes, err := io.ReadAll(r.Body) if err != nil { w.Write([]byte("read body error")) return } if string(bodyBytes) == "" { w.Write([]byte("body empty")) return } fib(0) w.Write([]byte("hello from fib handler1")) } func fibHandler2(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { w.Write([]byte("method error")) return } bodyBytes, err := io.ReadAll(r.Body) if err != nil { w.Write([]byte("read body error")) return } if string(bodyBytes) == "" { w.Write([]byte("body empty")) return } fib(30) w.Write([]byte("hello from fib handler2")) } func fib(n int) int { if n < 2 { return 1 } return fib(n-1) + fib(n-2) }

main 函数非常的 简单, 起了一个 grpc 接口 和两个 http 接口, 两个http 接口功能完全一致,都是运行一个斐波那契数列计算后返回一个字符串, 但两个 handler 的返回略有不同。

grpc 服务的函数非常简单, 直接 return 了一个字符串, 我展示出来, 就不做详细解释了, 具体开源参照我的另一篇博客

chat.proto

 

proto

复制代码

syntax = "proto3"; package proto; option go_package="/"; // 定义 message message ChatMessage { string body = 1; } // 定义 service service ChatService { rpc SayHello(ChatMessage ) returns (ChatMessage ) {} }

chat.go

 

go

复制代码

package __ import ( "fmt" "golang.org/x/net/context" ) type Server struct { } func (s *Server) SayHello(ctx context.Context, in *ChatMessage) (*ChatMessage, error) { fmt.Printf("Receive message body from client: %s \n", in.Body) return &ChatMessage{Body: "Hello From the Grpc Server!"}, nil }

Jmeter 的使用

Jmeter 环境搭建

  1. Jmeter 运行依赖于的 java 环境, 所以需要你提前安装好 java 环境。安装好 Java 后大家可以前往官网下载Jmeter. 这篇博客的Jmeter 版本是 Jmeter 5.6.2 版本。安装完以后,点击安装目录/bin/jmeter.bat 即可启动jmeter.

  2. 安装Jmeter 插件。JMeter 默认是不支持 grpc的,需要额外安装插件, 大家可以前往JMeter的github, 下载 jmeter-grpc-request.jar 包然后放入 jmeter安装目录/lib/ext下。

  3. 安装绘制响应时间图插件。大家前往 Jmeter插件网站, 下载 plugin-manager.jar 包, 然后也是放入 jmeter安装目录/lib/ext下.

安装完插件以后, 你需要重启 JMeter

JMeter 重要概念

下面这张图是这篇博客使用到的 JMeter 的完整展示, 我将围绕着下图中的各个组件对JMeter如何使用进行解释。

压力测试:使用 JMeter 进行压力测试,自动化,测试工具

测试计划 (Test Plan):

压力测试:使用 JMeter 进行压力测试,自动化,测试工具

测试计划,是 Jmter 中的工作单位,Jmeter 的测试都是以测试疾患为单位的,测试计划可以被保存,也可以被导入。 在测试计划中可以 自定义一些变量方便后续使用。 比如我就定义了两个变量 fib1 和 fib2. 一打开Jmeter 就会有一个 Test plan 的测试计划放在左上角了

线程组(Thread Group)

压力测试:使用 JMeter 进行压力测试,自动化,测试工具

线程组,相当于测试计划的流水线,压测过程严格按照线程组的规定进行。比如我们可以设置发起压测请求所调用的用户线程数, 压测的次数或者 压测的时间, 遇到报错如何处置(暂停测试还是进行下一次测试)等等。

我们在测试计划右键 -> Add -> Thread(Users) -> Thread Group 即可添加线程组

事务控制(Transaction Controller)

压力测试:使用 JMeter 进行压力测试,自动化,测试工具

Jmeter 的事务和 MYSQL中的 事务类似,一个事务中可以包括多个请求, 比如 我在这篇博客中有两个请求,一次HTTP请求, 一次GRPC 请求, 只有两个请求都正常返回, 这个事务才算正常完成。

我们在线程组 -> Add -> Logic Controller -> Transaction ontroller 即可添加 事务控制

Sampler 采样器

所谓采样器就是,就是对接口进行采样, 也就是发起请求的控制器。

http 采样器

比如下图的中的 http 采样器 可以通过在 线程组, 右键 -> sampler -> http sampler 添加

压力测试:使用 JMeter 进行压力测试,自动化,测试工具

我们可以定义http方法, 请求URL,和参数进行配置。 特别的是, 我在请求地址这里用到了一个随机函数, 可以对请求的地址进行随机化处理, 也就是 对 fib1 和 fib2 进行 1:1 的负载均衡。 如果想要实现其他比例的负载均衡, 那么可以在 测试计划设置自定义 变量的数量和比例来间接实现。

grpc 采样器

grpc 采样器 可以通过在 线程组, 右键 -> sampler -> grpc sampler 添加

压力测试:使用 JMeter 进行压力测试,自动化,测试工具

grpc 需要指定对应的 .proto 文件路径, 如果正确添加了路径,那么在 Full Method 的下拉框下面是可以看到函数的可选项的。proto 的字段可以通过 json 的形式进行添加。

响应断言(Response Assertion)

所谓响应断言, 就是判断响应是否正常的判断条件。比如下图中的判断条件是 响应是否包含特定的字符来判断。可以在 sampler 下右键 -> listener -> Response Assertion 添加

压力测试:使用 JMeter 进行压力测试,自动化,测试工具

查询结果树(View Result Tree)

查询结果树就是查看响应的详细情况, 比如查询 http 返回的body, header。 可以在 sampler 下右键 -> listener -> View Result Tree 添加

压力测试:使用 JMeter 进行压力测试,自动化,测试工具

聚合报告(Summary Report)

在聚合报告中, 可以直接输出整个事务控制下的性能指标, 包括请求次数, 响应时长, 吞吐量,传输数据量等关键指标。 可以在事务控制器下 右键 -> listener -> Summary Report 添加

压力测试:使用 JMeter 进行压力测试,自动化,测试工具

响应时间图(Response Time Graph)

响应时间图可以绘制响应时间于时间的关系图,可以自定义地设置绘图采样的时间区间长度, 图片尺寸等。可以在事务控制器下 右键 -> listener -> Response Time Graph 添加。

压力测试:使用 JMeter 进行压力测试,自动化,测试工具

点击 Display Graph 即可绘制响应时间图:

压力测试:使用 JMeter 进行压力测试,自动化,测试工具

启动测试

点击下图中右边的扫把即可清理掉历史数据, 点击左边的三角形即可开始测试

压力测试:使用 JMeter 进行压力测试,自动化,测试工具

最后输出 响应时长图:

压力测试:使用 JMeter 进行压力测试,自动化,测试工具

可以看到整个事务下的多个请求的响应时间,hello grpc 接口只是一个字符串返回,所以耗时非常短;fib http 接口由于需要计算斐波那契数列, 所以耗时更长。

踩坑经验

JMeter 本身是一个比较成熟的压测工具, 并无特别大的坑。 我唯一遇到的坑是页面配置的问题。启动 JMeter 后会开启一个命令行, 如果遇到无法保存测试计划, 无法启动测试等情况, 且命令行报以下类似的错误:

 

shell

复制代码

Uncaught Exception java.lang.NoClassDefFoundError: Could not initialize classorg.apache.jmeter.gui.FileDialoger in thread Thread[AWT-EventQueue-0,6,main]. See log file for details.

你可以尝试以下更换语言(换成英语)或者更换页面主题,点击左上角的 Options -> Look and Feel.

作者:ChesterZhang
链接:https://juejin.cn/post/7338783017123102732
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。文章来源地址https://www.toymoban.com/news/detail-853189.html

到了这里,关于压力测试:使用 JMeter 进行压力测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 自动化测试实战篇(8),jmeter并发测试登录接口,模拟从100到1000个用户同时登录测试服务器压力

    自动化测试实战篇(8),jmeter并发测试登录接口,模拟从100到1000个用户同时登录测试服务器压力

    进程是资源分配最小单位,线程是程序执行的最小单位; 每个进程内部会有N个线程,但至少要有1个线 程。 比如公司就是一个进程,公司的员工就是线程。 线程占用的资源要⽐进程少很多。 线程之间通信比进程更方便 并发是指在一个时间段内有多个进程在执行 并行指的是

    2024年02月16日
    浏览(15)
  • 如何使用自动化测试工具Selenium?

    如何使用自动化测试工具Selenium?

    哈喽,大家好,我是小浪。那么有一段时间没有更新了,还是在忙实习和秋招的事情,那么今天也是实习正式结束啦,开始继续更新我们的学习博客,后期主要是开发和测试的学习博客内容巨多,感兴趣的小伙伴们可以一键三连支持一下欧~ 目录 一、什么是自动化测试? 二、

    2024年02月11日
    浏览(54)
  • 接口自动化测试工具,Postman使用详解

    接口自动化测试工具,Postman使用详解

    1、Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件,Postman分为Postman native app和Postman Chrome app两个版本。目前Chrome app已经停止维护,官方也不推荐使用该版本。 2、官网下载地址:http://www.getpostman.com 3:官方文档:http://www.getpostman.com/docs 2、第二步:新建接口请

    2024年02月06日
    浏览(47)
  • 如何使用IOS自动化测试工具UIAutomation

    如何使用IOS自动化测试工具UIAutomation

    这篇文章主要介绍了UIAutomation使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值 第一部分: 熟悉Instruments的UIAutomation. 第二部分: 控件的获取及操作 第三部分: 自定义自动化脚本 xcode中自带的Instuments工具可以用来进行APP的自动化测试, 以及用于进行内

    2024年02月03日
    浏览(142)
  • Web测试自动化工具Selenium的使用

    Selenium是一个Web应用测试的自动化工具,它通过模拟点击实现对Web应用的功能测试。测试时,除了Selenium,还需要对应的浏览器驱动,如在Chrome实现自动点击,则需要chromedriver。 Selenium支持多种语言和多种浏览器,本文仅记录python+chrome的使用。 1. 安装python 略 2. 安装Selenium 注

    2024年01月16日
    浏览(53)
  • 自动化测试工具Selenium的基本使用方法,软件测试基础

    自动化测试工具Selenium的基本使用方法,软件测试基础

    browser.find_element(By.ID,‘kw’).send_keys(“美女”) browser.find_element_by_id(‘kw’).send_keys(‘性感’) 2.通过标签name属性进行定位 browser.find_element_by_name(“wd”).send_keys(“Linux”) browser.find_element(By.NAME,‘wd’).send_keys(“美女”) 3.通过标签名进行定位 browser.find_element_by_tag_name(“input”).

    2024年04月22日
    浏览(48)
  • Python自动化测试工具selenium使用指南

    Python自动化测试工具selenium使用指南

    概述 selenium 是网页应用中最流行的自动化测试工具,可以用来做自动化测试或者浏览器爬虫等。官网地址为:相对于另外一款web自动化测试工具QTP来说有如下优点: 免费开源轻量级,不同语言只需要一个体积很小的依赖包 支持多种系统,包括Windows,Mac,Linux 支持多种浏览器

    2024年02月04日
    浏览(48)
  • GUI自动化测试工具Sikulix的安装和使用

    GUI自动化测试工具Sikulix的安装和使用

    从程序内部控制对小白来说太难了,所以使用一下自动化测试的工具直接控制按钮达到我的目的 官网:http://www.sikulix.com/ 下载对应系统的.jar 需要使用java,没有的话安装一下 然后在sikulix的下载目录下执行 安装成功后就会弹出软件的窗口 上图左边是写程序的地方,右边是日

    2023年04月26日
    浏览(44)
  • 自动化测试工具 AirTest 的使用方法与简介

    自动化测试工具 AirTest 的使用方法与简介

    目录         前言: Airtest简介 1.基于图像识别的Airtest框架 2.基于UI识别的Poco框架 Airtest环境搭建 Airtest布局 Airtest使用步骤 第一步:连接移动设备 第二步:创建一个.air文件(也就是我们的测试脚本) 第三步:用Airtest辅助窗口编辑第一个测试脚本 第四步:引入Poco Airtest常用

    2024年02月10日
    浏览(47)
  • 自动化测试工具 —— selenium介绍及基本使用方法

    自动化测试工具 —— selenium介绍及基本使用方法

    Selenium是一个开源、免费、简单、灵活,对Web浏览器支持良好的自动化测试工具,在UI自动化、爬虫等场景下是十分实用的,能够熟练掌握并使用Selenium工具可以大大的提高效率。 Selenium简介 Selenium支持多平台、多浏览器、多语言去实现自动化测试,是一个开源和可移植的Web测

    2024年02月05日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包