这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
端到端测试实战:Playwright 从零到生产线
Playwright 端到端测试深度实战:从架构原理到生产级 CI/CD 集成,涵盖 Page Object Model、登录态管理、Trace Viewer、视觉回归测试,以及与 Selenium/Cypress 的全维度对比。
posts
这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
Playwright 端到端测试深度实战:从架构原理到生产级 CI/CD 集成,涵盖 Page Object Model、登录态管理、Trace Viewer、视觉回归测试,以及与 Selenium/Cypress 的全维度对比。
深入讲解突变测试原理与实战:为什么覆盖率可以作弊、突变类型全览、突变评分计算、mutmut/PIT/StrykerJS 三大工具实战、等价突变处理策略,以及突变测试与覆盖率的互补关系。
测试覆盖率深度解析:行覆盖、分支覆盖、路径覆盖的含义与局限,JaCoCo/Coverage.py 报告解读,增量覆盖率策略,SonarQube 质量门禁配置,以及 CI/CD 中的自动化质量度量体系。
从测试数据管理问题出发,系统讲解 Object Mother、Builder、Fixture、Mock、Contract Testing 到 Testcontainers 的完整链路,涵盖多语言工厂模式、数据库测试策略和环境隔离方案。
性能与负载测试深度指南:Load/Stress/Spike/Soak 四大测试类型,k6 JavaScript 场景编排、Locust Python 协程、JMeter JMX 配置,以及性能基线、回归测试与 CI 集成的生产级实践。
系统对比三大主流单元测试框架 pytest、JUnit 5、Go testing 的深度特性,涵盖 FIRST 原则、AAA 模式、Mock 策略、Table-Driven Tests、Benchmark,以及单元测试粒度、可测性设计和常见反模式。
测试驱动开发 TDD 与行为驱动开发 BDD 深度实战:Red-Green-Refactor 循环、FIRST 原则、Gherkin 语法、Cucumber/pytest-bdd 工具链,以及测试先行的真实案例与反模式规避。
深入 Solidity Gas 优化实战:EIP-1559 计费机制、存储读写成本模型、数据位置选择、状态变量打包、EIP-1167 最小代理,以及 Uniswap 级优化案例与基准对比。
API 测试自动化深度指南:涵盖 REST / GraphQL / gRPC 三种协议的统一测试策略,Postman/Newman/pytest/RestAssured 工具链,OpenAPI 契约测试,以及认证、性能与 CI/CD 集成实践。
本节收束数据访问层剩下的三个难题:表结构怎么改才不锁库、并发写入怎么写才不留半成品、连接池该配多大才不会把数据库压垮。先讲 expand-contract 迁移模式与加列改列的真实锁行为,再讲交互式事务、隔离级别、死锁重试与 outbox,最后给出连接数估算公式、PgBouncer 与预编译语句的冲突,以及慢查询与连接指标的观测手段。
本节换一条与 Prisma 相反的路线:用 TypeScript 文件本身描述表结构,让类型从查询语句推导出来。先安装 drizzle-orm 与 drizzle-kit,用 pgTable 定义表、列、枚举与索引,再讲清 $inferSelect 与 $inferInsert 的差别,随后逐个演示 select、join、where 与关系查询 API 的类型结果,最后给出迁移命令与选型建议。
本节把 Prisma 当作一条从数据库结构到 TypeScript 类型的单向流水线:写出第一个 schema.prisma,逐块拆解 generator、datasource 与 model 的字段类型与常用属性,观察 prisma generate 生成了什么,并说明 select、include 的返回类型如何推导。最后给出常见报错对照与 N+1 规避,读完你能独立设计可演进的数据模型。
实体直接出现在接口层会带来懒加载代理序列化失败、字段泄露与循环引用三类事故。本节给出投影(interface / DTO)的用法与边界、手写转换与 MapStruct 的取舍、Repository 与 Service 的职责划分,以及 readOnly 事务与转换时机的关系。
每个接口都要记日志、查登录,写进 Controller 太啰嗦。本节对比 Filter(Servlet 规范)与 HandlerInterceptor(Spring MVC)的执行时机,用真实日志证明 Filter → Interceptor → Controller 的顺序,演示两种 Filter 注册方式与拦截器路径匹配,并完整实现请求 ID 贯穿与登录校验。
Alembic 1.20.0 实战:从 init 到 env.py 配置、autogenerate 生成迁移、upgrade/downgrade/history/current 全套命令,讲清加列、数据回填与不可逆操作等演进策略,代码在 SQLite 上真跑过。
从 session 生命周期讲起,用实测数据讲清事务边界、连接池参数(pool_size/max_overflow/pool_pre_ping)与 N+1 识别治理;用事件钩子统计 SQL 条数,对比惰性、selectinload、joinedload 的真实数字。
SQLAlchemy 2.1.4 实战:用 DeclarativeBase 与 Mapped[] 定义类型化 ORM 模型,改用 select() 2.x 风格查询,讲清关系映射、加载策略与 ORM/Pydantic 模型分层的工程取舍,代码在 SQLite 上真跑过。
Go 用组合而非继承来复用代码。本节给 TaskAPI 引入子任务 Subtask,用结构体嵌入复用 Task 的字段与方法,讲清提升规则、嵌入字段名、方法冲突消歧、值嵌入与指针嵌入的差别、多级嵌入的传播,并说明何时该用具名嵌套而非结构体嵌入。
给 Task 加上 Complete() 与 Rename() 后,接收者的选择成了绕不开的问题。本节讲清值接收者与指针接收者的语义差异、方法集与接口满足规则、自动取址与不可寻址的坑、nil 指针接收者的安全性,并给出 TaskAPI 里每个方法的接收者决策依据。
结构体是 Go 组织数据的核心。本节把 TaskAPI 里的 Task 从散落字段提升为可初始化、可比较的值类型,讲清命名字段、三种字面量初始化写法、零值语义、值传递与指针传递的差别、字段对齐与可比较规则,并给出项目里 Task 的最终定义与常见初始化陷阱。