Skywalking服务链路追踪与Jemeter压力测试

一、下载所需软件

本文基于 SkyWalking 9.6.0 实现微服务全链路监控,并使用 JMeter 完成接口压测与性能验证

SkyWalking官网:Downloads | Apache SkyWalking

SkyWalking华为镜像:https://mirrors.huaweicloud.com/apache/skywalking/9.6.0/apache-skywalking-apm-9.6.0.tar.gz

下载skywalking9.6.0版本与Agents9.6.0版本、jmeter5.6.3版本

二、SkyWalking APM

2.1 jdk版本(针对自己情况)

解压到本地后,由于skywalking该版本只适配JDK 11 或 JDK 17

如果本地jdk不是对应版本,也无需修改环境变量,只需下载jdk文件解压到目录,直接修改 SkyWalking 启动脚本,强制指定用 JDK 17所在文件夹启动

修改skywalking-9.6.0/bin/oapService.bat

复制代码
 @echo off
 set JAVA_HOME=C:\jdk\jdk17   <<<< 加入这一行!位置是对应的jdk位置
 setlocal
 ...

同样给 webappService.bat 也在同样位置加一行

2.2修改端口(通用)

由于SkyWalking的默认启动端口与Nacos冲突,都是8080,所以我们修改他的默认端口

再打开skywalking-9.6.0/webapp/application.yml

修改端口为

复制代码
 serverPort: ${SW_SERVER_PORT:-18080}   <<<< 加入一个1
2.3启动

启动就是先启动oapService.bat ,再启动 webappService.bat

前一个是后端,后一个是前端,只有都启动并不报错才能在本地localhost:18080网址访问到可视化界面。

二、Agent

2.1准备

Agent是监控,只有监控各个微服务启动情况,才能让skywalking进行链路监控与后续数据汇总

把你下载的 agent 解压好,里面必须有:

复制代码
 skywalking-agent.jar
 config/agent.config
2.2导入项目

打开 IDEA → 编辑启动配置 → VM options:

给你的微服务启动参数加上这三句(修改两个地方)↓

复制代码
 -javaagent:C:\Environment\skywalking-agent\skywalking-agent.jar  <<<<修改为自己agent位置
 -Dskywalking.agent.service_name=user-service   <<<<这里要改成微服务名字
 -Dskywalking.collector.backend_service=127.0.0.1:11800
2.3完成

当完成上述操作后,启动微服务程序并且手动点击测试项目功能,即可在localhost:18080中看到链路追踪,里面有很多形式的链路追踪,可以分析到一个功能调用了什么微服务,自己探索吧。下面的Jmter主要是对系统进行压力测试的,就是在1min或者1s内测试系统可以处理多少请求

✅ 服务列表里出现 user-service

✅ 拓扑图自动画出服务调用关系

✅ 追踪里能看到完整调用链

✅ 能看到响应时间、QPS、异常率

这就是链路追踪 + 微服务监控

(Agent不需要启动,它不是独立程序,可以理解为一段配置,是 以Java 探针形式挂载于微服务进程之上)

三、⭐JMeter 接口测试

3.1准备与了解

1.安装

下载jemeter5.6.3安装包,解压,新增系统变量

汉化:进入 bin/jmeter.properties,将 language=en 改为 language=zh_CN

进入 JMeter 的 bin 目录,双击 jmeter.bat后出现 JMeter 图形界面

2.教程

1是对测试配置文件的管理

2是对左侧组件的管理

3是对实现测试管理

4是辅助功能的管理

3.2核心组件(必需)

参考视频:1小时快速入门jmeter接口测试和jmeter性能测试教程(视频不错,推荐看)

测试计划 (Test Plan)

  • 概念:是所有测试元素的顶级容器

线程组 (Thread Group)

  • 概念:模拟虚拟用户,决定了用户总数(线程数)、完成的时间、测试循环执行次数

  • 链路追踪 = 线程 1

    负载均衡测试 = 线程 100/200/500/1000

    压力测试 / 性能测试 = 线程逐步往上加,看 TPS、RT、错误率

  • 特点:所有取样器必须置于线程组之下

取样器 (Sampler)

  • 概念:模拟用户的具体动作(即测试步骤),通常是向服务器发送请求。有多种类型,其中最常用的是 HTTP 取样器

  • 特点:是大部分非核心组件的服务对象

3.2辅助组件
  • 监听器 (Listener):展示取样器工作细节和结果

  • 配置元件 (Config Element):配置修改取样器的设置

  • 定时器 (Timer):延迟取样器的执行

  • 断言 (Assertion):判断取样器的的结果

  • 前置处理器 (Pre-Processor):取样器之前,自动执行

  • 后置处理器 (Post-Processor):取样器之后,自动执行

  • 逻辑控制器 (Logic Controller):对取样器进行逻辑控制(条件、分支、循环、跳过)

3.3实战测试登陆端口

访问http://localhost:9000/login是登录窗口

1、首先创建线程组,三个属性都填1,表示只测试一次

2、创建HTTP信息头管理器

确保发送的json数据格式正确

名称
Content-Type application/json;charset=UTF-8

3、创建HTTP请求,填写对应参数

4、创建取样器-选择查看结果树

准备完毕,点击运行

3.4结果分析

图标色:默认由网络状态 + 响应码决定(2xx = 绿,4xx/5xx = 红);

如果添加了断言,断言结果会覆盖默认规则,断言失败则标红(无论响应码是什么)

取样结果(Sampler result):提供了响应码、响应时间、内容长度等概要信息

什么是请求头(Request Headers)

可以理解成快递包裹外面的标签和说明。告诉服务器 "这次请求的基本信息",不包含业务数据。

什么是请求体(Request Body)

就是包裹里面真正的货物。(Get方法一般没有)内容通常是:账号密码表单数据JSON 格式数据

作用:传递真正要传给后端的业务数据。

四、JMeter--Http核心配置

4.1HTTP信息头管理器
  • Content-Type

    :定义了请求体(Body)的数据格式。这是 POST 或 PUT 请求中至关重要的头信息。

    • application/json:表示请求体是 JSON 格式。

    • application/x-www-form-urlencoded:表示请求体是标准的表单提交格式。

    • 一定要放在各自的http请求下,不要放在总线程下,不然格式不同时,不能共用,就会容易出错。

  • 其他...

4.2HTTP Cookie管理器

1、概述

当用户首次登录成功后,服务器会生成一个唯一的身份标识(Session ID)并通过响应头(Set-Cookie)发送给客户端,客户端(如浏览器)会存储这个 Cookie。

在后续的请求中,客户端会自动携带此 Cookie,服务器据此便能识别出是哪位用户,从而维持了用户的登录状态,这个过程称为会话 (Session)。

2、JMeter 中管理 Cookie

在线程组下,右键点击 -> 添加 -> 配置元件 -> HTTP Cookie 管理器

HTTP Cookie 管理器 会自动完成会话保持,无需手动处理。

4.3HTTP请求默认值

当添加 HTTP请求默认值后,取样器中对应的字段为空时将自动使用 "HTTP 请求默认值" 中定义的值

4.4⭐接口关联

上一个接口的返回结果,给下一个接口当参数用

常见的需要关联的数据:

  • 会话令牌 (Session Token / JWT Token) :如 token, access_token

  • 业务单据 ID :如 orderId, userId, productId

这个很重要,但视频到此结束了,我也没看懂。

相关推荐
鬼先生_sir13 小时前
Spring Cloud 微服务监控实战:SkyWalking + Prometheus+Grafana 全栈解决方案
运维·spring cloud·grafana·prometheus·skywalking
brucelee18615 小时前
使用 JMeter 进行 API 压力测试完整指南
jmeter·压力测试
Echoo华地18 小时前
Gatling压测案例
java·jmeter·压力测试·并发·scale·压测·gatling
橘子编程18 小时前
软件测试全流程实战指南
java·功能测试·测试工具·junit·tomcat·压力测试·可用性测试
汽车仪器仪表相关领域19 小时前
广州文明机电 新能源汽车运行安全性能检验解决方案
人工智能·功能测试·安全·单元测试·汽车·压力测试·可用性测试
5系暗夜孤魂6 天前
当系统不再“透明”:从 Java 技术体系看大型工程的可观测性与可掌控性
java·python·压力测试
dgvri6 天前
Skywalking介绍,Skywalking 9.4 安装,SpringBoot集成Skywalking
spring boot·后端·skywalking
lifewange6 天前
Appium是什么
appium·压力测试
TaiChangYiQi7 天前
成都纸箱抗压机哪家好
压力测试