357个不联网的测试怎么写:last30days-skill-cn 爬虫解析测试与Mock策略实战案例
AI 技能深度研究网页爬虫【免费下载链接】last30days-skill-cnlast30days-cn 是一个 AI Agent 技能Skill能够自动搜索中国互联网 8 大主流平台最近 30 天的内容综合分析后生成有据可查的研究报告。项目地址https://gitcode.com/gh_mirrors/la/last30days-skill-cn点击查看免费下载last30days-skill-cn 是一个 AI Agent 技能Skill能自动搜索微博、小红书、B站、知乎、抖音、微信公众号、百度、今日头条这 8 大平台最近 30 天的内容综合打分、跨平台归并后生成有据可查的研究报告。它天然要处理反爬验证、登录墙、编码乱码、接口变更这些脏活所以测试必须可靠——而这套项目的答案是357 个测试全部不联网靠精心设计的 Mock 策略在几秒内跑完还能覆盖各平台解析器最真实的边界情况。一、为什么爬虫项目的测试不能联网写爬虫解析代码时最诱惑人的做法是直接请求真实页面来验证。但这条路线有三个致命问题不稳定平台随时改 HTML 结构、加反爬验证测试今天过、明天挂开发者会失去信任慢且贵30 个测试文件、357 个用例如果每个都发真实请求一轮 CI 要跑几十分钟有法律风险CI 机器高频访问平台容易触发封禁也触碰了项目免责声明里控制请求频率的红线。last30days-skill-cn 的做法是把**网络层和解析层彻底分开**。解析函数只接收 HTML/JSON 字符串测试就喂字符串真正发请求的http.get/http.fetch则用unittest.mock全部替换掉。这样解析逻辑 100% 离线且行为完全可预测。二、357 个测试的全景地图测试集中在 tests/ 目录共 30 个测试文件按被测模块一一对应测试文件用例数覆盖重点test_query_type.py28查询类型识别新闻/教程/对比等test_dates.py27各平台日期格式解析、时间窗过滤test_platform_parsers_v4.py21微博/小红书/抖音/百度/头条/微信 HTML 解析test_relevance.py23相关性打分test_score.py17综合评分相关性45%时效25%互动30%test_dedupe.py16同平台去重test_trending.py12全网热榜跨平台归并test_global_sources.py15HN / GitHub / Reddit 解析test_render_xss.py3HTML 报告 XSS 安全加固运行方式极其简单——项目零运行时依赖仅 Python 3.8 标准库开发时只需装 pytestpython -m pip install pytest python -m pytest tests -q三、Mock 策略 1patch 掉所有网络出口这是整个测试体系的基石。所有真实请求都收敛到 scripts/lib/http.py 这一个模块因此测试只需要打两个补丁# tests/test_platform_parsers_v4.py with patch.object(http, fetch, return_value(200, https://..., 页面HTML)): items wechat._search_via_sogou(AI) # 离线跑通完整搜索流程在 test_platform_parsers_v4.py 中搜狗微信的解析、头条 SSR 卡片、微博热搜全部用patch.object替换http.fetch/http.get。一个亮点是重试行为也能测头条首次返回空壳页、第二次返回完整页用side_effect[shell, full]让 mock 按顺序吐两个响应验证了空壳页自动重试逻辑同时用patch(lib.toutiao.time.sleep)把等待时间也跳过测试瞬间完成。scripts/lib/http.py 自身的测试test_http_v4.py则更进一步构造了一个FakeResponse类模拟urllib响应对象把 gzip 压缩 GBK 编码的中文页面直接压进字节流验证了解码链路def test_gzip_and_gbk_bodies_are_decoded(): raw gzip.compress(中文页面.encode(gbk)) response FakeResponse(raw, headers{Content-Encoding: gzip, ...}) with patch(lib.http.urllib.request.urlopen, Mock(return_valueresponse)): assert http.get_text(https://example.test/) 中文页面这种伪造字节流的写法让编码、压缩、重定向这些最容易出 bug 的底层行为全都变成了确定性断言。四、Mock 策略 2内联真实页面快照当测试数据Mock 网络还不够——解析器面对的是真实平台的 HTML如果测试里随便编一段 HTML等于什么都没测。last30days-skill-cn 的解法是把真实页面拍照存档写成内联字符串test_platform_parsers_v4.py 里的SOGOU_HTML一段真实的搜狗微信搜索结果页故意保留了导航链接、广告位、时间加密写法scriptdocument.write(timeConvert(...))/script验证解析器只抽出 2 条正文、跳过图片和医疗导航链接BAIDU_HTML包含百科卡片、AI 应用卡、推广广告data-tuiguang1断言解析结果只剩 1 条有效网页结果test_trending.py 里的SNAPSHOT注释标明2026-10-03 从线上热榜抓取6 个平台的热搜标题里混入了同一事件的 N 种叫法如中国男足获亚运铜牌vs拿下点球大战U23国足获亚运铜牌用来验证跨平台归并算法。此外还有独立的 fixtures/ 目录存放更完整的平台响应样本fixtures/bilibili_sample.json、fixtures/weibo_sample.json、fixtures/zhihu_sample.json供 test_normalize.py 做字段归一化回归。 核心思想测试数据的真实度 测试的可信度。与其 mock 一个理想页面不如 mock 一个真实得让人头疼的页面。五、Mock 策略 3tmp_path monkeypatch 隔离文件与登录态爬虫还有大量文件副作用Cookie 存到~/.config/、缓存写到磁盘。测试绝不能碰真实用户目录项目用 pytest 的tmp_path自动创建临时目录monkeypatch自动还原组合拳# tests/test_crawler_login.py pytest.fixture def cookie_dir(tmp_path, monkeypatch): monkeypatch.setattr(crawler_bridge, COOKIE_DIR, tmp_path) return tmp_path在 test_crawler_login.py 中知乎 Cookie 导入、微博双域名覆盖、过期 Cookie 不算登录、Cookie 文件权限必须是0600仅主人可读——这些涉及真实文件的操作全部落在临时目录里跑完即焚还配有autouse的 fixture 在每个用例前后重置浏览器熔断器状态保证用例之间零污染。六、Mock 策略 4用已知向量验证签名算法B站搜索需要 WBI 签名——一个纯数学过程。对这类算法最好的测试数据不是页面快照而是官方文档里的已知输入输出向量# tests/test_bilibili_v4.py def test_sign_wbi_matches_documented_vector(): signed bilibili.sign_wbi({foo: 114, bar: 514, zab: 1919810}, IMG_KEY, SUB_KEY, wts1702204169) assert signed[w_rid] 8f6f2b5b3d485fe1886cec6a0be8c5d4tests/test_bilibili_v4.py 用固定向量锁死get_mixin_key和sign_wbi的输出只要签名实现有一行被改错断言立刻失败完全不需要访问 B站任何接口。七、失败路径测试把反爬变成断言最见功力的是这个项目对失败场景的测试覆盖——爬虫 80% 的 bug 出在意料之外百度反爬识别test_baidu_antibot.py 喂入真实的百度安全验证页面 HTML断言_is_antibot_page返回True且公开搜索路径静默降级返回空列表而不是抛异常微博登录墙mock 一个返回-100状态的假 Session验证解析器抛出WeiboLoginRequired并且最终错误信息里包含修复命令login weibo、WEIBO_COOKIE——错误提示本身就是被测行为412 WAF 快速失败test_http_v4.py 用Mock(side_effectHTTPError)模拟 WAF 拦截断言只重试 1 次就快速失败、并提示了 WAF 字样避免傻等 3 次重试XSS 加固test_render_xss.py 把javascript:alert(1)塞进报告 URL断言 HTML 输出中被降级成#防止恶意内容随报告传播。八、CI 怎么跑一个完全离线的测试矩阵.github/workflows/ci.yml 定义了测试矩阵维度取值操作系统ubuntu-latest / windows-latest / macos-latest / ubuntu-22.04Python3.8 / 3.9 / 3.12可选依赖无 / jieba中文分词增强整个 CI 只pip install pytest然后python -m pytest tests -q——没有任何一步需要网络可达的中文平台。同一套命令在 Windows 上跑Cookie 文件权限用例会按os.name智能跳过在 Python 3.8macOS Catalina 老系统自带版本上也保持绿色。九、新手可复用的 5 条要点收口网络层所有请求走统一模块scripts/lib/http.py测试只需 patch 一个地方解析函数纯函数化parse_xxx(html) - items输入字符串、输出字典天然可测测试数据要真实到难看保留导航、广告、编码陷阱测的就是生产环境文件系统副作用用tmp_path绝不测试真实 home 目录失败路径与成功路径同等重要反爬页、登录墙、412、空壳页每种都有对应断言且错误信息里带上修复建议。这套零网络、全离线的测试体系正是 357 个用例敢在每次 push 都全量运行的底气——而它守护的是让 AI Agent 说最近 30 天大家到底在聊什么时每个结论都有据可查。赞分享AI 技能深度研究网页爬虫【免费下载链接】last30days-skill-cnlast30days-cn 是一个 AI Agent 技能Skill能够自动搜索中国互联网 8 大主流平台最近 30 天的内容综合分析后生成有据可查的研究报告。项目地址https://gitcode.com/gh_mirrors/la/last30days-skill-cn点击查看免费下载相关推荐Scrapy-Redis测试策略终极指南如何编写高效的爬虫测试用例 Scrapy Redis测试策略终极指南如何编写高效的爬虫测试用例 Scrapy Redis作为分布式爬虫的核心组件其测试用例编写直接影响爬虫的稳定性后端消息队列数据工程为什么OpenPencil选择用Rust全面重写性能与体积数据对比解析告别Electron为什么OpenPencil选择用Rust全面重写性能与体积数据对比解析告别Electron OpenPencil 是全球首个开源的 AI 原生化矢量设计工CKIP BERT Tiny Chinese核心功能详解断词、词性标注与实体识别实战CKIP BERT Tiny Chinese核心功能详解断词、词性标注与实体识别实战 CKIP BERT Tiny Chinese是一款专为繁体中文优化的轻量创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

AI驱动的Overleaf论文排版工作流:科技云LaTeX工程化实践

AI驱动的Overleaf论文排版工作流:科技云LaTeX工程化实践

1. 项目概述:这不是“AI代写”,而是把Overleaf变成你的智能协作者最近在某高校实验室带学生做毕业设计,连续三届都有人卡在论文排版上——不是内容不行,是LaTeX语法报错、参考文献格式崩了、图表编号乱序、附录页码跳变……最后通…

2026/10/11 23:09:55 阅读更多 →
Navicat导入Excel到MySQL:字段映射、编码与日期格式避坑指南

Navicat导入Excel到MySQL:字段映射、编码与日期格式避坑指南

简介:这份PDF文档面向需要将Excel电子表格数据批量迁移到MySQL数据库的开发者与数据库管理员,尤其适合刚接触Navicat导入功能、希望快速完成结构化数据入库的初中级用户。资源包共1个PDF文件,大小约189KB,内容围绕Navicat导入向导…

2026/10/11 23:09:55 阅读更多 →
Python网络数据分析可视化:从0到1项目拆解

Python网络数据分析可视化:从0到1项目拆解

做课程设计或者毕业设计的时候,“基于Python的网络数据分析可视化”这个题目出现的频率有多高,不用我多说。基本上每个班都能见到几个,名字可能略有不同,有的叫“某某平台数据采集与分析系统”,有的叫“网络数据可视化…

2026/10/11 23:09:55 阅读更多 →

最新新闻

绝缘子缺陷检测数据集清洗与工业级训练实战指南

绝缘子缺陷检测数据集清洗与工业级训练实战指南

简介:本资源是面向电力AI研发人员、工业视觉工程师及智能巡检系统开发者的绝缘子缺陷检测专用YOLO格式数据集,解决无人机航拍场景下绝缘子破损、污闪、积雪等9类典型缺陷的精准识别与定位难题。数据集共2139张真实巡检图像(含训练/验证/测试集…

2026/10/12 0:05:01 阅读更多 →
牙科影像龋齿四级像素级分割数据集与临床落地实践

牙科影像龋齿四级像素级分割数据集与临床落地实践

简介:本资源是一套面向医学影像AI研究者与口腔临床算法开发者的专业蛀牙分割数据集,专为U-Net、DeepLab等分割模型训练设计,解决真实场景下多类别蛀牙区域精细识别与程度量化评估难题。数据集含400张高精度口腔内窥镜及X光影像(对…

2026/10/12 0:05:01 阅读更多 →
条形码目标检测数据集实战:从YOLOv8训练到部署

条形码目标检测数据集实战:从YOLOv8训练到部署

简介:这是一份面向目标检测与计算机视觉学习者的条形码识别数据集,涵盖零售、物流、制造等场景下的真实商品条码图像,适合用于训练YOLO系列模型或开展算法实验。数据集共684张图片,按训练集624张、验证集60张划分,采用…

2026/10/12 0:04:01 阅读更多 →
MongoDB复制集扩缩容实战:从rs.add到选主事故复盘

MongoDB复制集扩缩容实战:从rs.add到选主事故复盘

月初帮业务团队扩容一套 MongoDB 复制集,需求描述只有一句话:“加一台新机器进复制集,扛一下读流量。”我反问了一句:“你打算怎么加?”对方很自信:“rs.add() 啊,一行命令的事。”我当场就把计…

2026/10/12 0:04:01 阅读更多 →
Debian新手入门:从部署到日常操作的完整指南

Debian新手入门:从部署到日常操作的完整指南

第一次装完Debian,盯着黑乎乎的终端窗口迷茫好一会儿,这是我至今印象很深的场景。系统能开机、能登录,但下一步该敲什么命令完全没头绪。后来用久了才想明白一件事:Linux的入门难点从来不是"怎么把系统装上"&#xff0c…

2026/10/12 0:04:01 阅读更多 →
多模态大模型入门:从原理到实战,一文搞懂图文音视频一体模型

多模态大模型入门:从原理到实战,一文搞懂图文音视频一体模型

一、什么是多模态大模型? 💡 核心定义:多模态大模型是能够同时处理、理解和生成文本、图像、音频、视频等多种模态信息的人工智能模型。它打破了传统单模态模型(如仅处理文本的GPT-3或仅处理图像的ResNet)的限制&#…

2026/10/12 0:04:00 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →