Python 装饰器:让你的自动化测试代码“少写一半”的魔法
版权声明
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
文章主旨:Python装饰器是一种在不修改函数本身的情况下为函数增加额外功能(如日志、重试、权限校验)的工具,适用于自动化测试中消除重复样板代码。
关键要点:
- 装饰器本质上是高阶函数+闭包,接收一个函数并返回一个新函数。
- 基础模板:定义装饰器函数,内部定义wrapper函数,在wrapper中执行前置/后置操作并调用原函数。
- 实战场景一:自动添加测试日志,使用
functools.wraps保留原函数信息,通过*args, **kwargs兼容任意参数。 - 实战场景二:不稳定用例自动重试,通过带参数的装饰器实现可配置的重试次数和延迟。
- 实战场景三:权限校验与前置准备,根据用户角色决定是否执行测试函数。
内容结构:
01. 什么是装饰器(小白也能懂)
装饰器比喻为“包装袋”,在不修改原函数代码的前提下增加功能。原理是“高阶函数+闭包”,本质是一个接收函数并返回新函数的函数。
02. 最基础的语法模板
给出装饰器标准写法:定义一个装饰器函数,内部定义wrapper函数,在wrapper中执行前置操作、调用原函数、执行后置操作。使用@装饰器名语法。示例演示了不修改原函数即增加了前后置功能。
03. 实战场景一:自动添加测试日志
实现log_case_info装饰器,自动打印函数名、文档字符串和执行结果。关键点:使用functools.wraps保留原函数元信息,使用*args, **kwargs兼容不同参数。运行结果展示了用例开始/结束日志。
04. 实战场景二:不稳定的用例自动重试
实现retry带参数装饰器,指定最大重试次数和间隔。在wrapper中循环尝试,捕获异常并重试,最后失败则抛出异常。代码示例模拟了随机失败场景,展示重试日志及成功/失败结果。
05. 实战场景三:权限校验与前置准备
实现require_admin装饰器,检查当前用户角色,非管理员则跳过并提示。示例演示了管理员角色下危险操作可执行,访客角色则跳过。
总结
装饰器还可用于测试计时、性能分析、依赖注入、数据驱动等。核心原则:当在多个测试函数中重复写非业务代码时,正是使用装饰器的时机。(注:原文末尾的广告内容已移除)
文章总结:
建议测试开发人员在遇到重复非业务代码时使用装饰器来提升代码复用性和可维护性,装饰器是自动化测试中消除样板代码的有效工具。
光荣之路