资讯详情

资讯详情

软件测试资料汇总:从手工用例到自动化落地的完整知识体系

简介这份软件测试资料汇总面向测试初学者与转行人员系统梳理了从测试基础到工程实践的核心知识脉络帮助读者建立完整的测试知识框架。内容覆盖测试基础、软件质量体系ISO9001、CMM、6西格玛、VV模型、单元测试、集成测试、系统测试、测试覆盖率、测试用例设计方法边界值、等价类、因果图、正交试验法等、同行评审、配置与需求管理、缺陷管理及SQL Server等测试工具并附有第一阶段英语单词与复习问题总结。资源包内含1个doc文档约820KB以结构化笔记形式呈现目录按知识模块划分便于按主题查阅与复习。目前已有882人学习下载适合作为测试入门阶段的系统学习笔记也可用于面试前梳理知识点、对照查漏补缺。1. 软件测试资料汇总一份能直接落地的知识体系该长什么样很多人第一次搜「软件测试资料汇总」心里想的其实是有没有一份东西能让我从零散的手工点点点过渡到能独立设计用例、搭自动化、看懂 CI 报告。现实是网上流传的所谓「很全的笔记」大多只是名词堆砌——把等价类、边界值、Selenium、JMeter 列一遍看完还是不知道明天上班该干什么。我见过太多新人抱着几十页 PDF 背概念结果连一个登录接口的异常分支都覆盖不全。这份汇总要解决的不是「知道有哪些测试类型」而是「拿到一个需求我能拆出测试点、写出可执行用例、选对工具、把结果沉淀成可复用的资产」。它适合两类人刚转行想建立完整框架的测试新人以及做了两三年手工测试、想往自动化与质量保障方向走的工程师。下面我按自己带人时用的顺序把资料拆成能照着练的模块。2. 测试知识地图从需求到用例的四层拆解2.1 为什么先建地图再背概念零散背「黑盒白盒」最大的问题是记不住也用不上。我一般让新人先画一张四层地图需求层、设计层、执行层、度量层。需求层解决「测什么」设计层解决「怎么设计用例」执行层解决「用什么跑」度量层解决「跑完怎么判断质量」。这四层对应到资料上就是需求分析文档、用例设计方法、工具链手册、缺陷与覆盖率报告。地图建好之后每学一个概念都往对应层里塞知识才不会散。比如「边界值」属于设计层「Selenium」属于执行层「缺陷密度」属于度量层。下面这张表是我带人时用的分层对照可以直接抄。层级核心问题典型产出对应资料类型需求层测什么、不测什么测试范围清单需求规格、验收标准设计层用例怎么覆盖用例集、测试点等价类、边界值、判定表执行层用什么跑、怎么跑脚本、执行报告自动化框架、接口工具度量层质量怎么量化缺陷报告、覆盖率缺陷管理、覆盖率统计2.2 需求层把模糊需求拆成可测点需求层最容易翻车。产品写「用户登录要安全」这句话没法直接测。我一般做三步拆解先找输入再找规则最后找异常。以登录为例输入是账号密码规则是长度、字符集、错误次数限制异常是空值、超长、特殊字符、并发登录。拆完写成测试点清单每个点对应一条或几条用例。这里给一个用 Python 做测试点去重的小脚本避免手工整理时漏项。# 测试点去重与分类脚本 # 输入从需求文档里手工提取的测试点列表 # 输出按模块分组、去重后的测试点 raw_points [ 登录-正常账号密码, 登录-密码错误, 登录-账号为空, 登录-密码为空, 登录-账号超长, 登录-密码错误超过5次锁定, 登录-正常账号密码, # 重复项用于验证去重 ] def dedup_and_group(points): seen set() result {} for p in points: if p in seen: continue seen.add(p) # 按第一个短横线前的模块名分组 module p.split(-)[0] result.setdefault(module, []).append(p) return result grouped dedup_and_group(raw_points) for module, items in grouped.items(): print(f模块{module}共{len(items)}个测试点) for i in items: print( -, i)这段脚本的逻辑很简单用集合去重用短横线切分模块名做分组。参数上raw_points就是手工提取的原始列表实际使用时可以从 Excel 读入。跑完输出每个模块的测试点数量方便判断覆盖是否均衡。注意它只做去重和分组不做语义合并——「密码错误」和「密码不正确」会被当成两条需要人工再收一次。2.3 设计层等价类与边界值的组合用法设计层的方法很多但真正高频的就三个等价类、边界值、判定表。等价类负责划分有效无效区间边界值负责卡在区间边缘判定表负责多条件组合。我一般先等价类划范围再边界值取点最后判定表补组合。以「年龄输入 18 到 60」为例等价类分有效18-60、无效小18、无效大60边界值取 17、18、19、59、60、61如果还有「会员等级」和「地区」两个条件就用判定表列组合。下面这张表是判定表的简化示例。会员等级地区预期折扣用例编号普通国内无TC-01普通海外无TC-02高级国内9折TC-03高级海外8折TC-04判定表的价值在于把「条件组合」显式列出来避免只测了单条件就以为覆盖全了。实际项目里条件一多组合会爆炸这时候用正交表或成对组合裁剪但裁剪前必须先把全组合列出来再按风险取舍。2.4 执行层与度量层工具选型和指标口径执行层选工具只看三件事被测对象、团队技能、维护成本。Web UI 优先看 Playwright 或 Selenium接口优先看 requests 加 pytest性能看 JMeter 或 Locust。不要一上来就追求全栈自动化先把接口自动化跑通再补 UI。度量层最容易自欺欺人覆盖率 90% 不代表质量好可能只是用例都走了同一条路径。我一般同时看缺陷密度、用例通过率、回归发现缺陷数三个指标单看一个都会偏。下面给一个 pytest 接口测试的最小骨架可以直接改成自己的项目。# 接口测试最小骨架pytest requests import pytest import requests BASE_URL http://localhost:8000 def test_login_success(): 正常登录验证状态码和返回字段 resp requests.post( f{BASE_URL}/api/login, json{username: test01, password: Passw0rd} ) assert resp.status_code 200 body resp.json() assert token in body assert body[code] 0 def test_login_wrong_password(): 密码错误验证错误码不校验具体文案 resp requests.post( f{BASE_URL}/api/login, json{username: test01, password: wrong} ) assert resp.status_code 200 assert resp.json()[code] ! 0这段代码的关键点BASE_URL抽成常量方便切环境断言只校验稳定字段不校验易变文案错误分支只判断code非零避免文案改动导致用例失败。参数上json会自动设置 Content-Type比手工拼 headers 稳。跑之前确认服务已启动否则会报连接错误这是新人最常见的翻车点。3. 手工测试用例设计把「很全的笔记」变成可执行清单3.1 用例的四个必备字段一份能执行的用例至少要有前置条件、操作步骤、预期结果、优先级。缺前置条件别人复现不了缺优先级回归时不知道先跑哪些。我见过很多笔记只写「测试登录功能」这不是用例是待办。正确写法是前置条件为「已注册账号 test01服务正常」步骤为「输入正确账号密码点击登录」预期为「跳转首页返回 token」优先级 P0。下面给一个用 Python 生成用例编号和优先级排序的小工具。# 用例编号生成与优先级排序 # 输入用例字典列表 # 输出带编号、按优先级排序的用例列表 cases [ {module: 登录, title: 正常登录, priority: P0}, {module: 登录, title: 密码错误, priority: P1}, {module: 登录, title: 账号为空, priority: P1}, {module: 支付, title: 余额不足, priority: P0}, ] priority_order {P0: 0, P1: 1, P2: 2} def build_cases(cases): # 先按模块和优先级排序 sorted_cases sorted( cases, keylambda c: (c[module], priority_order.get(c[priority], 9)) ) result [] for idx, c in enumerate(sorted_cases, start1): c[id] fTC-{idx:03d} result.append(c) return result for c in build_cases(cases): print(c[id], c[module], c[title], c[priority])逻辑说明先按模块名和优先级排序再统一编号保证编号稳定可追溯。priority_order字典把 P0 排最前未知优先级排最后。参数上cases可以从 Excel 或 YAML 读入。注意排序后编号会变如果用例已经关联到缺陷系统编号要固定不能每次重排。3.2 用例评审三个人半小时能发现什么用例写完必须评审但评审不是念稿。我一般组织三个人写用例的人、开发、产品。流程是每人先默读十分钟标出「看不懂、有歧义、缺分支」三类问题再逐条过。半小时通常能发现三类问题前置条件缺失、预期结果模糊、异常分支漏测。评审记录要落到用例上不能只口头说。下面这张表是评审问题分类可以直接当检查单用。问题类型典型表现修改动作前置缺失没写账号状态补前置条件预期模糊写「正常显示」改成具体字段值分支漏测只测成功补异常和边界步骤跳跃直接写结果补中间操作3.3 回归用例集的裁剪策略全量回归跑不起是常态必须裁剪。我一般按三个维度裁变更影响范围、历史缺陷密度、业务核心程度。变更涉及的模块全跑历史缺陷多的模块加跑核心业务必跑。裁剪不是拍脑袋要有依据。下面给一个按权重算回归优先级的脚本。# 回归用例优先级计算 # 权重变更影响 0.5历史缺陷 0.3业务核心 0.2 cases [ {id: TC-001, change: 1, defect: 3, core: 1}, {id: TC-002, change: 0, defect: 1, core: 1}, {id: TC-003, change: 1, defect: 0, core: 0}, ] def score(c): return c[change] * 0.5 c[defect] * 0.3 c[core] * 0.2 ranked sorted(cases, keyscore, reverseTrue) for c in ranked: print(c[id], round(score(c), 2))逻辑说明三个维度加权求和权重按项目实际调整。change表示是否在变更范围内defect是历史缺陷数core是否核心业务。参数上权重之和为 1方便比较。注意这只是一个排序参考最终还要结合执行时间取舍不能只看分数。4. 自动化测试落地从接口到 UI 的最小闭环4.1 为什么先做接口自动化UI 自动化维护成本高、跑得慢、容易受前端改动影响。接口自动化稳定、快、覆盖核心逻辑。我一般让团队先把接口自动化跑通再考虑 UI。接口自动化的最小闭环是用例管理、请求封装、断言、报告。用例管理用 pytest请求封装用 requests 的 Session断言用 assert报告用 pytest-html。下面给一个带 Session 复用的封装示例。# 接口测试封装Session 复用 统一断言 import pytest import requests class ApiClient: def __init__(self, base_url): self.base_url base_url self.session requests.Session() def post(self, path, **kwargs): url f{self.base_url}{path} return self.session.post(url, **kwargs) def get(self, path, **kwargs): url f{self.base_url}{path} return self.session.get(url, **kwargs) pytest.fixture(scopesession) def client(): return ApiClient(http://localhost:8000) def test_login_and_query(client): # 登录拿 token resp client.post(/api/login, json{ username: test01, password: Passw0rd }) token resp.json()[token] # 带 token 查询 resp2 client.get(/api/user/info, headers{ Authorization: fBearer {token} }) assert resp2.status_code 200 assert resp2.json()[username] test01逻辑说明ApiClient封装了 base_url 和 SessionSession 会自动保持 cookie减少重复登录。clientfixture 的scopesession保证整个测试会话只建一次连接。参数上headers里带 token 是常见鉴权方式具体字段看接口文档。注意 token 过期时间长时间跑要加刷新逻辑否则后半段用例会集体失败。4.2 UI 自动化的适用边界UI 自动化不是不能做是要挑场景。我一般只对三类场景做 UI 自动化核心流程冒烟、跨页面数据一致性、频繁回归的稳定页面。不做的场景频繁改版的页面、依赖第三方插件的页面、验证码相关。工具上Playwright 比 Selenium 在新项目里更省心自带等待和录制。下面给一个 Playwright 的最小示例。# Playwright UI 冒烟测试 from playwright.sync_api import sync_playwright def test_login_smoke(): with sync_playwright() as p: browser p.chromium.launch(headlessTrue) page browser.new_page() page.goto(http://localhost:3000/login) page.fill(#username, test01) page.fill(#password, Passw0rd) page.click(#submit) # 等待跳转后的元素出现避免硬等待 page.wait_for_selector(.dashboard, timeout5000) assert page.is_visible(.dashboard) browser.close()逻辑说明headlessTrue适合 CI 环境本地调试可改 False。wait_for_selector是显式等待比time.sleep稳。参数上timeout按页面加载速度调太短会误报太长会拖慢。注意选择器尽量用稳定的 id 或 data 属性不要用会变的样式类。4.3 持续集成里的测试门禁自动化跑通只是第一步接进 CI 才有价值。我一般设三道门禁提交时跑冒烟合并前跑核心回归发版前跑全量。门禁失败要阻断合并不能只发通知。下面给一个 GitHub Actions 风格的配置片段注意这是通用写法具体平台按自己环境改。# CI 测试门禁示例 name: test-gate on: pull_request: branches: [main] jobs: smoke: runs-on: ubuntu-latest steps: - uses: actions/checkoutv4 - name: Set up Python uses: actions/setup-pythonv5 with: python-version: 3.11 - name: Install deps run: pip install -r requirements.txt - name: Run smoke tests run: pytest tests/smoke -v --htmlreport.html逻辑说明on.pull_request表示合并请求触发branches限定目标分支。步骤里先装依赖再跑测试--html生成报告。参数上python-version要和本地一致避免环境差异。注意测试数据要独立不能依赖生产库否则 CI 会污染数据。5. 避坑与排查那些让测试结果失真的常见问题5.1 用例通过但线上仍出问题现象回归全绿上线后核心流程报错。原因通常是用例只覆盖了正常路径异常分支和并发场景没测。解决补异常用例加并发测试关键接口做幂等验证。我一般要求核心接口至少覆盖空值、超长、重复提交三类异常。5.2 自动化脚本本地过、CI 挂现象本地跑全过CI 上大面积失败。原因多是环境差异依赖版本、时区、网络、数据状态。解决锁定依赖版本统一时区测试数据每次初始化。下面给一个数据初始化的 pytest fixture。# 测试数据初始化 fixture import pytest pytest.fixture(autouseTrue) def reset_data(): # 每个用例前重置数据库状态 setup_test_db() yield cleanup_test_db()逻辑说明autouseTrue让每个用例自动执行yield前是前置后是清理。参数上setup_test_db和cleanup_test_db按项目实现。注意清理要彻底否则用例间会互相污染。5.3 断言太严导致误报现象接口返回文案改了一个字用例就红。原因断言了易变字段。解决只断言稳定字段文案类用包含或正则。我一般把断言分三级状态码必断业务码必断文案只做包含判断。5.4 测试数据被污染现象单独跑过一起跑就挂。原因用例共享数据前一个用例改了状态。解决每个用例独立造数或用事务回滚。下面给一个独立造数的示例。# 独立造数每个用例创建自己的数据 def create_user(username): # 调用接口创建用户返回用户 id resp requests.post(/api/user, json{username: username}) return resp.json()[id] def test_update_user(): uid create_user(user_a) # 用 uid 做后续操作不依赖其他用例 ...逻辑说明每个用例自己创建数据避免依赖顺序。参数上username加随机后缀防重。注意用完要清理否则数据会堆积。5.5 覆盖率虚高现象覆盖率 90%但漏测严重。原因用例都走同一条路径或只统计了行覆盖没统计分支覆盖。解决看分支覆盖率补条件组合用例。我一般要求核心模块分支覆盖不低于 70%行覆盖不低于 85%。6. 把资料变成能力一套可复用的个人测试资产库资料汇总的终点不是收藏是变成自己的资产库。我一般按四类归档用例库、脚本库、数据工厂、报告模板。用例库按模块分目录脚本库按接口和 UI 分数据工厂放造数函数报告模板放 HTML 和统计脚本。这样换项目时改配置就能复用。下面给一个目录结构示例。test-assets/ ├── cases/ # 用例按模块分 │ ├── login.yaml │ └── payment.yaml ├── scripts/ # 自动化脚本 │ ├── api/ │ └── ui/ ├── factories/ # 数据工厂 │ └── user_factory.py └── reports/ # 报告模板 └── template.html用例用 YAML 存方便非技术人员改脚本用 Python方便扩展数据工厂独立避免脚本里硬编码数据。参数上YAML 的字段要和脚本解析逻辑对齐改字段要同步改解析。注意 YAML 缩进敏感建议用编辑器校验。验证资产库是否有效我一般做三件事新项目能否在半天内跑通冒烟换人能否看懂用例缺陷能否追溯到用例。三件都做到说明资产库真的能用。我自己的习惯是每做完一个项目花两小时把可复用的部分抽出来删掉项目特有的硬编码。这个习惯坚持两年后新项目启动成本从一周降到一天。希望帮到你。本文还有配套的精品资源点击获取
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →