ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

16个软件测试实战练手项目,从入门到进阶全攻略

2026/9/7 11:12:34 拓冰建站 浏览量
16个软件测试实战练手项目,从入门到进阶全攻略 后台经常收到读者私信说软件测试学了不少理论——测试用例、缺陷报告、接口测试、自动化测试这些名词都能说出一些但一到面试环节面试官问“你讲讲自己做过的项目”就开始词穷简历上也很难写出一条有说服力的项目经验。这其实是很多测试新人共同的困境不是不想练而是不知道练什么也不知道练到什么程度才算“能写进简历”。这篇文章我按从入门到进阶的顺序整理了 16 个软件测试实战练手项目。每个项目都会说明它在练什么、适合什么阶段、用到哪些工具并尽量给出可以直接套用的代码示例和简历描述思路。你可以把这 16 个项目看成一个“测试技能地图”不需要一口气全部做完但可以按照自己的基础和目标岗位有选择地把其中几个项目做深做透。1. 为什么软件测试一定要有“实战项目”1.1 面试中最难回答的问题往往是“项目经验”软件测试面试和开发面试有一个很大的不同测试岗位的面试官非常看重你“怎么发现问题、怎么设计用例、怎么评估风险”。如果你只能回答“我会写测试用例”“我了解 pytest 框架”但没有一个具体的项目来说明你在什么场景下、用了什么方法、解决了什么问题面试官很难判断你的真实水平。反过来只要你有 1 到 2 个能讲清楚的项目情况就完全不一样。比如“我基于 pytest 搭建了一个接口自动化框架支持数据驱动和 Allure 报告覆盖了登录、订单、支付三个核心模块一共 200 多条用例接入 Jenkins 后每天定时执行”这一句话就能让面试官抓住你的技术轮廓后续追问也有据可依。1.2 练手项目到底在练什么很多人误以为练手项目就是“照着教程敲一遍代码”其实真正的价值在于完整走一遍测试工作流需求分析与测试点提取拿到一个模块知道从哪里开始拆解。用例设计与评审等价类、边界值、场景法、错误推测法等方法的实际应用。缺陷定位与复现遇到 Bug 时能通过日志、数据库、抓包工具定位原因。自动化代码实现把重复性工作用脚本替代。结果分析与报告输出测试完成后能输出有结论的报告。这些能力单靠看书是练不出来的必须基于真实或接近真实的项目反复打磨。1.3 16 个项目总览为了方便你建立整体认知先把 16 个项目按三个阶段列一个表阶段项目编号项目名称核心技能入门1登录模块测试用例设计与执行用例设计、缺陷管理入门2购物车模块功能测试场景法、业务流程梳理入门3接口冒烟测试脚本requests、pytest 基础入门4等价类与边界值专项用例设计用例设计方法中级5Python Pytest 接口自动化框架框架搭建、数据驱动中级6Selenium Web UI 自动化测试UI 自动化、等待策略中级7移动端 App 冒烟与兼容性测试Appium、兼容性思维中级8数据库数据一致性校验脚本SQL、数据校验中级9JMeter 接口性能测试入门压测、报告分析中级10基于 Faker 的测试数据生成工具数据构造、脚本封装进阶11Pytest Allure 报告平台化整合报告分层、持续集成进阶12PO 模式 数据驱动的 UI 自动化框架框架设计模式进阶13Jenkins 持续集成接入自动化CI/CD、定时执行进阶14基于若依框架的后端接口测试实战业务接口、Token 鉴权进阶15性能全链路压测与瓶颈分析全链路压测、性能调优进阶16轻量级测试管理平台设计开发前后端开发、测试平台这个表格建议收藏起来后续做项目时可以用来对照自己的进度。2. 环境准备与工具链2.1 语言与工具选择这 16 个项目中绝大多数都围绕 Python 生态展开原因是 Python 在测试领域的资料最丰富、上手成本最低。操作系统方面Windows、macOS、Linux 都可以建议不要在这一步纠结你当前用什么系统就用什么系统。工具链建议包含以下内容Python建议 3.8 及以上版本可以用python --version检查。包管理pip配合venv或virtualenv创建独立虚拟环境。IDEPyCharm 或 VS Code 均可新手推荐 PyCharm Community 版。接口调试Postman 或 Apifox用于手工接口验证。浏览器自动化Chrome 浏览器和对应版本的 chromedriver。数据库MySQL 5.7 或 8.0也可以使用 Docker 快速启动。持续集成Jenkins 或 GitLab CI。报告工具Allure 命令行工具及插件。如果你本机还没有安装这些不要一次性全部装完建议在做到对应项目时再安装这样可以避免“装了一堆工具但都没用过”的情况。2.2 推荐创建统一的项目目录为了让后续多个项目之间互不干扰建议建一个总目录每个项目单独一个子目录并创建独立虚拟环境。参考结构如下testing-practice/ ├── project01_login_case/ ├── project02_cart_test/ ├── project03_api_smoke/ ├── project04_boundary_case/ ├── project05_pytest_api/ ├── project06_selenium_ui/ ├── project07_app_smoke/ ├── project08_db_check/ ├── project09_jmeter_perf/ ├── project10_test_data/ ├── project11_pytest_allure/ ├── project12_po_framework/ ├── project13_jenkins_ci/ ├── project14_ruoyi_api/ ├── project15_full_link_perf/ └── project16_test_platform/这样做的好处是后面把项目写进简历时你可以很清晰地说明“每个项目都是独立可运行的工程”面试官如果要求演示你也能快速打开对应目录。3. 入门级项目夯实功能测试基础3.1 项目 1登录模块测试用例设计与执行登录是几乎所有系统都有的模块也是最适合入门的练手对象因为它测试点密集、业务规则清晰、缺陷容易复现。这个项目的目标不是写代码而是完整设计一套登录模块的测试用例并在一套真实可运行的系统上执行。不同系统的登录规则不完全一样但通常需要覆盖以下测试点用户名、密码均正确能正常登录。用户名为空、密码为空、两者都为空时的提示。密码错误、用户名不存在的提示。密码大小写敏感、前后空格处理。连续多次输错密码后的锁定或验证码策略。记住密码、自动登录功能。登录后能否访问权限范围内的页面越权访问是否被拦截。输入 SQL 注入字符、特殊字符、超长字符串时的表现。用例设计完成之后建议用 Excel 或在线表格维护字段至少包括用例编号、用例标题、前置条件、测试步骤、测试数据、预期结果、优先级、实际结果、缺陷编号。下面是一个简化的用例模板示例用例编号用例标题前置条件测试步骤测试数据预期结果TC-LOGIN-001正确账号密码登录成功已注册用户 admin输入用户名密码点击登录admin / 123456跳转首页显示用户名TC-LOGIN-002密码错误提示明确已注册用户 admin输入正确用户名错误密码admin / wrong提示“用户名或密码错误”TC-LOGIN-003用户名为空校验打开登录页密码填正确用户名为空密码 123456提示“请输入用户名”TC-LOGIN-004连续错误密码触发锁定页面可正常访问连续输入错误密码 5 次任意错误密码第 5 次后账号锁定或出现验证码简历写法参考“独立负责登录模块功能测试设计并执行测试用例 60 余条覆盖正常流程、异常输入、安全边界等场景发现缺陷 8 个并跟进闭环。”3.2 项目 2购物车模块功能测试购物车是电商类系统的高频模块它的特点是业务流程长、模块间耦合多非常适合用来训练“场景法”和“全链路思维”。很多新人只测“加入购物车成功”这个单点忽略了数量变更、价格计算、库存锁定、优惠券叠加等联动场景。建议从以下场景入手商品加入购物车后数量、规格、价格是否正确。修改商品数量时总价是否联动更新。减少数量到 0 或删除商品时是否有确认提示。购物车商品超过库存上限时能否加入。未登录状态下加入购物车登录后数据是否保留。优惠券、满减活动与购物车金额的组合计算。清空购物车后再次进入是否为空。执行这个项目时建议同时配合抓包工具观察前端操作对应了哪些接口请求参数和返回是否符合预期。这一步能帮你从“页面功能测试”过渡到“接口测试”的思维。3.3 项目 3接口冒烟测试脚本功能测试做到一定阶段就需要开始接触接口测试。接口冒烟测试指的是在版本提测后先用少量核心用例快速验证主流程是否可用避免“页面能打开但接口全是 500”这种低级问题。这个项目不要求搭建复杂框架只需要使用requests和pytest写一个最小的接口测试脚本# 文件路径project03_api_smoke/test_login_api.py import requests BASE_URL http://127.0.0.1:8000/api def test_login_success(): resp requests.post( f{BASE_URL}/login, json{username: admin, password: 123456} ) assert resp.status_code 200 assert resp.json()[code] 0 def test_login_wrong_password(): resp requests.post( f{BASE_URL}/login, json{username: admin, password: wrong} ) assert resp.status_code 200 assert resp.json()[code] 1001 assert resp.json()[message] 用户名或密码错误需要注意的是示例中的接口地址和返回字段需要替换为你实际要测的项目。执行命令很简单pip install requests pytest pytest test_login_api.py -v运行结果中会显示每个用例的通过、失败状态。这个项目虽然代码量不大但能让你理解接口测试的基础套路构造请求、校验状态码、校验业务返回码、校验关键业务字段。3.4 项目 4等价类与边界值专项用例设计等价类和边界值是测试用例设计中最基础也最高频的方法这个项目建议用“年龄输入框”“订单金额输入框”“手机号输入框”这类典型场景来练习。以“订单金额输入”为例假设需求规定金额范围是 0.01 到 10000 元保留两位小数那么用例可以这样拆分有效等价类50.00、9999.99、0.01。无效等价类-1、0、10000.01、abc、空值。边界值0.01、0.00、10000.00、10000.01、9999.99。把这组用例整理成表格并实际执行你会发现很多开发同学在边界处理上容易出问题比如“0 元订单也能提交”“金额为 10000.01 时没有给出友好提示”。这个项目的产出物是一份边界值用例文档和对应的执行记录非常适合作为简历上的“测试设计能力”证明。4. 中级项目走向自动化测试4.1 项目 5Python Pytest 接口自动化测试框架通过入门级项目掌握基础后就可以开始搭建一个真正属于自己的接口自动化框架了。这个项目在面试中出现的频率极高建议认真做。框架的核心能力包括统一管理接口地址和公共请求头。通过 fixture 实现登录态自动获取和复用。支持从 JSON 或 YAML 数据文件读取测试数据。测试结果通过 Allure 生成可读报告。先看 conftest.py 中如何实现登录态复用# 文件路径project05_pytest_api/conftest.py import pytest import requests pytest.fixture(scopesession) def base_url(): return http://127.0.0.1:8000/api pytest.fixture(scopesession) def admin_token(base_url): resp requests.post( f{base_url}/login, json{username: admin, password: 123456} ) return resp.json()[data][token]再看用例文件如何调用这个登录态# 文件路径project05_pytest_api/test_user.py import requests def test_get_user_info(admin_token, base_url): headers {Authorization: fBearer {admin_token}} resp requests.get(f{base_url}/user/1, headersheaders) assert resp.status_code 200 assert resp.json()[code] 0# 文件路径project05_pytest_api/test_order.py import pytest pytest.mark.parametrize(order_id, expected_code, [ (1001, 0), (9999, 2001), ]) def test_query_order(admin_token, base_url, order_id, expected_code): headers {Authorization: fBearer {admin_token}} resp requests.get(f{base_url}/order/{order_id}, headersheaders) assert resp.json()[code] expected_code完成这个项目后你应该能说清楚“conftest.py 的作用是什么”“为什么要用 session 级别的 fixture”“参数化有什么好处”这些也是面试官高频追问点。4.2 项目 6Selenium Web UI 自动化测试UI 自动化最让人头疼的问题是脚本不稳定。很多初学者一上来就用time.sleep()硬等结果换台电脑、换个网络环境就频繁失败。这个项目里建议重点训练“显式等待”。下面是登录流程的 UI 自动化示例# 文件路径project06_selenium_ui/test_login_page.py from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC def test_login_success(): driver webdriver.Chrome() try: driver.get(http://127.0.0.1:8080/login) driver.find_element(By.NAME, username).send_keys(admin) driver.find_element(By.NAME, password).send_keys(123456) driver.find_element(By.ID, loginBtn).click() WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CLASS_NAME, user-name)) ) assert driver.find_element(By.CLASS_NAME, user-name).text 管理员 finally: driver.quit()这个项目的关键点有三个一是使用 By 定位元素而不是过时的 find_element_by_id 写法二是使用 WebDriverWait 显式等待关键元素出现三是在 finally 中关闭浏览器避免资源泄漏。做完之后再尝试用 Page Object 模式重构为后面的进阶项目打基础。4.3 项目 7移动端 App 冒烟与兼容性测试移动端测试是软件测试岗位里的重要分支。没有真机的情况下可以先使用 Android 模拟器完成冒烟测试。建议以“安装、启动、登录、浏览核心页面、退出登录、卸载”这条主线作为冒烟范围。如果你准备做 Appium 自动化可以参考下面这份比较通用的 capabilities 配置desired_caps { platformName: Android, deviceName: emulator-5554, appPackage: com.example.demo, appActivity: .MainActivity, noReset: True, }这个配置需要根据你的模拟器和被测 App 实际情况调整。兼容性测试阶段重点不是写脚本而是建立兼容性矩阵比如不同 Android 版本、不同屏幕分辨率、不同品牌定制系统下核心功能是否能正常使用。这份矩阵文档同样是简历上的加分项。4.4 项目 8数据库数据一致性校验脚本很多测试问题只看页面发现不了必须到数据库层面验证。比如“用户注册成功后数据库中是否生成了对应记录”“订单支付后订单表和流水表的状态是否一致”。这个项目让你掌握用 Python 操作 MySQL 完成数据校验。示例代码如下# 文件路径project08_db_check/check_user.py import pymysql def query_user(username): conn pymysql.connect( host127.0.0.1, port3306, usertest_user, passwordtest_pass, databaseshop_db, charsetutf8mb4 ) try: with conn.cursor() as cursor: cursor.execute( SELECT id, username, status FROM t_user WHERE username %s, (username,) ) return cursor.fetchone() finally: conn.close() def test_register_user_data(): # 这里先假设通过接口注册了 admin_test 用户 # register_user(admin_test, 123456) row query_user(admin_test) assert row is not None assert row[2] 0 # status 为 0 表示账号正常做这个项目时强烈建议只使用测试账号、测试数据库执行查询操作时不要随意修改或删除数据避免影响其他测试环境。4.5 项目 9JMeter 接口性能测试入门性能测试是测试工程师进阶的重要方向。JMeter 是入门首选社区资料多、开源免费。这个项目不要求你立刻做大型压测而是围绕一个核心接口走一遍完整流程。建议按以下步骤执行新建线程组设置线程数、循环次数。添加 HTTP 请求填写协议、服务器地址、端口、路径。添加 HTTP 信息头管理器配置 Content-Type 和 Token。添加响应断言校验返回的业务码。添加聚合报告和查看结果树运行脚本。调整并发量观察 TPS、平均响应时间、错误率的变化。需要关注的性能指标包括 TPS每秒事务数、平均响应时间、90% 响应时间、错误率和服务器资源占用。做完之后输出一份简单的性能测试报告说明在什么并发量下系统开始出现明显响应变慢或报错这就是一个很有说服力的项目成果。4.6 项目 10基于 Faker 的测试数据生成工具测试过程中经常会遇到“需要批量造数据”的场景比如要造 1000 个用户、1000 条订单来做分页测试或性能测试。手工造数据效率极低这时候就可以用 Faker 库快速生成符合规则的测试数据。下面是一个简单的数据生成脚本# 文件路径project10_test_data/generate_data.py from faker import Faker fake Faker(zh_CN) def gen_users(count100): users [] for _ in range(count): users.append({ username: fake.user_name(), real_name: fake.name(), phone: fake.phone_number(), email: fake.email(), }) return users if __name__ __main__: for user in gen_users(5): print(user)在此基础上你还可以把生成的数据批量写入 Excel 或数据库配合接口自动化框架使用。这个项目虽然代码量不大但能体现你对“测试数据准备”这个工程痛点的理解。5. 进阶项目框架化与持续集成5.1 项目 11Pytest Allure 报告平台化整合前面的接口自动化框架功能上已经可用但报告不够直观。Allure 可以生成层级清晰、类型丰富的 HTML 测试报告也是目前自动化测试岗位要求中很常见的关键词。整合方式分两步先安装并配置 pytest 插件然后在测试方法上添加描述性装饰器。# 文件路径project11_pytest_allure/test_order.py import allure import requests allure.epic(电商项目接口测试) allure.feature(订单模块) allure.story(创建订单) allure.title(正常创建订单) def test_create_order(base_url, admin_token): headers {Authorization: fBearer {admin_token}} resp requests.post( f{base_url}/order/create, json{goods_id: 1, num: 2}, headersheaders ) assert resp.status_code 200 assert resp.json()[code] 0执行和生成报告的命令如下pip install allure-pytest pytest --alluredir./allure-results allure serve ./allure-resultsallure serve会自动启动本地服务并打开报告页面。建议你在报告中关注测试套件分组、步骤回溯和失败日志这些信息能帮助开发同学更快定位问题。5.2 项目 12PO 模式 数据驱动的 UI 自动化框架封装做 UI 自动化一段时间后你会发现如果把所有定位和操作都写在用例里代码冗余非常严重。Page ObjectPO模式的核心思想是把页面元素定位和页面操作封装到独立的 Page 类中用例层只关心业务动作和数据。下面是一个最小化的 PO 模式示例# 文件路径project12_po_framework/base_page.py from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC class BasePage: def __init__(self, driver): self.driver driver def find(self, locator): return WebDriverWait(self.driver, 10).until( EC.presence_of_element_located(locator) ) def click(self, locator): self.find(locator).click() def input_text(self, locator, text): self.find(locator).send_keys(text)# 文件路径project12_po_framework/login_page.py from selenium.webdriver.common.by import By from base_page import BasePage class LoginPage(BasePage): username_input (By.NAME, username) password_input (By.NAME, password) login_button (By.ID, loginBtn) def login(self, username, password): self.input_text(self.username_input, username) self.input_text(self.password_input, password) self.click(self.login_button)# 文件路径project12_po_framework/test_login_case.py import pytest from selenium import webdriver from login_page import LoginPage pytest.mark.parametrize(username, password, [ (admin, 123456), (test01, abc123), ]) def test_user_login(username, password): driver webdriver.Chrome() try: driver.get(http://127.0.0.1:8080/login) LoginPage(driver).login(username, password) # 这里继续断言登录后的页面特征 finally: driver.quit()这个项目做完后你应该能回答这些问题PO 模式解决了什么问题数据驱动的好处是什么为什么用例层不直接写元素定位5.3 项目 13Jenkins 持续集成接入自动化测试自动化测试的价值在于持续执行而不是只在本地跑一次。接入 Jenkins 后可以做到代码变更自动触发测试、每天定时执行回归测试、失败后自动发送邮件通知。下面是一个参考用的 Jenkins Pipeline 示例pipeline { agent any stages { stage(Checkout) { steps { git branch: main, url: https://github.com/your-repo/auto-test.git } } stage(Install Dependencies) { steps { sh python3 -m venv venv sh venv/bin/pip install -r requirements.txt } } stage(Run Tests) { steps { sh venv/bin/pytest --alluredirallure-results } } stage(Publish Report) { steps { allure includeProperties: false, results: [[path: allure-results]] } } } post { failure { emailext to: testexample.com, subject: 自动化测试失败, body: 请查看 Jenkins 上的测试报告 } } }需要说明的是不同 Jenkins 版本的插件名称和语法可能略有差异这个示例更适合作为搭建思路参考。配置时请以实际安装的 Jenkins、Allure 插件版本为准。这个项目一旦跑通你简历上“接入持续集成实现自动回归”这条就非常扎实了。5.4 项目 14基于若依框架的后端接口测试实战若依RuoYi是一套基于 Spring Boot 的 Java 后台管理系统快速开发框架常被很多企业项目用作基础脚手架。它的功能模块完整包含用户、角色、菜单、部门、字典等非常适合用来练习“带鉴权的业务接口测试”。这类接口测试的关键点是先通过登录接口获取 Token再在后续请求头中携带该 Token# 文件路径project14_ruoyi_api/test_ruoyi_api.py import requests BASE_URL http://127.0.0.1:8080 def login_and_get_token(): resp requests.post( f{BASE_URL}/login, json{username: admin, password: admin123} ) # 不同版本的若依返回结构可能不同以实际接口文档为准 return resp.json().get(token) def test_list_user(): token login_and_get_token() headers {Authorization: fBearer {token}} resp requests.get(f{BASE_URL}/system/user/list, headersheaders) assert resp.status_code 200 assert resp.json()[code] 200做这个项目时可以在本地用若依前后端分离版本搭建一套环境然后针对用户管理、角色管理、菜单管理这几个模块设计接口测试用例。这套系统里的鉴权流程、分页参数、权限校验都是很好的测试点。5.5 项目 15性能全链路压测与瓶颈分析入门级 JMeter 项目解决的是“会压测”进阶项目则要回答“压完怎么分析”。全链路压测不是简单地把 QPS 调到最大而是要在受控的测试环境中梳理核心接口之间的调用关系逐层加压并定位瓶颈。常见瓶颈现象和排查方向可以参考下表瓶颈现象可能原因排查思路响应时间随并发上升明显增加应用线程池配置不足查看应用线程池指标、GC 日志数据库 CPU 持续高位慢 SQL 或缺少索引开启慢查询日志分析执行计划单机压测正常集群压测异常负载均衡或会话共享问题检查路由策略、会话一致性错误率集中在超时外部依赖接口变慢通过链路追踪定位外部调用耗时这个项目的成果建议输出一份包含“测试环境、场景设计、指标数据、瓶颈结论、优化建议”的性能测试报告。面试时能拿出一份完整的性能分析报告是很强的加分项。5.6 项目 16轻量级测试管理平台设计开发测到后期很多测试团队会自建一些内部工具比如用例管理、结果统计、报告查询平台。这个项目适合有 Python Web 开发基础的测试同学不需要做得非常复杂能实现“用例保存 结果查询”即可。下面是一个基于 Flask 的最小示例# 文件路径project16_test_platform/app.py from flask import Flask, request, jsonify app Flask(__name__) cases [] case_id 0 app.post(/api/cases) def add_case(): global case_id case_id 1 data request.get_json() cases.append({id: case_id, **data}) return jsonify({code: 0, id: case_id}) app.get(/api/cases) def list_cases(): return jsonify({code: 0, data: cases}) if __name__ __main__: app.run(host0.0.0.0, port5000, debugTrue)在这个项目基础上你可以继续扩展接入 MySQL 代替内存存储、增加测试报告上传与展示、对接 Jenkins 执行结果。平台开发类项目在简历中比较少见如果你能独立完成会明显区别于只会写脚本的候选人。6. 如何把这些项目写进简历6.1 用“背景 动作 量化结果”描述项目写简历项目经验最常见的错误是只写“熟悉 pytest、熟悉接口测试、熟悉 Selenium”这种描述没有信息量。推荐使用下面的公式背景项目服务什么业务你负责什么模块。动作你用了什么工具、什么方法、做了哪些关键工作。结果产出了多少用例、发现了多少缺陷、提升了多少效率。对比一下差负责项目接口自动化测试编写了测试用例。好基于 Python Pytest 搭建接口自动化框架覆盖登录、订单、支付 3 个模块共 200 条用例集成 Allure 报告接入 Jenkins 后每天自动执行线上回归时间从半天缩短到 30 分钟。第二种写法里的“200 条用例”“缩短到 30 分钟”不是编造出来的而是你做项目过程中真实积累的数据。所以做项目时要有意识地记录这些数字。6.2 不同方向的简历项目描述参考如果目标岗位是功能测试项目 1、2、4 是重点强调用例设计能力和缺陷挖掘成果。如果目标岗位是自动化测试项目 5、6、11、12 是重点强调框架搭建能力和代码质量。如果目标岗位是测试开发项目 13、14、16 是重点强调工程化能力和开发能力。如果目标岗位是性能测试项目 9、15 是重点强调压测实战和数据报告能力。6.3 提前准备面试追问简历上写了项目面试官一定会追问细节。建议对每个项目提前准备以下问题的答案这个项目的数据从哪里来是本地造数还是线上脱敏数据如果接口返回不稳定你的自动化用例怎么处理你的框架里如何管理测试环境地址和账号密码发现过最典型的缺陷是什么怎么定位的性能压测时你最关注哪些指标为什么这些问题不需要背答案但一定要自己动手跑过项目、踩过坑才能答得真实。7. 常见问题与排查思路7.1 环境与依赖问题实际动手过程中环境问题往往比代码问题更让人崩溃。把最常见的几类问题和处理思路整理成了一张表问题现象常见原因解决思路pip 安装依赖超时网络原因使用国内镜像源安装pytest 收集不到用例测试文件和函数命名不符合规则文件按 test_.py 命名函数按 test_命名Chrome 打开后报错chromedriver 与浏览器版本不匹配下载与浏览器版本对应的 chromedriver放到 PATH接口测试登录返回 401Token 未获取或已过期检查登录接口返回确认请求头携带方式数据库连接报错账号权限、端口、驱动未安装确认白名单、密码、charset 参数安装对应驱动自动化用例时好时坏使用了固定 sleep 等待改用显式等待 WebDriverWait7.2 自动化脚本稳定性问题脚本不稳定通常不是随机事件而是有规律可循的。最常见的原因有三个一是等待策略不合理二是测试数据被上一次运行污染三是用例之间存在顺序依赖。解决思路也很明确等待统一用显式等待每条用例尽量独立不依赖其他用例执行结果测试数据通过 setup/teardown 机制在用例前后创建和清理。这些经验会在项目 12 的框架封装中得到集中体现。7.3 测试环境数据安全问题练习接口自动化和数据库校验时一定要在本地或测试环境操作不要连接生产数据库。涉及账号密码等敏感信息时不要硬编码在代码里建议使用环境变量或配置文件管理。这是测试工程师的基本职业底线也是面试中会被考察的工程素养。8. 最佳实践与工程建议8.1 从“写用例”到“维护框架”的思维转变做前面几个项目时你可能只需要关注单个用例是否通过做到后面几个框架类项目时就要开始思考工程问题用例如何组织、公共逻辑如何复用、执行失败如何快速定位、报告如何让团队成员看懂。这种从“点”到“面”的思维转变是初中级测试人员拉开差距的关键。8.2 测试代码的命名与组织规范测试代码也是代码同样需要可读性和可维护性。建议遵循以下规范测试文件统一以test_开头测试函数统一以test_开头。页面类、工具类、用例层分层管理不要全写在一个文件里。公共配置放到配置文件中不要写死在代码里。请求地址、账号密码、数据库连接串通过环境变量或配置文件管理。每个项目根目录下提供 requirements.txt方便他人一键安装依赖。8.3 数据安全与最小权限原则这一点单独拿出来强调。做测试项目时请严格遵守以下几点只在授权范围内使用测试环境和测试账号。不连接、不修改生产数据库涉及数据操作前先备份。不使用真实用户手机号、身份证号等敏感信息尽量使用 Faker 生成的模拟数据。数据库账号只授予必要的查询和写入权限避免使用高权限账号。脚本中的敏感信息不要提交到公开仓库使用.gitignore忽略配置文件。把安全习惯从一开始就建立起来后面进入企业项目时会省去大量麻烦。9. 总结与学习路线这 16 个项目覆盖了软件测试从功能到自动化、从接口到性能、从脚本到平台的完整技能链路。建议的学习顺序是先把项目 1、2、4 这类功能测试项目完整做一遍建立“测试思维”再把项目 5、6 这两个自动化项目做通掌握 pytest 和 Selenium 的核心用法然后往项目 12、13 方向深入学会框架封装和持续集成最后根据岗位方向选择性能方向或测试开发方向继续深耕。做项目时不要贪多与其把 16 个项目都浅尝辄止不如把其中 4 到 5 个关键项目做深挖透。每个项目都要保证代码能运行、报告能生成、结果能解释、简历能描述。如果你能把接口自动化、UI 自动化、持续集成这三条线真正打通软件测试岗位的“项目经验”这一关就基本稳了。建议现在就打开电脑从项目 1 开始动手。