• 测试与调试


    单元测试

    单元测试基于最小单元,也就是程序的基本部件,比如函数、类等,在隔离测试各部件,确保底层正确的前提下,在行组合向上完成套件测试。
    测试驱动开发(TDD)要求在编写代码之前,先构建测试,但这并不容易。多数时候,需求和架构的不成熟会导致算法剧烈变化,这样很难先行将测试确定下来。可以考虑和编码同步,在重构过程中剥离出测试用例。两厢对照,还可要求代码必须具备可测试性。
    请注意,测试用例要检查的是错误,而非目标正确返回。另外,单个用例要足够简单,仅测试一项功能,否则其本身就难以维护。可将复杂功能分解以测试套件的方式进行打包。另外,还应避免测试目标的私有成员,这会导致过高的耦合,让代码重构变得困难。同样第三方库也不是测试目标,或许有一个基于接口的隔离代理。

    性能测试

    1.timeit为标准库自带,用于测量少于代码片段的执行时间。其基本算法思路就是执行足够多的次数,从中选取最小平均值,以缩小测量误差。
    2.标准库的profile模块用于测量执行过程中函数的执行时间和调用次数
    标准库自带两个版本,调用接口基本一致。cProfile以C实现,额外开销小。
    profile是纯python实现,开销大,适合编写扩展分析器。
    3.获知引发性能问题的函数后,接下来需要进一步分析具体成因。line_profiler可以对函数内的代码逐行进行测量。
    4.memory profile用于逐行分析代码内存占用。
    当内存占用过多时,可能会引发物理内存不足,或者导致与硬盘的平凡交换,这些会导致严重的性能问题。
    5.pympler被用来统计对象实例的内存使用
    他的方法summary可以对整个解释器进程内的存活对象做出评估,以查证哪类对象可能存在问题。
    tracker可在不同执行点创建跟踪快照,这样通过输出快照的差异,就可能发现嫌疑目s标,以及问题代码的位置。
    sizeof找到嫌疑目标之后,我们开始对其进行个体检查,这需要使用asizeof.与sys.getsizeof不同,他递归统计所有成员和属性。

    代码调试

    pdb
    启动方式

    1.python -m pdb main.py # 命令行调试
    2.import pdb
    pdb.set_trace() # 特定位置插入断点,调试
    3.pdb.run('test()') # 直接调试
    

    插入断点后,语句就会停在该处,命令行显示pdb语句,输入help可看到pdb的命令。

    努力拼搏吧,不要害怕,不要去规划,不要迷茫。但你一定要在路上一直的走下去,尽管可能停滞不前,但也要走。
  • 相关阅读:
    文本文件关键字替换(Java)
    Java分页需求
    四、MyBatis主配置文件
    三、动态SQL语句
    二、SQL语句映射文件(2)增删改查、参数、缓存
    二、SQL语句映射文件(1)resultMap
    一、MyBatis简介与配置MyBatis+Spring+MySql
    一个SpringMVC简单Demo中出现的错误
    linux系统如何将系统中的文件名改为英文?
    spring测试
  • 原文地址:https://www.cnblogs.com/wkhzwmr/p/15549344.html
Copyright © 2020-2023  润新知