在测试过程中引入可观测性平台提升业务质量

作者 观测云 产品技术专家 成都办公室 - 刘跃兰

前言

随着微服务技术的发展,微服务概念已深入人心,越来越多的企业开始使用微服务架构来开发业务应用。业务应用系统的整体架构变得更加复杂,并存在各种各样的不确定性因素,从而对质量保障,以及相应的测试工作带来了巨大挑战。因此,在这样的背景下,测试人员就更需要借助简单易用的工具辅助测试工作。观测云就属于能够协助测试人员获取各类测试结果的有效工具。
本文通过一些常见场景的举例,来介绍观测云是如何辅助测试过程的,希望给予读者一些灵感。

轻松观测测试环境和业务应用状况

测试环境状况检验

在测试环境中,如果安装部署了观测云采集器 DataKit,测试人员就可以通过「基础设施」的基本信息直接获取到测试主机的配置情况,检查测试环境是否满足测试配置要求。效果如下:

在安装 Datakit 采集器基础知识又接入了「应用性能监测」,便可以观测到应用服务调用时对应的主机运行情况,排除硬件环境干扰。效果如下:

多维调用关系梳理

微服务架构下,无形中增加了很多“平行调用关系”,它不是最终用户调用的,而是服务内部去调用内部的服务的情况。测试人员可以通过观测云「应用性能监测」的服务拓扑图,清晰明地查看不同环境版本下各服务内部调用情况。根据测试判定标准、自定义区间等,为选择的填充指标自定义服务节点颜色区间范围,划分不同的等级,通过颜色区间快速有效地观测到各服务的请求数、P50 响应时间、P75 响应时间、P99 响应时间和错误数等性能指标测试结果。效果如下:

配置详情可参考《观测云应用性能监测的实现方式》

网络性能异常检测

在微服务架构中,每个服务都是独立的进程,并且通常部署在不同的基础设施,无法简单的使用本地调用的方式,而是需要远程服务调用来实现服务间的通信,那么微服务间的通信就会对网络情况产生高度依赖。测试人员可以通过观测云的「网络监测」模块快速感知,排除因网络不稳定引起的故障干扰。
进入「链路」页面后,可以看到火焰图、存在调用关系的各服务耗时占比情况。将服务调用栈情况与当时的网络运行情况相结合,当发现某个服务耗时较长时,可以以此优先排除网络干扰。效果如下:

配置详情可参考《观测云开启 eBPF 的方式》

观测云在单元测试中的应用

单元测试(unit testing)是对软件中的最小可测试单元进行检查和验证。对于 Java 里单元测试中单元的含义,一般是指一个类。在单元测试时,观测云应用性能监测的 Profile 可协助自动获取应用程序运行过程中下钻到代码行,直观地展示 CPU、内存和 I/O 的使用情况。通过火焰图实时展示每一个方法、类和线程的调用关系和执行效率,帮助测试人员获取代码性能情况,得出测试结果,并协助开发优化代码。

功能详情可参考《观测云 Profile 介绍》

观测云在性能测试中的应用

性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。

  • 负载测试可以确定各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。
  • 压力测试则是通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大服务级别的测试。

在测试过程中,可以利用 Loadrunner、JMeter、PerformanceRunner 等压力测试工具,模拟高并发的客户端,通过协议和报文产生并发压力给服务器,测试整个系统的负载和压力承受能力,实现压力测试、性能测试、配置测试、峰值测试等。
开启观测云应用性能监测(APM)功能后,可在「应用性能监测」–「 服务」列表中,点击所要查看的服务,即可看到该服务的性能测试结果。效果如下:

配置详情可参考《观测云应用性能监测的实现方式》

前端用户访问的性能分析,可通过观测云的「用户访问监测」–「分析看板」 – 「性能分析」获取 LCP、FID、CLS 和页面访问量排行(TOP 10)等性能测试结果。效果如下:

配置详情可参考《观测云用户访问监测的实现方式》

帮助节省 bug 复现成本

测试人员最为苦恼的事,莫过于在测试过程中出现过的问题,在开发人员 debug 之时却不能时时复现。不仅如此,云原生、容器、跨域等复杂的测试环境,加剧了这种情况出现的频率,导致开发人员无法定位,也就无法及时准确地修复 bug,进而成为后续版本中隐藏的风险。观测云的「快照」、「创建 Issue」 和「会话重放」功能可以非常有效地辅助测试人员减轻这样的烦恼。

快照分享

当测试人员在测试工程中发现 bug 时,可将对应的「链路」-「日志」关联信息保存快照,对应 bug ID,分享给开发人员,并记录到测试记录文档中,方便开发人员快速了解 bug 的前后端链路、日志、主机、JVM 等信息,快速定位 debug,节省传统方式的沟通成本和复现问题所需的时间成本。效果如下:

除此之外,还可以在创建快照时,根据需要选择分享方式(公开分享和加密分享)、快照有效时间(48 小时或永久),以及是否显示顶部栏和水印,满足多样化场景(例如,涉及外部人员参与排障的场景)。效果如下:

创建 Issue

Issue 作为异常追踪功能的最终落地单元,承担了整合当前工作空间中的异常问题来源、描述、相关成员等信息的角色。任何成员均可将在观测云中所观测到的异常现象,定义成一个 Issue,并通知相关成员来追踪处理。效果如下:

功能详情可参考《观测云 创建 Issue 介绍》

会话重放

会话重放可将测试过程中模仿用户访问网站的过程重建演示,通过捕获单击、鼠标移动和页面滚动等内容,生成视频记录,深入了解测试过程中的操作步骤。在前后端出现问题的时候,开发人员可结合用户访问性能数据,帮助进行错误定位、重现和解决问题。

功能详情可参考《观测云会话重放介绍》

  • 若当前 Session 已配置会话重放,则可点击「查看器」-「▶️ 播放按钮」,查看对应 Session 的会话重放。
  • 也可在 Session、View、Error 查看器详情页,点击右上角的「会话重放」,查看当前用户会话的操作重放。

观测云笔记辅助功能

测试团队可以通过观测云的笔记功能,管理测试文档模板,记录测试过程中发现 bug 时相关信息,方便后续根据测试数据比对和跟踪修复情况。笔记支持 21 种图表,可以新建图表,也可将工作空间中已有图表导出到笔记。在主机、容器、日志查看器、应用性能监测查看器、用户访问监测查看器中均有「导出到笔记」的下拉选项。

总结

在测试环境中引入观测云,可方便测试人员快速排除硬件设施、网络等因素的干扰,将更多的精力用在测试案例的优化上,并能准确地将测试产生的实际数据反馈到测试报告,或相关人员,提高整个团队的效率,确保更高效地提供高质量产品。

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

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

相关文章

小节8:Python之文件操作

1、文件在哪里? 如果用代码对文件进行操作,需要先找到那个文件 MacOS/Linux:斜杠/ 表示根目录,一切的文件、目录都存放在根目录下面。 Windows系统:就不一样了,它每一个磁盘分区都有自己的根目录&#x…

01-Redis核心数据结构与高性能原理

上一篇: 1.Redis安装 下载地址:http://redis.io/download 安装步骤: # 安装gcc yum install gcc# 把下载好的redis-5.0.3.tar.gz放在/usr/local文件夹下,并解压 wget http://download.redis.io/releases/redis-5.0.3.tar.gz…

[C++入门]---List的使用及模拟实现

文章目录 1.list的介绍2.list的使用2.1list的构造函数2.2list modifiers2.3list capacity2.4list elment access2.5iterator的使用 3.list的模拟实现3.1list的源码 1.list的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向…

【数据结构】堆排序详解

文章目录 一、堆排序思想二、向上调整建堆排序三、向下调整建堆排序四、总结 对于什么是堆,堆的概念分类以及堆的向上和向下两种调整算法可见: 堆的创建 一、堆排序思想 int a[] { 2,3,5,7,4,6 };对于这样一个数组来说,要想要用堆排序对它…

java.lang.ClassCastException: android.os.BinderProxy cannot be cast to ...

项目开发遇到下面这个报错了! 问题原因 直接说原因,就是因为进程间不能直接传递对象,应该传递该Binder对象的映射(代理对象),所以类型转换就出错了。如果在同一个进程中,直接传递对象没有关系&a…

9月15日作业

Qt代码 #include "mywnd.h"//构造函数的定义 mywnd::mywnd(QWidget *parent): QWidget(parent) //显性调用父类的有参构造完成对子类从父类继承下来成员的初始化工作 {//窗口设置this->resize(QSize(500, 433));this->setWindowTitle("Widget&quo…

安装GPU驱动,CUDA Toolkit和配置与CUDA对应的Pytorch

如果有帮助,记得回来点个赞 目录 1.安装指定GPU驱动如果安装的GPU CUDA Version和CUDA Toolkit版本已经冲突怎么办? 2.安装指定版本的CUDA Toolkit如果我安装了CUDA Toolkit之后nvcc -V仍然显示旧的CUDA Toolkit版本怎么办? 3.安装与CUDA对应的Pytorch已经安装了错乱版本的c…

《C++ primer plus》精炼(OOP部分)——对象和类(4)

“学习是人类进步的阶梯&#xff0c;也是个人成功的基石。” - 罗伯特肯尼迪 文章目录 友元函数利用友元函数重载<<运算符重载部分示例&#xff1a;矢量类 友元函数 先看看在上一章中我们作为例子的代码&#xff1a; class Student{string name;int grade;int operator…

第十九章、【Linux】开机流程、模块管理与Loader

19.1.1 开机流程一览 以个人计算机架设的 Linux 主机为例&#xff0c;当你按下电源按键后计算机硬件会主动的读取 BIOS 或 UEFI BIOS 来载入硬件信息及进行硬件系统的自我测试&#xff0c; 之后系统会主动的去读取第一个可开机的设备 &#xff08;由 BIOS 设置的&#xff09; …

如何实现wingftpserver部署到外网访问?快解析p2p内网穿透

不少朋友选择用wing FTP来搭建部署FTP服务管理文件共享。Wing FTP Server是一个跨平台ftp服务器端&#xff0c;它有不错的可靠性和一个友好的配置界面&#xff0c;Wing FTP Server除了能提供FTP的基本服务功能以外&#xff0c;还能提供管理员终端、任务计划、基于Web的管理端和…

中国智能客服发展历程

中国智能客服的发展历程&#xff1a; 在2000年以前&#xff0c;互联网尚未普及&#xff0c;客服主要以电话沟通为主。从2000年到2010年&#xff0c;得益于计算机技术、计算机电话集成技术&#xff08;CTI&#xff09;、网络技术、多媒体机技术以及CRM、BI、ERP、OA等企业信息化…

基于SSM+Vue的校园教务系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

MATLAB入门-字符串操作

MATLAB入门-字符串操作 注&#xff1a;本篇文章是学习笔记&#xff0c;课程链接是&#xff1a;link MATLAB中的字符串特性&#xff1a; 无论是字符还是字符串&#xff0c;都要使用单引号来‘’表示&#xff1b;在MATLAB中&#xff0c;字符都是在矩阵中存储的&#xff0c;无论…

Leetcode: 645.错误的集合 题解【超详细】

题目 集合 s 包含从 1 到 n 的整数。不幸的是&#xff0c;因为数据错误&#xff0c;导致集合里面某一个数字复制了成了集合里面的另外一个数字的值&#xff0c;导致集合 丢失了一个数字 并且 有一个数字重复 。 给定一个数组 nums 代表了集合 S 发生错误后的结果。 请你找出重复…

新手如何开始Microstation CE版二次开发

一步步学习MicroStation CE MDL&#xff08;C&#xff09;开发 - 技术资料库 - Bentley 中国优先社区 - Bentley Communities https://communities.bentley.com/communities/other_communities/chinafirst/w/chinawiki/57704/microstation-ce-mdl-c一步步学习MicroStation CE A…

算法:合并两个有序数组---双指针[1]

文章来源&#xff1a; https://blog.csdn.net/weixin_45630258/article/details/132673462 欢迎各位大佬指点、三连 1、题目&#xff1a; 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元…

小节5:Python列表list常用操作

1、对列表的基本认知&#xff1a; 列表list&#xff0c;是可变类型。比如&#xff0c;append()函数会直接改变列表本身&#xff0c;往列表里卖弄添加元素。所以&#xff0c;list_a list_a.append(123)就是错误的。如果想删除列表中的元素&#xff0c;可以用remove()函数&…

Android RecyclerView BaseSectionQuickAdapter实现分组功能

详情网站&#xff1a;手把手教你使用BaseSectionQuickAdapter实现分组功能&#xff0c;史上最详细Adapter使用教程_basequickadapter 分组_杨阿程的博客-CSDN博客 //加入二个包implementation com.android.support:recyclerview-v7:26.0.0-beta1implementation com.github.Cym…

2023/9/15 -- C++/QT

作业&#xff1a; 1> 将工程文件进行注释 2> 03login_box.pro: QT core gui #core核心库 gui图形开发库greaterThan(QT_MAJOR_VERSION, 4): QT widgets #4.0版本以上自动包含widgets库CONFIG c11 #支持C11版本# The following define makes your compiler em…

深度学习推荐系统(八)AFM模型及其在Criteo数据集上的应用

深度学习推荐系统(八)AFM模型及其在Criteo数据集上的应用 1 AFM模型原理及其实现 沿着特征工程自动化的思路&#xff0c;深度学习模型从 PNN ⼀路⾛来&#xff0c;经过了Wide&#xff06;Deep、Deep&#xff06;Cross、FNN、DeepFM、NFM等模型&#xff0c;进⾏了大量的、基于不…