乐于分享
好东西不私藏

从算法算分到App排序的端到端验证实践

从算法算分到App排序的端到端验证实践

从算法算分到 App 排序:一套可复现、可追溯的端到端验证方法

摘要:算法排序测试不是凭感觉判断“这条看起来应该排在前面”,而是先建立可计算的预期,再对数据、算法接口、后端处理和 App 展示进行全链路核验。本文给出一套可直接落地的四步测试流程,并结合真实项目中的数据构造、Appium 自动化、沟通确认和误报排查经验,说明如何让每一个结论都有证据、可复现、可回归。

说明:文中画面来自测试环境,数据标识仅用于自动化验证。对外发布时仍应按团队规范检查企业名称、头像、账号、域名和业务 ID 是否需要脱敏。

一、整体概述

1.1 这是做什么的?

这套方法用于验证后端算法规则是否正确,更准确地说,是验证 App 最终展示的搜索或推荐结果,是否符合算法的召回、分桶、算分和排序逻辑。

它不只是接口测试,也不只是 App UI 测试,而是一次完整的端到端验证:

任何一层都可能使最终结果发生变化。因此,只看算法接口或只看 App 页面,都不足以得出可靠结论。

1.2 核心思路

1.3 一句话概括

根据算法的算分规则准备数据,调用算法接口建立预期,再到 App 上核对最终排序。

二、为什么这类测试比普通功能测试难?

普通功能测试的预期往往是确定的,例如“点击保存后显示成功”。排序算法的预期则由多层规则共同决定:

  • 查询词如何分词,是否识别为品名、牌号或厂家。
  • 数据先进入哪个相关性桶或召回路径桶。
  • 同桶内哪些字段计分,是完全命中还是部分命中。
  • 发布时间、企业属性、热度、报价数是否参与加分。
  • 后端是否还会分页、折叠、去重、屏蔽或置顶。
  • 同分时使用时间、ID 还是其他字段作为兜底。

这意味着,“分数高的一定排在前面”并不总是正确。更准确的判定通常是:先比较桶的优先级,只在同一个桶内比较综合分,最后再核对同分兜底规则。

三、输入准备:开始前必须拿到什么?

序号
准备项
不只要“有”,还要确认的内容
1
算法接口
环境域名、请求方式、查询类型、是否使用缓存、如何获取全量结果
2
接口文档
请求字段、返回字段、错误码、分页、过滤、折叠参数
3
数据库或后台权限
数据表、业务字段、状态字段、发布时间、失效时间、用户归属和环境边界
4
App 自动化脚本
包名、设备、入口导航、系统弹窗、列表滚动、截图与 XML 留证
5
算法规则
召回、分桶、字段权重、时间衰减、额外加分、同分兜底、折叠和过滤
6
版本基线
需求文档修订号、算法版本、后端版本、App 版本和发布时间

第 6 项很容易被忽略。如果产品已把时间分从旧的五档改为新的七档,但测试脚本仍断言旧分数,结果会把正确实现误报为 Bug。

四、执行流程:四步走

第一步:先用现有数据测试

目标是先判断数据库或接口中的现有数据,能否支撑规则验证。

优先使用现有数据有三个好处:

  • 减少测试数据对列表和索引的污染。
  • 更接近真实业务分布,能暴露理论规则之外的问题。
  • 避免多轮重复造数后,相似度折叠、去重或缓存产生交叉影响。

查询时不要只看“有没有这个关键词”,而要建立数据维度表。例如:

样本
命中字段
召回桶
发布时间
企业属性
预期作用
A
产品名称完全命中
高相关
较旧
普通
验证高桶优先
B
描述部分命中
低相关
最新
高分企业
验证额外分不能跨桶
C
与 A 同桶同字段
高相关
最新
普通
验证同桶时间分

第二步:AI 按规则构造受控数据

只有现有数据无法形成对照时,才进入造数。AI 在这里不是随机生成内容,而是把规则转换为可执行的数据矩阵。

一个基本矩阵至少应覆盖:

  • 高分场景:高权重字段完全命中。
  • 低分场景:低权重字段部分命中。
  • 边界值场景:时间衰减分档前后、计数上限、空值。
  • 跨桶场景:低桶高分与高桶低分的对照。
  • 同分场景:所有可见分值相同,验证兜底顺序。
  • 特殊规则:折叠、去重、过滤、屏蔽、置顶或失效。

例如,“发布时间越近分数越高”不能只造“今天”和“30 天前”两条。正确方式是对照产品分档,在每一个边界的前一刻、边界点和后一刻各准备一条数据。

受控数据还要满足四个工程要求:

  1. 每条数据带唯一标识,例如 RANK-20260730-HIGH-01
  2. 记录创建后的业务 ID,不依赖页面文案猜测。
  3. 相似度、用户和发布时间受控,避免混入历史折叠组。
  4. 建立 manifest,保存标识、ID、用户、时间、用途和预期桶。

第三步:调用算法接口自动算分

数据准备后,通过算法接口获取召回路径、分桶、字段分、时间分、额外分和最终分。一个通用请求示例如下:

{  "type": 13,  "query": "K8003独山子石化",  "condition": {},  "entry_type": 2,  "is_fold": 0,  "size": 100}

理想的响应证据至少包含:

{  "id": "controlled-data-id",  "path_bucket": 0,  "field_score": 400,  "enterprise_score": 20,  "pub_time_score": 200,  "weighted_sum": 620,  "publish_timestamp": "2026-07-30T10:00:00+08:00"}

测试代码不应只断言一个 weighted_sum,而应分层判断:

def assert_ranked(rows):    buckets = [row["path_bucket"] for row in rows]    assert buckets == sorted(buckets), "召回路径发生跨桶"    for bucket in sorted(set(buckets)):        scores = [            row["weighted_sum"]            for row in rows            if row["path_bucket"] == bucket        ]        assert scores == sorted(scores, reverse=True), "同桶综合分未降序"

为避免缓存或非稳定兜底带来误判,关键场景应至少连续请求 3 次,并保存原始响应和精简分析结果。

第四步:App 端核验最终排序

算法分数是预期的重要依据,但不是最终结论。后端可能在算法结果之上进行折叠、过滤、分页和权限处理,App 也可能存在二次排序。因此必须到真实页面上完成闭环。

Appium 执行链路通常是:

抓取页面列表时,优先通过 resource-id 和 XML 节点读取标题、产品名称或业务 ID,不要默认使用 OCR。OCR 受高亮、省略号和字体影响,适合做辅助,不适合作为唯一的排序证据。

图 1:真机组合筛选结果。页面可以证明“企业求购 + PP”筛选已生效,但要证明排序正确,仍需要用业务 ID 与接口返回顺序对照。

核验维度包括:

核验项
判定方式
桶间顺序
高优先级桶的全部结果应位于低优先级桶之前
同桶算分
同桶内综合分按规则降序
同分顺序
连续刷新顺序稳定,且符合明确的兜底字段
分页
先对全量结果排序再分页,不只在单页内排序
折叠
默认保留的数据正确,展开后数量、位置和顺序正确
过滤
筛选只缩小数据集,不应破坏原有相对顺序
极值
极高分、极低分、空分和失效数据均正常展示或过滤

五、建立“可计算的测试预言”

排序测试的核心不是自动化操作,而是测试预言(test oracle)。测试预言要回答:“在给定这组数据和规则时,正确结果到底应该是什么?”

推荐把预期拆成四层:

  1. 召回预期
    :哪些数据应该出现,哪些不应出现。
  2. 分桶预期
    :每条数据应进入哪个桶。
  3. 算分预期
    :每个分项和综合分应为多少。
  4. 展示预期
    :折叠、筛选、分页后 App 应展示哪些数据,顺序如何。

如果响应只提供了最终分,却没有召回路径、命中字段或分项分,则只能验证“顺序是什么”,无法解释“为什么是这个顺序”。这类用例应记录为证据阻塞,不应随意判定通过或失败。

六、对话沟通技巧:如何尽快把规则问清楚

算法测试的大量时间并不消耗在写脚本上,而是消耗在“规则究竟是什么”的确认上。高效沟通的关键是少问宽泛问题,多问可直接决定用例预期的封闭问题。

6.1 和算法团队沟通

不要只问:

“这个结果的排序对吗?”

更有效的问法是:

“查询词 K8003独山子石化 会被分成哪些有效词?牌号和厂家分别命中产品名称时应进哪个桶?同桶内哪些字段参与分数?响应中哪些字段可以证明这三件事?”

建议一次确认以下内容:

  • 查询预处理和同义词处理时机。
  • 召回路径与桶优先级。
  • 字段权重、命中系数和上限。
  • 分项分是原始分还是已经加权的分。
  • 缓存键、索引更新延迟和调试字段。

6.2 和产品沟通

产品文档常会写“同分后按时间排序”,但测试需要更细的答案:

  • 时间是发布时间、更新时间还是算法加权时间?
  • 精度是秒、毫秒还是天?
  • 两条数据时间完全相同时如何排序?
  • 折叠组是先选最新代表项再排序,还是先排序再折叠?

一个容易读懂的产品确认模板是:

“当两条供应数据处于同一召回桶,且字段分、企业分、时间分和综合分都相同时,连续刷新的结果顺序应保持稳定吗?如果应稳定,最后一个兜底字段是什么?”

6.3 提 Bug 前的沟通

不要只发一张截图说“排序不对”。一条高质量问题消息应包含:

  1. 规则
    :引用确切的文档版本和规则。
  2. 数据
    :给出两条或多条对照数据的 ID 和关键字段。
  3. 算分
    :给出召回桶、分项分、综合分和接口顺序。
  4. 展示
    :给出 App 顺序、截图、XML 或录屏。
  5. 排除项
    :说明已排除缓存、旧数据污染、文档过期和自动化定位问题。
  6. 判定
    :明确说明是确认缺陷,还是需要产品确认口径。

这样的消息不仅方便开发定位,也能显著降低“实际是数据问题,却被当成算法 Bug”的概率。

七、关键难点与解决方法

难点 1:文档改了,脚本没改

现象:接口返回的分数与脚本断言不同,看起来像回归失败。

根因:产品已修订时间分档或字段权重,测试仍使用旧预期。

解法

  • 每次执行记录文档 revision、算法版本和发布时间。
  • 把分数表配置化,不在测试函数中分散写死。
  • 遇到分数不同时,先核对当前规则,再判定产品问题。

难点 2:测试数据看起来“一新一旧”,实际同一秒发布

现象:折叠后保留了预期之外的数据,被误判为“未保留最新帖”。

根因:两条数据虽然按先后顺序创建,但后台实际写入的发布时间精度只到秒,两条数据最终完全同时。

解法

  • 创建后回查真实入库时间,不相信请求中的计划时间。
  • 两条数据之间延迟足够时间,或通过允许的测试工具准确设置时间。
  • 使用唯一的折叠标识,避免新数据与历史相似数据进入同一组。

图 2:折叠入口是一条 UI 证据;是否保留最新帖,还需要同时核对折叠组内各条数据的实际发布时间和 ID。

难点 3:多轮造数导致结果污染

现象:同一查询词的结果越来越多,折叠组、分页和排序边界变得不稳定。

解法

  • 造数脚本幂等,存在相同 tag 时复用而非重建。
  • 每一轮使用唯一前缀和可追溯 manifest。
  • 在不影响历史证据的前提下,制定测试数据失效或清理策略。
  • 发现污染时新建隔离查询词或隔离组,不在污染集合上继续叠加。

难点 4:算法接口顺序正确,App 顺序仍可能不同

可能原因

  • 后端根据权限、业务状态或屏蔽规则再次过滤。
  • 折叠代表项替换了原排序项。
  • App 使用本地缓存、分页追加或前端二次排序。
  • 测试调用的接口参数与 App 实际参数不同。

解法:同时保存 App 网络请求、算法原始响应、后端最终响应和 App XML,使用业务 ID 进行四方对照。

难点 5:Appium 被弹窗、页面改版和 stale element 干扰

真机自动化不稳定不等于产品失败。常见问题包括:

  • 报价提醒、权限、经营诊断等弹窗遮挡入口。
  • 页面改版后,原来的 tab 已不存在。
  • 输入框在点击、清空后重新渲染,旧 element 引用失效。
  • 真机 USB 调试接口断开,Appium 服务正常但 adb 无设备。

处理原则是:操作前先检查弹窗;定位器来自当前页面快照;页面重绘后重新查找元素;自动化错误与业务断言失败分开记录。

图 3:弹窗会遮挡搜索入口。自动化应先根据当前 XML 关闭弹窗,再进行输入和点击,否则失败应归因为脚本问题而非算法 Bug。

难点 6:缺少证据时,“没看出问题”不等于通过

如果用例要求核对命中频次,但接口没有返回频次或任何可替代证据,正确状态是“阻塞”,不是“通过”。

建议在总账中严格区分:

状态
含义
通过
已执行,所有预期均有证据支撑
失败
已执行,实际结果与有效规则不一致
阻塞
已尝试执行,但数据、权限或可观测性不足以下结论
未执行
尚未实际执行用例
范围排除
经产品确认不属于本轮验收
产品接受
已识别风险,产品明确确认本期不处理

八、三个通用场景示例

场景一:搜索排序

假设规则是“匹配度与热度共同决定同桶排序”:

  1. 构造高匹配低热度、低匹配高热度和高匹配高热度样本。
  2. 调用接口确认它们的召回桶、匹配分、热度分和综合分。
  3. 先验证热度不能让低匹配样本突破高优先级桶。
  4. 再验证同桶内按综合分排序。
  5. 在 App 搜索同一关键词,按 ID 比对顺序。

场景二:推荐列表

假设规则是“用户偏好分 × 内容质量分”:

  1. 固定用户和会话,避免用户画像在测试期间变化。
  2. 构造不同标签匹配度和内容质量的样本。
  3. 记录推荐请求中的用户 ID、场景、实验组和随机种子。
  4. 比对算法结果、后端最终结果与 App 曝光顺序。

推荐场景比搜索场景更容易受实验分流和随机性影响,因此必须固定实验组并执行多轮统计。

场景三:置顶或付费加权

假设付费内容在同桶基础上加权 50%:

  1. 构造内容完全相同、只有付费标识不同的对照组。
  2. 核对加权前原始分和加权后分数,不只看最终名次。
  3. 验证加权是否只在同桶生效,以及是否有有效期和上限。
  4. 在 App 上核对位置、置顶标识和分页稳定性。

九、证据链与报告设计

一条完整证据链应该能从用例直接追溯到数据、接口和 App 画面:

用例 ID  -> 规则版本/修订号  -> 受控数据 manifest  -> 算法请求与原始响应  -> 分桶/分数分析 JSON  -> App 截图 + XML + 必要时的录屏  -> 通过/失败/阻塞结论  -> Bug ID 或产品确认记录

建议最终保留一份完整状态总账,字段至少包括:

字段
用途
case_id
稳定关联用例、证据和 Bug
name
可读的验收点
priority
风险级别
status
通过、失败、阻塞、未执行、排除等
notes
简洁说明实际结果和判定依据
evidence
原始响应、截图、XML、录屏和报告路径

不要用 Appium pytest 收集的少量 UI 用例数冒充整份 Excel 的用例数。对于接口、数据库、App 和人工共同执行的集成回归,应先完成总账,再将总账转换为 Allure 结果。

十、关键原则

原则
说明
先旧后新
优先用现有数据,数据维度不足再造数
按规则造数
每条数据都对应某个分桶、分数或边界预期
分数先行
先用接口建立可计算预期,再核对 App
先桶后分
不用最终分直接跨桶比较
端到端
数据、算法、后端和 App 四层都要有证据
覆盖边界
正常值、边界值、空值、同分和异常状态都要测
数据隔离
唯一标识、幂等造数和 manifest 避免历史污染
结论可追溯
任何通过或失败都能追溯到原始证据
不把阻塞当通过
无数据、无权限或无解释字段时必须明确标记

十一、执行检查清单

执行前

  •  确认需求文档修订号和当前发布版本。
  •  确认算法、后端、App 都指向同一环境。
  •  确认查询类型、分页、折叠、缓存和过滤参数。
  •  从规则生成数据矩阵,标明每条数据的用途。
  •  先查询现有数据,确认哪些场景需要造数。
  •  检查 adb、Appium、设备、包名和当前登录状态。

执行中

  •  造数后回查真实入库值和业务 ID。
  •  等待索引同步,不用固定的短时间 sleep 代替轮询。
  •  保存算法原始响应和分析结果。
  •  关键排序连续请求至少 3 次。
  •  App 操作前关闭权限、活动和业务弹窗。
  •  同时保存截图、XML 和必要的录屏。
  •  失败时先区分业务断言、数据问题和自动化问题。

执行后

  •  完成全量用例状态总账,不遗漏非 UI 用例。
  •  每条失败都附规则、数据、接口和 App 证据。
  •  重复 Bug 不重复提交,但不同环境的独立问题按团队流程处理。
  •  阻塞项写明需要谁提供什么,不只写“无法测试”。
  •  记录测试数据的失效或清理策略。
  •  输出可浏览的报告,并保留原始工件路径。

十二、总结

这套方法可以压缩成五个动作:

环节
核心动作
准备
拿到算法接口、接口文档、数据权限、App 脚本和有效规则
数据
先查现有数据,不足时再按规则构造受控对照组
算分
调用算法接口,记录召回桶、分项分和最终顺序
核验
用 Appium 获取 App 实际列表,按业务 ID 与接口顺序比对
结论
区分通过、产品失败、数据问题、脚本问题和证据阻塞

算法验证测试的核心是用数据说话。我们不凭观感判断排序,也不把接口的一个最终分当成全部真相。我们用受控数据构造对照,用算法接口建立客观预期,用 App 最终展示完成闭环,再用可追溯证据支撑每一个结论。

当每一条 Bug 都能回答“哪条规则、哪组数据、哪个分项、哪个顺序不一致”,当每一次回归都能重放当时的数据和证据,算法测试才真正从“看起来对不对”升级为一项稳定的工程能力。

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