ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

软件测试入门进阶:流程、用例设计与自动化面试准备

软件测试入门进阶:流程、用例设计与自动化面试准备 如果你正在软件测试的入门期或者已经投了一圈简历但面试总卡在“项目经验”和“用例设计”上这份文档就是写给这样的你。我做了多年测试看过太多新人简历也带过不少从零转行的同事发现大家最容易卡住的并不是某个工具不会用而是对整个软件测试的知识体系缺少一条清晰的主线——不知道先学什么、后学什么更不知道学到什么程度才算“能干活”。这份文档一先把最核心的底子搭起来测试本质、完整流程、用例设计方法、自动化切入路线、项目实战与简历写法以及面试高频题的准备思路。适合准备面试的候选人、刚入行的新人也适合想系统梳理一遍测试知识点的老手。1. 软件测试到底在测什么先建立正确的行业认知1.1 测试不是“点点点”而是质量保障体系很多人对软件测试的第一印象是“找bug”实际工作中确实每天都在找bug但如果你的认知只停留在“找bug”那你的职业天花板会非常低面试也容易被问住。软件测试的本质是质量保障核心目标是在有限的资源下通过一系列工程手段尽可能暴露软件中的缺陷同时对软件质量给出可量化的评估结论。我经常用一句话跟新人解释测试人员是软件上线前的最后一道质检门。开发负责把东西做出来测试负责确认这个东西“能按要求工作”“在异常情况下不会崩”“用户真的能顺利用起来”。这就要求测试人员不仅会操作软件还要懂需求、懂用户、懂系统架构甚至要能读代码。初学者最容易犯的认知错误是把“会点软件、会写用例”等同于“会做测试”。真正的测试工作里用例设计能力、缺陷分析能力、沟通推动能力每一项都比“会点”值钱得多。这也是为什么有些做了两三年的测试薪资原地踏步而有些人能一年一跳差距不在手速在思维方式。1.2 测试人员在研发链路里的位置从项目研发全流程来看测试不是最后一个环节才出现的角色。一个标准的产品迭代里测试通常会在需求评审阶段就介入提前理解业务逻辑、识别需求中的模糊地带和潜在风险然后在开发阶段同步编写测试用例等提测后执行测试、提交缺陷、协助开发定位最后输出测试报告给出是否允许上线的结论。这就是常说的测试左移和测试右移。测试左移强调尽早介入把问题扼杀在需求或设计阶段——缺陷发现得越早修复成本越低。测试右移则是指上线后继续通过监控、线上巡检、用户反馈等方式收集问题反哺下一轮迭代。完整链路如下图所示我这里用文字描述需求评审 - 测试计划 - 用例设计与评审 - 开发提测 - 测试执行 - 缺陷管理 - 回归验证 - 测试报告 - 上线 - 线上监控。这一整套流程里测试人员既是质量把关者也是需求澄清者和团队沟通的枢纽。1.3 两个必须记住的测试原则第一个原则是“测试无法穷尽一切”。输入条件是无限的时间、人力、成本是有限的所以测试的本质是基于风险做取舍。实际工作中你要在有限时间内选择最高优先级的用例去执行而不是妄想覆盖所有可能性。面试官问“你怎么保证测试覆盖度”正确的思路不是回答“我全部测一遍”而是说明如何通过需求分析、用例设计方法和风险优先级来确定测试范围。第二个原则是“测试要尽早介入”。缺陷越早被发现修复成本越低——这是软件测试行业最经典的成本曲线。需求阶段发现一个逻辑漏洞可能只需要改一行文档等到上线后用户才发现可能就要深夜紧急回滚、数据订正、发道歉公告。所以成熟的测试团队会逼着产品和开发在需求阶段就把逻辑讲透而不是闷头写代码。2. 完整测试流程从需求评审到测试报告的每个环节2.1 需求评审阶段测试要干什么很多新人以为需求评审就是去旁听自己没资格发言。实际上需求评审是测试人第一次行使价值的地方。这个阶段测试要做的核心事情有三件第一搞清业务背景。这个功能是给谁用的解决什么问题核心用户路径是什么需求文档如果没有写清楚你有责任当场问而不是等开发做完了再去猜。第二挑需求的毛病。需求里的逻辑漏洞、边界缺失、歧义表述在这个阶段发现是最便宜的。比如一个注册功能文档只写了“手机号验证码”但没写验证码有效期多久、错误次数限制几次、手机号是否仅限中国大陆号码——这些都是测试能想到的边界问题提出来评审会记录并补充。第三评估可测性。如果一个需求“实现一个推荐算法效果更好”这就不具备可测性。你需要和产品对齐“更好”的定义是点击率提升还是停留时长增加必须有明确的验收标准否则后面测试没法收场。2.2 测试计划排期和资源评估不靠拍脑袋接到一个迭代后测试要先输出测试计划核心内容包括测试范围测什么、不测什么、测试策略功能测试、接口测试、自动化测试、性能测试怎么配比、环境与数据准备、人员分工、时间排期、风险评估。排期的经验之谈功能测试的实际执行时间通常占开发周期的50%到100%。开发写了一个月的功能测试至少留一到两周去测而不是开发一提测你两天就要交卷。如果排期被压缩你要做的是明确说“测不完”以及“砍掉哪些范围会有什么风险”让产品经理和领导去做取舍而不是自己默默加班硬扛。测试计划里还有一块容易漏测试数据准备。登录要测试账号、支付要测优惠券、下单要测库存这些数据是提前造好还是测试过程中临时造用例依赖的账号权限是否已配置提前列出数据清单和开发、运维对齐能省出不少执行时间。2.3 用例设计与评审用例设计是整个测试流程里最体现功力的环节下一章我会专门展开方法论这里先讲它的产出物——测试用例文档。一份规范的用例通常包含用例编号、所属模块、用例标题、前置条件、测试步骤、测试数据、预期结果、优先级、用例类型这些字段。我见过太多新人写的用例是“输入用户名密码点击登录验证登录成功”这种用例可用性很低。好的用例标题应该直接描述行为“输入已注册的正确的用户名和密码点击登录验证跳转到首页且显示用户昵称”。前置条件和步骤分开写数据尽量具化比如手机号写“13800138000”不要写“正确的手机号”——执行用例的人不需要去猜什么算正确。用例写完后要组织用例评审。参会人是测试负责人、产品、开发。评审看什么一是看用例是否完整覆盖了需求产品会帮你查漏二是看预期结果定义是否明确开发会澄清实现逻辑三是用例之间的优先级是否合理确保高优先级用例优先执行。2.4 测试执行与缺陷生命周期执行测试的产出物是缺陷单bug。一条合格的缺陷单要让人看得懂、能复现核心字段包括缺陷标题、复现步骤、预期结果、实际结果、环境信息浏览器版本、操作系统、APP版本、严重程度、优先级、附件截图/日志/录屏。严重程度和优先级是两套维度新人经常搞混。严重程度衡量的是对系统的影响范围S1是系统崩溃或核心功能不可用S2是主要功能受影响但有绕过方案S3是次要功能有缺陷S4是界面或文案等小瑕疵。优先级衡量的是修复的紧迫程度P1是必须立即修复P2是版本内修复P3是版本内尽量修复P4是可以下个版本修复。一个按钮文案写错严重程度可能只有S4但如果它是支付按钮优先级可能得到P2。缺陷生命周期一般从“New”开始经开发修复后进入“Fixed”测试复测通过后关闭如果复测不通过则重新打开退回给开发。测试在这个闭环里要追踪每一个bug的状态流转推进度、催修复、验修复——这就是测试项目的日常。2.5 测试报告与上线决策测试执行结束后测试需要输出测试报告主要包含测试范围与执行情况、用例通过率、缺陷分布与遗留缺陷清单、质量风险评估、上线建议通过与不通过。一份好的测试报告不是简单堆数据而是给出结论这个版本能不能上线风险点在哪里遗留问题的影响范围是什么。比如支付接口有一个未修复的bug影响的是某银行渠道的少量对账失败但主流程可用那你给的上线建议应该是“有条件通过”同时列出风险点和跟进负责人。测试报告是测试人员在项目里最有话语权的输出物——结论要有数据支撑风险要讲清楚责任要落到人。3. 用例设计方法面试和实战都靠这些“套路”3.1 等价类划分把无穷输入归类等价类是最基础的用例设计方法核心思想是把输入条件划分成若干类同一类的数据对程序而言是等价的测一个代表值即可。比如一个年龄输入框要求1到150之间的整数可以划分出有效等价类1-150的整数和若干无效等价类小于1的数、大于150的数、非数字、小数、空值。每个有效等价类至少测一个每个无效等价类至少测一个。等价类划分的价值在于“用最少的用例覆盖最多的可能”。实际工作中对每个输入框做穷举测试是不现实的等价类帮你在逻辑上完成第一轮筛选。写用例时标题直接体现等价类维度会更清晰例如“输入年龄为负数如-1时提示年龄不合法”而不是笼统的“输入非法数据”。3.2 边界值分析bug总在边界上大量实践经验表明开发最容易在输入边界处写错逻辑比如“1到150”的边界条件开发可能写成“if age 1 || age 150”也可能漏写等号。边界值分析方法就是针对等价类的边界去设计测试用例关注点集中在最小值、略小于最小值、最小值1、最大值、略大于最大值、最大值-1这些临界点。拿1-150的年龄字段来说边界值用例至少要覆盖0略小于最小值、1最小值、2最小值1、149最大值-1、150最大值、151略大于最大值。如果是闭区间这些边界值本身就是最容易出问题的位置用例标题里把这些数值明确写出来评审和执行都一目了然。边界值分析还不止适用于数值输入。字符串的长度边界短信验证码6位、列表的最大条数购物车99件、时间范围优惠券有效期当天23:59:59、文件大小单次上传不超过10M凡是存在“临界状态”的地方都值得用边界值思路去测。3.3 场景法与状态迁移从用户视角设计流程等价类和边界值解决的是“单个输入项”的问题场景法解决的是“一组操作流程”的问题。场景法基于用户的实际使用场景画出基本流主流程和备选流分支异常流程然后覆盖完整链路。最经典的例子是电商购物用户搜索商品、加入购物车、提交订单、支付、查看订单状态——这是基本流而支付超时、库存不足、取消订单、退款到账——这些就是备选流。场景法的价值在于它强制测试人员从用户角度思考问题而不是机械地从输入输出角度堆用例。我在面试新人时常问一个问题“你测一个登录功能会设计哪些场景”只会答“正确登录、错误密码、空用户名”的基本可以判定是新手答出“忘记密码、验证码过期、登录态失效、多设备登录、异地登录、连续输错被锁定”的至少说明有场景思维。状态迁移法与场景法类似但更侧重对象在状态间的流转。一个订单的状态有待支付、已支付、已发货、已完成、已取消、退款中、已退款。测试的关注点是每个状态允许哪些动作、迁移到哪些目标状态、非法迁移是否被拦截。这类问题最适合用状态迁移图整理用例设计时逐个状态覆盖迁移路径和非法路径。3.4 判定表与因果图多条件组合怎么覆盖当系统行为由多个条件的组合决定时等价类和场景法就不够用了。判定表是一种表格化的用例设计方法把条件输入与动作输出的关系列成矩阵覆盖所有条件组合。最经典的例子是登录功能用户名是否正确、密码是否正确、验证码是否正确三个条件每个条件有“正确/错误”两种取值组合出8种情况每种情况对应不同的提示或动作登录成功、提示用户名错误、提示密码错误、提示验证码错误、锁定账号等。因果图则是先画出条件之间的逻辑关系与、或、非再转换成判定表适合复杂业务规则。实际项目里判定表已经足够常用。我在招聘时经常会出一道题“信用卡申请如果年龄大于18且收入大于5000批准否则拒绝如果收入大于5000但年龄小于18进入人工审核。请设计测试用例。”这种题用判定表一列清晰且完整。正交表可以看成判定表的降维版本当条件和取值组合爆炸时比如5个条件每个4个取值全组合是1024种通过正交试验设计挑选有代表性的组合大幅压缩用例数量。但正交表用的频率不算高面试能说出概念和使用场景就够。3.5 用例设计方法在简历项目中的落地方法论背得再熟落不到项目里都是空的。很多人在面试时说自己“熟悉用例设计方法”但被问“你的项目里怎么用等价类划分的”答不上来。正确的做法是在简历项目里明确写出来比如“对用户注册模块采用等价类划分与边界值分析设计测试用例212条覆盖有效/无效等价类及边界值线上故障拦截率达30%”。面试官想听的“落地”本质上是你把方法用在了哪里、解决了什么具体问题、带来了什么结果。所以我强烈建议每一个准备面试的人花时间把自己简历上那个项目里的核心模块逐一回应用例设计的方法和数量而不是泛泛而谈“我负责写用例”。4. 功能测试和自动化测试怎么学先手动再自动的路线4.1 手动测试是基本功别急着跳现在很多新人一上来就学自动化测试、学性能工具简历上写“精通Selenium”“熟悉JMeter”实际连手工用例都写不出优先级。这是个很危险的误区。手动测试是自动化测试的前提——你连手动测试怎么测、测什么都不知道写出来的自动化脚本只会把无效操作自动地重复执行一万遍。我给你的学习路线是先把手动测试做到熟练至少能独立负责一个模块的测试理解bug的生命周期和用例的流转然后再转入自动化。自动化的本质是用代码模拟手工操作它的基础是“手工操作已经被验证是有效的”。手工测试阶段积累的业务理解和测试思维是自动化脚本设计的灵魂。4.2 PythonSelenium入门路线如果决定学自动化目前最主流的入门组合就是Python加Selenium。学习路线可以拆成四步第一步是环境搭建。安装Python和pip创建虚拟环境然后pip install selenium再根据你本地的浏览器版本下载对应的driverChromeDriver或geckodriver。driver和浏览器版本不一致是新人最常见的坑通常表现为WebDriver报错“session not created”或“cannot find Chrome binary”。记得让driver版本和浏览器版本对齐。第二步是掌握Selenium的核心API。打开浏览器、定位元素、操作元素、断言结果这四个动作构成一个UI自动化用例的基本骨架。元素定位推荐优先用id和xpathid稳定且快xpath灵活但千万别用“//div/div[1]/div[3]/span[2]”这种抄来的绝对路径一旦页面结构微调脚本必挂尽量通过class、text内容构造相对路径例如“//span[classbtn and text()登录]”。特别注意新版本的Selenium已经废弃了find_element_by_id这类旧API统一用find_element(By.ID, xxx)网上很多老教程还在用旧写法跑起来会提示DeprecationWarning甚至直接报错。第三步是解决“等待问题”。页面加载是异步的脚本跑太快元素还没出现就会报NoSuchElementException。新手最简单的做法是加time.sleep但这不是好方案因为固定等待要么不够长导致偶发失败要么太长浪费执行时间。正确做法是用显式等待WebDriverWait配合expected_conditions比如等待元素可点击或可见。我在实际项目里统一封装成wait_click(wait, locator)这类公共方法整个脚本里几乎不出现裸sleep。第四步是学习POM设计模式Page Object Model。把页面元素定位和操作逻辑封装在Page类里测试用例只调Page方法不直接碰driver和元素定位。这样页面元素一旦变了只需要改Page类所有用例不用动。POM是面试官考察自动化代码设计能力的硬指标简历上写“熟悉Selenium自动化测试”至少要能说清楚这一层封装思想。4.3 自动化测试什么时候用什么时候别用这个问题的答案直接影响你在项目里的落地能力。UI自动化适合用于核心主流程的冒烟测试、回归测试、跨浏览器兼容性验证。不适合用于频繁迭代中页面结构还没稳定的模块比如营销活动页、需要大量动态数据支撑的场景每次执行都要准备一堆账号——这种场景维护成本会拖垮整个团队。在实际落地时我的经验是从业务最稳定的链路开始做UI自动化比如注册、登录、下单而不是一上来就自动化所有功能模块。你可以在测试计划里明确“哪些模块只做手工测试、哪些做接口自动化、哪些做UI自动化”把自动化的ROI投入产出比算清楚这是团队管理者最看重的思路。4.4 接口测试自动化测试真正的主战场如果你已经有了一部分基础我想强调的是在多数互联网公司接口自动化测试的价值远高于UI自动化。原因是接口测试执行快、稳定性高、能精准定位前后端问题而且越早执行修复成本越低。很多团队里UI自动化占比并不多接口自动化反而成了回归的主力。接口测试的入门核心是Python的requests库加上pytest框架。一份最小可用的接口自动化测试代码需要做到发送请求GET/POST、断言响应状态码和关键字段、输出清晰的失败信息。例如import requests def test_login_success(): url https://api.example.com/login payload {username: testuser, password: testpass123} resp requests.post(url, jsonpayload) assert resp.status_code 200 data resp.json() assert data[code] 0 assert data[data][token] is not None建议学习路线是requests库怎么发请求 - 怎么处理JSON响应 - 怎么用pytest组织用例 - 怎么连接数据库验证数据 - 怎么封装公共请求方法。等这套链路跑通后再去学接口自动化框架的设计数据驱动、关键字驱动以及和持续集成的配合比如在Jenkins上定时跑接口回归。另外一个很推荐的学习路径是从登录接口开始登录成功、密码错误、账号锁定时长内登录、参数缺失——把这些接口用例的边界条件和手工用例设计的等价类、边界值方法结合起来你会发现自动化不是一门孤立的技术它只是把前面学过的测试方法论用代码固化下来。5. 项目经验从哪来没有测试项目怎么写在简历里5.1 用开源项目练手构建自己的测试项目投简历时最尴尬的不是学历不是技能而是“没有测试项目经验”。我在筛简历时看过太多转行候选人的项目清一色是“某某管理系统”——登录、增删改查、权限控制写得都差不多面试官根本无法区分谁真的做过、谁是买了一堆现成模板拼的。没有公司项目背景我建议的做法是找到真实存在的开源项目以“测试负责人”的身份对自己负责把整套测试工程跑一遍。具体操作是找一个市面上常见的电商类开源项目比如mall系列或者一套前后端分离的博客系统然后做三件事第一件梳理系统的核心业务流程和功能模块搭建本地测试环境前端、后端、数据库都要能跑起来第二件对核心模块设计并执行功能测试用例把发现的bug记录到缺陷管理工具里比如禅道或Jira第三件选择部分接口做自动化测试用pytest加requests搭建一个接口自动化框架把脚本放到代码仓库里。这套东西做完你就拥有一个可以写进简历的测试项目真实的测试对象、完整的测试过程产出物需求分析、测试计划、用例、bug列表、测试报告、可展示的自动化代码。比写一百遍“仿某某项目”都有说服力。5.2 一个可写进简历的测试项目长什么样简历项目描述遵循的原则是项目背景、我的职责、核心成果、技术栈与工具。项目背景一句话讲清项目是什么我的职责列测试计划和用例设计、接口自动化脚本维护、回归测试执行核心成果最好有量化数据例如“设计测试用例300条发现有效缺陷40个”“搭建接口自动化测试框架覆盖核心接口60个回归测试时间由1天缩短至1小时”。技术栈里要注意把和岗位相关的工具写全Python、pytest、requests、Selenium、MySQL、Linux基础命令、JMeter如果有性能测试经验、Postman、Git、Jenkins。有一条要特别提醒写项目时绝对不要撒谎。面试官连环追问后你答不上来比不写这段经验还糟糕。宁可写“我负责登录模块的用例设计与接口自动化”把它说透也不要写“我负责整个系统的全自动化测试框架搭建”然后一问三不知。5.3 简历上测试技能栈怎么排技能栈的排列是有主次的不要一股脑把名词堆上去。我的建议是分层写第一层是核心技能比如“熟悉软件测试流程掌握等价类、边界值、场景法等用例设计方法”第二层是工具技能列“掌握Selenium与Python编写自动化脚本了解POM设计模式”第三层是工程基础“熟悉MySQL常用查询了解Linux基础命令能部署测试环境”。这样面试官一眼就能看出你从测试思路到工程能力是成体系的。同时我会建议把“了解”“熟悉”“掌握”三个词用清楚了解是有概念熟悉是能上手用掌握是能独立解决常见问题并在项目里落地。简历里通篇“精通”是危险的面试官三道题就能戳破反而显得你对自身能力没有准确认知。6. 面试高频题与准备思路八股文不是背是理解6.1 必背基础题测试流程与用例设计测试面试最容易出现的第一道题通常是“说说你做测试的完整流程”。这道题不是真想听流程背书而是看你能不能结合项目讲出细节。你回答时要把流程落到场景里比如“我之前负责登录注册模块的测试先参加需求评审了解登录方式有手机号和邮箱两种、验证码有效期五分钟、错误次数超过五次锁定半小时然后设计用例覆盖正确登录、错误密码、验证码过期、账号锁定等场景开发提测后先冒烟测试主流程再按优先级执行用例执行中发现的缺陷我通过Jira提交跟踪开发修复后做回归最后输出测试报告。”另一道高频题是“给你一个登录功能你怎么测”。这道题考察的就是第3章的方法论有没有内化。零散回答“试试密码对不对、看看能不能登录”的都不过关好一点的会用等价类、边界值、场景法把登录功能拆成界面测试、功能测试、安全性测试、兼容性测试再细一点功能测试又覆盖正确登录、错误提示、验证码机制、账号锁定、记住密码、退出登录、多端登录等安全性测试包含密码是否加密传输、是否支持弱密码、SQL注入是否能被弹回。能答到这个颗粒度面试官基本就不会再追你了。6.2 Python和SQL必考内容现在测试岗位基本都要求会Python面试时会考察基本的代码能力难度一般不高但很容易因为紧张写错。常见的常考编程题包括反转字符串、判断回文数、统计列表元素频次、冒泡排序、实现一个“两个列表取交集”这类。我给两个建议第一平时一定要手写不要只在IDE里跑通——面试是白板写代码字体和缩进都是自己控制第二掌握最基本的格式比如ifname main的作用要答得上。SQL也是基础。测开和高级功能测试岗位必考SQL常见题型是查询某个表、多表join、分组聚合GROUP BY加HAVING、统计数量COUNT加DISTINCT。准备时找一套常见练习数据集把“查成绩大于80分的学生”“统计每个部门的人数”这类题练熟。重点不是背语法而是理解select、from、where、group by、having、order by的先后逻辑不然连题目写的是什么都看不懂。6.3 面试官问“项目亮点”到底想听什么“你的项目里最大的亮点是什么”这个问题很多人不知道怎么答因为它不完全是考技术而是考表达和复盘能力。面试官想听的是你面对一个具体的测试难题怎么分析的怎么做的最后带来了什么可量化的结果。比如你不一定非要做一个高深的自动化平台可以把“通过接口自动化把回归工期缩短一半”作为亮点也可以把“在需求评审时发现了库存扣减的并发隐患推动开发修改设计”作为亮点——后者对于转行新人来说反而更真实、更有说服力因为它体现的是测试思维不是工具堆砌。讲亮点用STAR法则就很合适情境当时项目里有什么困难、任务你的目标是什么、行动你具体用了什么方案、结果最终带来了什么改进。把这四句话写在便签上提前对着项目过一遍重点是要能回答追问。你说“我搭建了接口自动化框架”那面试官必然问“框架有哪些层”“怎么处理依赖接口的鉴权”“用例失败了怎么定位”——答不上来就是硬伤。6.4 面试中的软技能考察点测试岗位的面试技术之外还会考察沟通能力、抗压能力和成长性。比如“如果开发拒绝修复你提的bug怎么办”这个问题考的是沟通与推动能力。你回答“直接吵一架”是不行的比较好的回答是“我会先确认是不是我的复现场景不对如果确认是bug我会把bug的严重程度和影响范围讲清楚必要时找来产品和测试负责人一起评估优先级用数据和事实推动处理”。这种回答既体现了专业性又体现了处理冲突的情商。再比如“你怎么看待加班”“你未来的职业规划是什么”这类常规题也有标准的思辨逻辑。加班问题不要一口答应也不要一口拒绝而是说明“紧急上线可以攻坚但希望团队有合理的排期机制”职业规划建议说“希望两到三年内能独立负责一个项目的质量保障工作逐步往自动化测试或测试开发方向发展”既要有方向又要显得踏实。准备面试的核心不是背题而是把你自己的经历与知识体系建立深度连接。盲背八股文的候选人最多撑到二轮真正理解流程与用例方法论的人面对追问也能举一反三。这篇文档从行业认知、完整测试流程、用例设计方法论、自动化测试切入路线、项目经验与简历写法以及面试准备思路上帮你把软件测试的核心主线捋清楚了。照着这条线一步步往下走把手动测试、用例设计、接口自动化、项目实战这几环真正落地你就不再是那个面对面试题心里没底的测试新人。后面我计划按这个系列更新接口自动化实战、性能测试入门、测试数据构造与持续集成这几个方向每一篇都会是同样的风格直接讲做法和坑。有具体想看的主题也可以留言给我我挑问得最多的先写。
返回列表