首页 > 其他分享 >性能测试代码级分析能力应用

性能测试代码级分析能力应用

时间:2024-11-14 08:45:25浏览次数:3  
标签:分析 调用 工程师 性能 耗时 应用 SQL 测试代码 日志

目录

调用耗时分析

示例代码

运行结果如下图:

分析报告

SQL分析

异常分析

日志分析


除了拓扑的自动构建外,代码级分析能力也是非常重要的能力。链路拓扑可以帮助性能测试工程师快速定位哪个实例出现异常,而代码级分析更进一步。链路拓扑展示一个请求链路中单个实例的方法执行逻辑、执行耗时可能的异常信息,赋予测试工程师代码级分析能力。根据所展示的数据,性能测试工程师可以针对以下几个方面进行深入分析

调用耗时分析

调用耗时是代码级分析能力中比较核心的部分,系统展示当前请求在此实例中执行所用方法的详情,包括方法名和耗时信息。其中,方法名主要指当前调用过的每个方法的名,一般也会包括其参数信息,方便测试工程师判断异常点在哪段代码中。耗时信息指当前方法完成执行的时间

性能优化是一个重要的方面,而对代码进行耗时分析(也称为性能剖析或profiling)是识别瓶颈并提高程序效率的关键步骤。下面我将给出一个简单的Python示例来演示如何使用cProfile模块来进行耗时分析。

cProfile是Python的一个内置性能分析工具,它可以帮助开发者了解程序运行时各个部分的执行时间和调用次数等信息。这里提供一个简单的例子来展示如何使用cProfile进行函数的耗时分析。

示例代码

首先,我们创建一个简单的脚本,其中包含一些可以测量执行时间的函数。

import time
import random

def slow_function():
    print("开始执行慢速函数...")
    time.sleep(random.randint(5, 8))  # 模拟耗时操作
    print("慢速函数执行完毕。")

def fast_function():
    print("快速函数执行中...")
    time.sleep(random.randint(1, 6)/10)  # 模拟较快的操作
    print("快速函数执行完毕。")

def main():
    print("主程序开始执行...")
    slow_function()
    for _ in range(1):
        fast_function()
    print("主程序执行结束。")

if __name__ == "__main__":
    main()
if __name__ == "__main__":
    import cProfile
    cProfile.run('main()', sort='cumulative')

这里的-s cumtimesort='cumulative'参数表示按照累计时间排序输出结果,这样可以看到哪些函数占用的时间最多。

运行结果如下图:

图片

分析报告

运行上述命令后,您将看到类似这样的输出,其中包括每个函数被调用了多少次、总共花费了多少时间以及每次调用平均花费的时间等信息,这些数据对于找出性能瓶颈非常有用。

图片

在上图中,action=zpblog&appname=pcsearch&sid=xxxxxx即为当前实例中处理用户请求的接口。其耗时为225毫秒表示当前接口耗时225毫秒即可完成处理。

当然,各个分析平台的实现方式可能不同,但是实现逻辑是一致的,系统通过可视化的视图、颜色和数字让测试工程师能快速了解测试请求经过了多少方法,每个方法的耗时多久。如果出现耗时较长的方法,测试工程师可快速将实例名称、IP、方法名、耗时等信息传递给分析人员或开发工程师,他们基于压测数据和调用耗时数据可明确问题分析的方向。

SQL分析

在常规系统中存在大量的SQL调用,这些SQL调用也可能成为性能瓶颈,因此对于SQL句的分析至关重要。

分析平台会自动捕获调用中涉及的SQL语句及其耗时,针对每个SQL调用均会采集并展示完整的SQL句,包括查询参数等。若测试工程师发现性能瓶颈在S0L调用,如常见的select*或者大量的where语句等则可以将完整SQL语句复制并提交给开发工程师或DBA(数据库管理员),进行问题意见及排查。

SOL相关的性能问题不仅仅是语句书写有问题连接池配置不合理也会导致SQL语句执行时间较长,这种情况常表现为有大量耗时出现在数据库gelConnection方法中,如果数据库连接池配置不恰当,就会出现大量的数据库连接的类似性能问题。

异常分析

不管是新业务上线阶段还是回归阶段,日常压测过程中被测应用均可能出现异常,但是在传统测试方法实施时基本没有异常数据分析工具,仅通过失败率和HTTP状态码进行异常判断,如果需要了解异常详细信息则需开发方介入。同时由于异常的信息少、部分场景无法进行复现,开发方也很难快速进行定位,测试工程师和开发工程师需要大量沟通,影响性能测试调优过程,影响性能测试进度。

因此针对异常的分析和异常现场数据的保留也是重要的两个能力。导常分析主要包括在代码执行过程中出现的各种异常,如常见的空指针异常数组越界异常、数据库相关异常等。这些异常在实际压测过程中均会导致成功率大幅度下降,这类问题是需要第一时间发现并解决的,异常数据保留则关注异常类型,出现异常的代码、使用框架。所属应用、请求协议、线程名称,线程栈等信息,测试工程师能通过分析平台将异常出现的现场尽可能保留下来,交给开发工程师进行分析和修复

日志分析

日志分析是目前常用的手段,当出现异常时,测试工程师也会登录被测应用所在服务器,通过时间,被测接口等信息在海量日志中进行分析,其排查效率较低。由于日志量较大,即使通过压测时间段进行筛选,其数据依然很多,测试工程师无法准确判断输出的日志是否为本次压测场景产生的,也可能是其他误操作导致的日志报错。因此基于链路的日志分析功能也应运而生。

前文提到过,链路分析基于探针和字节码增强技术实现,能对常用组件进行动态插桩。在日志分析场景下,探针会对常用的日志框架进行插桩,从而在代码出现报错时自动获取其相关的日志输出,展示在平台中。这具备如下两个优势:

同一平台既能查看链路、代码级数据,又能进行日志分析,两大数据相辅相成,能更快地定位性能瓶颈。

实现了请求与日志的绑定,每次请求生成的日志都会被独立展示,减少了其他请求触发的误导信息

阅读后若有收获,你的关注,点赞,转发,留言评论等是对我最大支持!!!

标签:分析,调用,工程师,性能,耗时,应用,SQL,测试代码,日志
From: https://blog.csdn.net/qd_lifeng/article/details/143731744

相关文章

  • 【AI换脸整合包及教程】Rope:AI 换脸工具的功能、原理、应用
    在人工智能技术迅猛发展的当下,AI换脸技术无疑是近年来备受瞩目的焦点之一。其中,Rope作为一款开源的AI换脸工具,因其出色的易用性和强大的功能而广受青睐。本文将对Rope的功能、技术原理、应用场景以及所面临的法律和伦理问题进行详细阐述。一、Rope的主要功能Rope是......
  • 【Unity着色器插件】Better Lit Shader 2021 增强光照和材质表现,在性能和美观度上做出
    BetterLitShader2021是一款在Unity中广受欢迎的着色器插件,主要用于增强光照和材质表现。它在性能和美观度上做出平衡,非常适合希望在Unity中实现高质量视觉效果的开发者,特别是那些想要获得逼真光照效果的项目。主要功能多光照支持:支持多个光源在场景中同时使用,例如主光......
  • 关于Vulkan应用程序运行时编译GLSL Shader文件的方法
    最近在学习Vulkan,在相关参考书中给出的示例代码因为使用的VulkanSDK较老,出现无法构建成功的问题。而且示例代码给出的Vulkan应用程序运行时编译GLSLShader文件的方法放在现在已经是非常的麻烦。现在新版的VulkanSDK(1.3.X以上)将GLSL编译为SPIR-V非常方便了,可以使用Google提供的S......
  • 权限系统:权限应用服务设计
    大家好,我是汤师爷~今天聊聊权限系统的应用服务设计。从业务需求的角度来看,权限系统需要解决两个核心问题:1、菜单渲染与动态展示当用户成功登录并接入系统后,系统需要动态获取并展示该用户有权限访问的菜单项。这一过程涉及前端系统与权限系统的交互。前端系统会向权限系统发......
  • 真题练习6-Excel电子表格-全国计算机等级考试二级MS Office高级应用与设计考试【汪老
    视频解析真题练习6-Excel电子表格_哔哩哔哩_bilibili题库下载全国计算机等级考试题库下载(用电脑下载安装):请点击题目要求某公司销售部门主管大华拟对本公司产品前两季度的销售情况进行统计,按下述要求帮助大华完成统计工作:1.在考生文件夹下,将“Excel素材.xlsx”文件另存为“......
  • RabbitMQ 在 Java 和 Spring Boot 中的应用详解
    1.引言RabbitMQ是一种开源消息代理软件,广泛用于实现消息传递、队列管理和负载均衡。它通过实现AMQP(AdvancedMessageQueuingProtocol)来支持复杂的消息传递模式,是常见的消息中间件之一。本文将深入探讨如何在纯Java环境和SpringBoot项目中使用RabbitMQ,并涵盖详细......
  • 大数据新视界 -- 大数据大厂之 Impala 性能提升:高级执行计划优化实战案例(下)(18/30)
           ......
  • 如何将下载的mp4视频嵌入react应用程序?
    将下载的mp4视频嵌入React应用程序可以通过以下步骤实现:将下载的mp4视频文件放置在React应用程序的合适位置,例如在public文件夹下创建一个videos文件夹,并将视频文件放置其中。在React组件中引入视频文件,可以使用<video>标签来嵌入视频。在组件的render方法中,可以使用以下代码来......
  • 高性能日志结构化引擎 — GreptimeDB Piepline 设计与实现技术揭秘
    在GreptimeDBv0.9版本我们加入了对日志相关的支持:Pipeline引擎和全文索引。GreptimeDB致力于成为统一处理指标(Metric)、日志(Log)、事件(Event)和追踪(Trace)的时序数据库。在v0.9之前,用户虽然可以写入文本(string)类型的数据,但无法进行专门的解析和查询。有了Pipeline引擎和全文......
  • shell正则表达式、sed基本用法及sed应用案例
    一、正则表达式●可以使用若干符号配合某工具对字符串进行增删改查操作1.1基本正则列表正则符号描述^匹配行首$匹配行尾[]集合,匹配集合中任意单个字符[^]对集合取反.匹配任意字符*匹配前一个字符任意次数【*不允许单独使用】\{n,m}匹配......