• Python性能测试工具汇总


    一、line_profiler

    Python代码优化工具——line_profile

    二、memory_profiler

    Python代码优化工具——memory_profiler

    三、timeit

    1. 参考博客
    2. python内置模块
    3. 功能:测量小代码片段的执行时间
    4. 使用方式:
    import timeit
    timeit.timeit()
    timeit.repeat()
    
    • 1
    • 2
    • 3

    5、参数注解:

    • stmt:传入要测试时间的代码,可以直接接受字符串的表达式,也可以接受函数。如果传入函数,需要把函数导入在当前文件中,调用timeit方法时的参数为 stmt = 'func()', setup = 'from __main__ import func'即可。
    • setup:传入stmt的运行环境,比如stmt中使用到的参数、变量,要导入的模块等。可以写一行语句,也可以写多行语句,写多行语句时要用分号;隔开语句。
    • number:在一组测试中执行stmt的次数,默认100000次。
    • repeat:重复测试的组数,每次的结果构成列表返回,默认5次。
    • 最终执行的次数为number * repeat

    6、个人评价

    • 缺点:只能执行小代码片段,使用的场景很受限制
    • 优点:使用方法简单,且因为stmt可以传函数,所以我们可以将部分简单的代码封装在函数里(比如接口响应时间测试),然后开始重复测试。

    四、pyheat

    1. github网址
    2. 安装命令:pip3 install py-heat
    3. 功能:代码执行完毕后,会弹出一个热力图片用来展示每行代码的执行时间。
    4. 使用方式:
      - 命令行方式
    pyheat <文件名> -
    
    • 1
    • 代码方式:
        from pyheat import PyHeat
        ph = PyHeat(<目标文件路径>)
        ph.create_heatmap()
        # To view the heatmap.
        ph.show_heatmap()
        # To output the heatmap as a file.
        ph.show_heatmap()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1. 使用时的一些小细节:
    • 使用命令行方式时,业务代码里出现导自定义包的逻辑时,会报ModuleNotFoundError错,需要使用sys.path.append(<自定义包上层路径>)方法解决,原因是pyheat内部实际上调用pprofile来执行目标路径的代码,实际调用位置与使用pyheat的位置不同。
    • 只会展示最多两个图片:
      • 代码方式执行时:调用pyheat的文件 + pyheat调用的文件
      • 命令行方式执行时:pyheat调用的文件。
    • 个人评价
      • 虽然与matplotlib工具结合,可以以热力图的形式看到每行代码的调用时间,但也仅仅能看到调用时间,而且实际测试时发现结果并不准确,再加上导包问题,个人不推荐使用这个包。

    五、heartrate

    1. github网址
    2. 安装命令:pip3 install heartrate
    3. 功能:可以在浏览器上实时查看每一行代码的调用次数,用颜色条的深浅和长度来区分最近调用情况和总体调用情况。
    4. 使用方式:
    from heartrate import trace, files
    trace(files=files.all, browser=True)
    
    • 1
    • 2
    1. 使用时的一些小细节:
    • 使用时应该把trace语句放在业务代码之前执行,可以是main方法里,也可以放在from heartrate import trace, files之后执行,因为只有执行了这个语句后才会在浏览器上看到接下来代码的调用情况。
    • 默认跟踪的代码是当前文件,可以在trace里的files参数里指定希望跟踪的文件。具体细节可以参考上方的github介绍。
    • trace里的host参数填充的是什么,打开浏览器时网址就应该填什么,例如代码里host参数填写的localhost,那浏览器上的网址写127.0.0.1就不可以。原因是源码里使用的Flask框架搭建的页面,其SERVER_NAME参数使用的是trace方法里所填hostport,没有做任何映射处理。
    • 运行代码后自动打开浏览器的条件:
      • 不填host参数或者host参数填写localhost127.0.0.1
      • browser参数填True
    • 个人评价
      • 比较好玩,想法与其他性能测试工具相比较为新颖,但只能查看调用次数,对于性能调优来说比较鸡肋。

    六、Pycharm自带的Profiler工具

    1. 官方文档
    2. 这个工具只能在专业版使用,使用方法也很简单,就是可以使用Run/Debug运行的代码都可以使用Profiler运行,运行结束后会自动弹出性能检测结果,结果包括调用的方法/类/文件等耗时情况以及各函数调用关系图。这个关系图还是比较有用的。

    七、objgraph工具

    1. 参考博客

    八、profile和cProfile

    1. cProfile和profile功能相似,区别是profile是纯Python语言实现的,cProfile是C语言实现的。
    2. 官方文档
    3. profile和cProfile通常会和pstats内置模块连用,对分析结果进行更多的过滤操作。
  • 相关阅读:
    SQL手工注入漏洞测试(Sql Server数据库)
    React + 项目(从基础到实战) -- 第八期
    MATLAB 学习笔记(6)MATLAB 的 upsample 函数和 downsample 函数
    AWS入门实践-S3 精细化权限控制
    Java进程假死排查记录
    Linux命令(103)之wc
    文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于多任务学习和单任务学习组合模型的综合能源系统多元负荷预测》
    正规文法、正规式、确定的有穷自动机DFA、不确定的有穷自动机NFA 的概念、区分以及等价性转换【我直接拿下!】
    Docker安装Jenkins
    js调整table表格上下相邻元素顺序
  • 原文地址:https://blog.csdn.net/weixin_42245157/article/details/126608108