当前位置:首页>python>测试人员必须掌握的5个Python自动化测试装饰器!

测试人员必须掌握的5个Python自动化测试装饰器!

  • 2026-08-18 23:11:47
测试人员必须掌握的5个Python自动化测试装饰器!
点击“蓝字”关注我们吧!

哈喽,小伙伴们,今天跟大家聊聊Python自动化测试“装饰器”。它为什么在AI如此强大发展如此迅速的今天,依然这么重要。因为当AI能10秒生成一段测试脚本,测试人的核心竞争力早已不是“会写代码”,而是“会判断、会设计、会审查”。装饰器——正是帮大家建立这种核心素养的绝佳切入点。

下面我们就从三个方面详细展开:

  • 一是:测试人员为啥要学;
  • 二是:装饰器到底是啥;
  • 三是:自动化测试必须要会的5个装饰器;

一、AI都这么强了,测试人员为啥还要学装饰器?

这个问题现在被问得越来越频繁,甚至大家都在怀疑:“现在AI写代码那么溜,干嘛还要费劲学这个装饰器呀?”

先说结论: AI时代,不仅要学,而且学习方式要彻底转变 ——从“死记语法”转向“理解场景、把控质量、设计架构”。

原因1:AI生成的装饰器,你敢不经审查直接用吗?

想象一下,你让AI写一个带重试机制的测试用例,它唰地生成了这段代码:

@retry(stop_max_attempt_number=3, wait_exponential_multiplier=1000) deftest_payment():     # ...

看着挺像回事对吧?但如果你不懂装饰器的执行原理,你可能根本发现不了潜在风险,例如:

  • 这个重试装饰器在“断言失败”时也会重试吗?还是只在“接口报错”时重试?
  • 如果接口返回“余额不足”,它还在无限重试,会不会把生产环境搞出脏数据?
  • 多个装饰器叠加时,执行顺序是怎样的?会不会互相干扰?

AI负责生产代码,你负责审查代码。 不懂装饰器,相当于把代码质量的命门全交给了概率。

原因2:AI不懂你公司的“业务上下文”

AI能写出通用的 @retry ,但它绝不知道你们公司的特殊规则:

  • 测试环境必须先用装饰器从配置中心拉取环境变量
  • 用例失败后必须通过装饰器往企业微信推送特定格式的告警
  • 数据库操作必须通过装饰器自动管理事务回滚,防止测试数据污染

这些带有公司特定业务逻辑的装饰器,AI完全写不出来。这些隐形内容从不出现在公开训练数据里面。

AI是“万能工具”,而你是“定制工具的人”。 不会造工具,就只能被工具牵着鼻子走。

二、装饰器到底是什么?

一句话大白话解释就是:

装饰器就是给测试函数“戴一顶功能帽子”。

你写了一个测试函数,它只负责核心的测试逻辑(发请求、断言结果)。然后你在它头上加一行 @xxx ,这顶“帽子”就自动给这个函数增加了额外能力——自动打印日志、自动重试、自动传入多组参数。

最关键的是: 你完全不需要修改函数本身的代码。

对比一下:

# 没有装饰器:每个用例都要手动写日志def test_login():    print("开始执行测试:test_login")    # ... 测试逻辑 ...    print("测试结束")def test_logout():    print("开始执行测试:test_logout")    # ... 测试逻辑 ...    print("测试结束")# 有了装饰器:一行搞定,干净利落@auto_loggerdef test_login():    # ... 只写测试逻辑 ...    pass@auto_loggerdef test_logout():    # ... 只写测试逻辑 ...    pass

区别一目了然:装饰器把“日志”和“测试逻辑”彻底分开了,你的测试函数变得干净、专注、易维护。


三、5个自动化测试必会的装饰器

AI时代的新学习重点

你不需要死记硬背装饰器的底层源码,但你必须掌握这三样能力:

能力
为什么AI无法替代
场景识别:知道什么时候该用什么装饰器
AI不知道你的网络波动情况、不知道你的数据依赖
组合顺序:多个装饰器叠加时的执行顺序调优
AI给的顺序不一定符合你的测试意图
调试排错:当装饰器报错时能快速定位
把报错原封不动贴回给AI,只会陷入死循环

一句话总结: AI能写出100个装饰器,但只有你能决定这100个装饰器放在项目的哪个角落、以什么顺序执行、出错了怎么兜底。别让AI抢走你的方向盘,把它当成你的副驾。

5个自动化测试必会的装饰器

1. @pytest.mark.parametrize —— 一组数据测一个接口

用途: 用多组数据跑同一个测试用例,彻底告别复制粘贴。

场景: 测试用户查询接口,你要验证“存在的用户返回200”“不存在的用户返回404”“非法输入返回400”三种情况。

import pytest@pytest.mark.parametrize("user_id, expected_status", [    (1, 200),          # 正常用户    (999, 404),        # 不存在的用户    ("invalid", 400)   # 非法输入])def test_get_user(user_id, expected_status):    response = requests.get(f"https://api.example.com/users/{user_id}")    assert response.status_code == expected_status

一个函数,三组数据,自动执行三次。没有这个装饰器,你得写三个几乎一样的测试函数。

AI时代的价值: 当你用AI生成测试数据时,这个装饰器能让AI快速理解你的参数结构,生成的数据直接套用。你只需要告诉AI“生成10组边界值数据”,它填进 @parametrize 里就行。


2. @pytest.fixture —— 测试前后的“自动管家”

用途: 在测试执行前准备好数据、连接、驱动等,测试结束后自动清理。

场景: 多个测试用例都需要登录态、数据库连接、浏览器驱动。

import pytestimport requests@pytest.fixturedef api_client():    # 前置:创建会话    session = requests.Session()    session.headers.update({"Authorization": "Bearer xxx"})    yield session  # 测试函数在这里执行    # 后置:关闭会话    session.close()def test_get_user(api_client):    response = api_client.get("/users/1")    assert response.status_code == 200

api_client 就像个“自动管家”,被哪个测试函数引用,就自动给哪个准备好一切,用完自动收拾干净。

AI时代的价值: AI生成的 fixture 可能不知道你公司的数据库连接池配置、不知道你们的测试账号池管理方式。你得有能力判断AI给的fixture是否适合你的项目,必要时自己动手写一个更贴合的。


3. @pytest.mark.skip / skipif —— 灵活跳过不跑的用例

用途: 暂时屏蔽某些测试用例,比如已知Bug、依赖环境未就绪、调试时只跑部分用例。

import pytestimport sys# 无条件跳过@pytest.mark.skip(reason="该功能尚未开发完成")def test_new_feature():    assert False# 条件跳过:Python版本低于3.8时不执行@pytest.mark.skipif(sys.version_info < (3, 8), reason="需要Python 3.8+")def test_advanced_feature():    pass

AI时代的价值: AI可能会生成大量用例,但有些当前环境跑不了。你要学会用 skipif 加条件判断,让用例“智能地”决定自己跑不跑,而不是傻傻地全部执行然后报错一片。


4. 自定义日志装饰器 —— 让每个用例执行过程全记录

用途: 自动记录每个测试用例的入参、出参、执行耗时、失败堆栈。

场景: 用例失败了,但CI日志里什么详细信息都没有,完全不知道当时传了什么参数、在哪一步挂的。

import functoolsimport loggingfrom datetime import datetimelogger = logging.getLogger(__name__)def auto_logger(func):    @functools.wraps(func)  # 保留原函数名,确保pytest能正常收集    def wrapper(*args, **kwargs):        logger.info(f"▶️ 开始执行: {func.__name__}")        logger.info(f"   参数: args={args}, kwargs={kwargs}")        start = datetime.now()        try:            result = func(*args, **kwargs)            logger.info(f"   ✅ 执行成功: {result}")            return result        except Exception as e:            logger.error(f"   ❌ 执行失败: {e}", exc_info=True)            raise        finally:            end = datetime.now()            logger.info(f"⏹️ 耗时: {(end - start).total_seconds():.2f}s")    return wrapper# 使用:一行搞定@auto_loggerdef test_user_login(username, password):    assert login(username, password) == True

有了这个装饰器,每个测试用例的完整执行过程都被自动记录。排查问题时再也不用靠猜。

AI时代的价值: 这是最典型的“团队自定义装饰器”——AI写不出来,因为它不知道你的日志格式偏好、不知道你的日志存储位置。这是你必须自己动手封装的看家本领。


5. 自定义重试装饰器 —— 让不稳定用例自动重跑

用途: 网络抖动、服务偶尔超时导致的“假失败”,自动重试N次。

场景: 接口偶尔因网络原因失败,但重跑一次就过了。每次手动重跑太浪费时间。

import functoolsimport timedef retry(max_attempts=3, delay=1):    def decorator(func):        @functools.wraps(func)        def wrapper(*args, **kwargs):            for attempt in range(1, max_attempts + 1):                try:                    return func(*args, **kwargs)                except Exception as e:                    if attempt == max_attempts:                        raise                    print(f"第{attempt}次失败,{delay}s后重试...")                    time.sleep(delay)            return None        return wrapper    return decorator# 使用:失败自动重试3次,每次间隔1秒@retry(max_attempts=3, delay=1)def test_unstable_api():    response = requests.get("https://unstable-api.example.com")    assert response.status_code == 200

AI时代的价值: 同样,AI不知道你的业务中哪些错误该重试(比如超时可以重试,但“余额不足”就不该重试),你得自己写判断逻辑。这是一个典型的需要人工定义业务边界的场景。


四、进阶提醒:装饰器的两个关键细节

细节1:别忘了 @functools.wraps

写自定义装饰器时,务必在wrapper函数上加上 @functools.wraps(func) 。

不加的话,被装饰的测试函数会丢失原来的函数名和文档字符串——pytest可能无法正确识别和收集用例,报错时显示的是 wrapper 而不是你的函数名,排查起来一头雾水。

细节2:多个装饰器的执行顺序

@retry(max_attempts=3)@auto_loggerdef test_example():    pass

执行顺序是 “从下往上” :先执行 @auto_logger ,再执行 @retry 。这意味着日志会记录每一次重试的详细信息,这在排查问题时非常有帮助。如果顺序反了,可能只会记录最终结果,中间过程全丢失。


五、话题讨论

讨论1你们团队有哪些“独门”自定义装饰器?解决的是什么具体痛点?讨论2:你在写 @retry和 @auto_logger叠加时,是按什么顺序放的?有没有因为顺序不对导致日志信息不全?

以上话题,任选其一,欢迎评论区留言,小编会在下下周一(2026年8月17日)下午,选取1位“关注+点赞+留言”的幸运用户,送出《Web 安全测试技术详解》1本,快来评论区互动吧~

END
点点赞
点分享
点推荐

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-21 20:01:06 HTTP/2.0 GET : https://f.mffb.com.cn/a/509215.html
  2. 运行时间 : 0.118251s [ 吞吐率:8.46req/s ] 内存消耗:4,655.59kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=f3685a8e576a63ce3211462c5a2695d9
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000445s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000524s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.006945s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000246s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000487s ]
  6. SELECT * FROM `set` [ RunTime:0.000196s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000498s ]
  8. SELECT * FROM `article` WHERE `id` = 509215 LIMIT 1 [ RunTime:0.000613s ]
  9. UPDATE `article` SET `lasttime` = 1787313666 WHERE `id` = 509215 [ RunTime:0.008249s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000348s ]
  11. SELECT * FROM `article` WHERE `id` < 509215 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000645s ]
  12. SELECT * FROM `article` WHERE `id` > 509215 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001986s ]
  13. SELECT * FROM `article` WHERE `id` < 509215 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.013704s ]
  14. SELECT * FROM `article` WHERE `id` < 509215 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000894s ]
  15. SELECT * FROM `article` WHERE `id` < 509215 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001408s ]
0.119821s