途虎养车2023秋招测试笔试题B卷超全解析:从用例设计到业务场景

途虎养车2023秋招测试笔试题B卷超全解析:从用例设计到业务场景 途虎养车2023秋招测试笔试试卷B这份卷子在圈子里流传度不算低。我第一时间拿到手做完一遍之后最大的感受是它不只是考“会不会写代码、会不会点按钮”更是在筛“有没有用测试思维解决实际业务问题的习惯”。尤其途虎本身是汽车后市场赛道线上App加线下工场店、供应链、物流仓储全链路打通这种“线上线下硬件设备”结合的业务形态决定了它的测试笔试题目一定不会只停留在纯软件层面。下面我按自己的解题过程把试卷B的题型结构、核心考点、做题思路完整拆一遍希望能给正在准备秋招春招的同学一些参考。1. 试卷整体结构与出题逻辑先说结论试卷B约60道题考试时间90分钟题型包含单选题、多选题、判断题、简答题和1道场景用例设计大题。整体难度中等偏上但真正的难点不在知识深度而在“业务场景的理解速度”和“测试思维的完整度”。整份卷子按内容分布大致可以分成四个模块测试基础与用例设计约30%等价类、边界值、场景法、判定表以及基础的用例编写规范。Linux与数据库操作约25%日志查看、进程处理、shell基础操作、SQL查询与数据校验。接口与自动化测试约25%HTTP协议、接口测试工具使用、自动化框架理解、Appium移动端测试基础。业务场景综合题约20%围绕途虎养车App的养车预约、到店服务、配件购买、优惠券使用等真实业务出题。这里我特别想强调一个容易被忽略的点试卷B里出现了一些“看起来像软件测试实际上是在考业务流程闭环”的题目。比如优惠券下单时库存扣减失败怎么排查这种题如果只盯着接口返回做分析很容易漏掉“线下门店库存同步”这个环节。做这套题的时候建议始终带着一个前提——途虎不是单纯的电商App而是连接用户、门店、仓库、物流的复杂系统。另外试卷B里多选题占比不低而且很多是“选出所有正确选项”的玩法少选多选都不得分。这意味着你对知识点的理解必须边界清晰不能有模糊地带平时如果习惯了“记住大概意思”这种题会非常吃亏。2. 核心题型逐一拆解与解题思路2.1 测试用例设计等价类与边界值不是背概念是算出来的试卷B里有一道很典型的题目某功能允许用户输入“车牌号”进行绑定要求车牌号格式为7位字符第一位是汉字省份简称第二位是发证机关字母后五位是字母和数字的组合。问使用等价类划分法至少需要设计多少条有效等价类和无效等价类测试用例这道题看着简单但错误率很高。很多人会直接回答“有效1条无效4条”理由是“一个有效类加每个无效条件各一条”。实际上正确思路是有效等价类方面7位字符、首字为指定省份汉字、第二位为字母、后五位允许字母数字混合这些条件同时满足时属于“单个有效等价类”因为它们是组合后构成合法输入的整体所以有效等价类只需要1条用例覆盖。无效等价类则要按“每个破坏一个条件”的原则分别设计长度不等于7位、首位不是合法省份汉字、第二位不是字母、后五位包含非法字符如中文、特殊符号这样至少4条无效用例。再把边界值加上长度边界是6位、7位、8位也就是至少要各测一次。所以这道题的完整回答应该是“有效等价类1条无效等价类4条边界值用例3条合计至少8条”。答题时一定要把计算过程写出来阅卷人看的不只是答案更是你“有没有把一个模糊需求拆成明确条件”的能力。2.2 Linux操作题定位问题是第一能力Linux题目里有一道很务实的问题测试环境出现接口响应缓慢需要登录服务器查看某个Java应用进程的CPU和内存占用情况并输出最近100行日志请写出完整命令。这道题综合考了进程管理和日志查看两个能力点。我的答案是这样的# 先找到Java进程的PID并查看CPU和内存占用 ps aux | grep java | grep -v grep # 如果进程较多用top动态查看按CPU使用率排序 top -c -o %CPU # 用PID查看该进程的具体线程占用情况 top -Hp PID # 输出最近100行日志并持续跟踪 tail -n 100 /opt/app/logs/application.log # 如果日志文件有滚动用通配符匹配最新的那个文件 tail -n 100 /opt/app/logs/application-$(date %Y%m%d).log这里有几个加分细节。第一ps aux找到PID后一定要再top -Hp看一下线程级别的占用因为Java应用CPU飙升通常需要定位到具体线程再做线程dump分析。第二如果日志文件名带日期用$(date %Y%m%d)可以确保tail到当天的文件这样写比手动拼文件名更可靠。第三真实场景下接口慢不一定是应用本身问题我还会习惯性先ping一下数据库地址telnet一下端口排除网络链路问题再往深了查。这类题目在试卷里出现的目的很直接——测试工程师要具备独立排查环境问题的能力不能什么问题都直接甩给开发或运维。2.3 数据库校验题SQL不只是能跑通还要能校验对试卷B里有一道SQL题给定两张表user表用户id、手机号、注册时间和order表订单id、用户id、订单金额、下单时间查询“2023年1月1日之后注册、且下过订单总金额超过500元”的用户id和总金额按总金额降序排列。这道题核心考的是聚合函数、JOIN和HAVING的组合使用。我的写法是SELECT u.user_id, SUM(o.order_amount) AS total_amount FROM user u INNER JOIN order o ON u.user_id o.user_id WHERE u.register_time 2023-01-01 GROUP BY u.user_id HAVING SUM(o.order_amount) 500 ORDER BY total_amount DESC;这里有几个关键点必须注意HAVING后面不能直接写total_amount 500因为SELECT子句里的别名在部分数据库的HAVING阶段不可用稳妥的写法是重复写SUM(o.order_amount)。另外需求里说的是“下过订单的用户”所以INNER JOIN是合适的如果用LEFT JOIN就可能把没下过单的用户也查出来然后被HAVING过滤掉虽然结果一样但逻辑上不够严谨。这道题还有个小陷阱下单时间字段需不需要加条件题目只要求“注册后下过订单”并没有限定订单日期必须大于注册日期所以不用加o.order_time u.register_time。但实际业务里可能会存在历史订单被补录的情况如果你在答案里主动说明“这里我假设订单都是注册后产生的如果业务上有补单场景还需要额外加时间过滤”这反而是加分的因为展现了业务思考。2.4 接口测试题HTTP状态码背后的业务逻辑接口测试相关题目里有一道很有意思用户使用优惠券提交订单接口返回HTTP 500请问可能的原因有哪些你如何一步步排查这道题没有标准答案但考察的维度很全。我的回答逻辑分了四层第一层先看返回内容。500表示服务器内部错误但有些框架会同时返回JSON格式的错误信息比如异常堆栈或错误码。先抓包或者看响应体往往能直接定位。第二层看服务端日志。重点查下单接口所在服务的error日志看抛出的异常类型。常见的可能是空指针、数据库连接池满、Redis缓存key过期、下游接口超时等。第三层定位是单点问题还是共性问题。用同一账号、同一优惠券再提交一次如果必现大概率是这单业务数据的问题如果偶现可能是并发导致库存超卖、Redis分布式锁失效、接口幂等性问题。第四层结合业务链路排查。途虎的下单链路涉及优惠券核销、库存扣减、支付单创建、门店接单通知等多个环节。任何一环异常都可能返回500。特别是优惠券和库存之间往往不是同一个服务涉及分布式事务一旦某个子事务回滚失败就会暴露成500。这套回答好在哪里它是“从现象到原因、从单点到整体”的递进结构而不是东一榔头西一棒子地罗列可能原因。面试官要看到的是你遇到线上问题时有一套稳定的排查动作而不是靠猜。2.5 业务场景题车辆维保预约的核心流程测试试卷最后的大题是一道典型的业务场景设计题大致背景是途虎养车App上线“到店保养预约”功能用户选择门店、选择保养套餐、选择到店时间、提交预约门店确认后生成预约单。题目要求设计该功能的测试用例覆盖功能、接口、兼容性、异常场景四个方面。这道题分值最高也是最容易拉开差距的一道题。我当时的思路是分四块来写功能测试方面我分成主流程、分支流程和异常流程。主流程是“选择城市→选择门店→选择套餐→选择时间→填写车辆信息→提交→预约成功→门店确认”。分支流程包括用户有多个车辆时切换默认车辆、门店支持的服务类型筛选、套餐更换时价格联动计算。异常流程覆盖预约时间已满、门店休息日不可约、车辆信息未绑定、提交时断网、重复点击提交按钮等。接口测试方面重点是预约提交接口的幂等性测试、并发预约同一时间段的处理、门店可预约时间段列表接口的准确性、优惠券抵扣金额与套餐金额的一致性校验。这里尤其要关注幂等性——用户因网络超时重复点击提交系统不能生成两笔预约单这种用例在业务型公司里非常受重视。兼容性测试方面覆盖iOS和Android两大平台的不同版本、不同屏幕尺寸。考虑到途虎用户群体里有相当一部分是中老年车主低端Android机和旧版本iOS的兼容性尤为重要不能只测最新机型。异常场景方面除了常规的无网络、弱网、服务端异常外我还补充了“门店关店前30分钟提交预约”这种带业务时间属性的边界场景以及“保养套餐下架后用户已提交预约但尚未确认”的状态冲突场景。最后我在每个测试分类下面都注明了一条“优先级标记规则”P0级用例是阻塞发布的问题P1级是主流程功能异常P2级是次要功能问题。这能向阅卷人传递一个信息——你不是只会列用例而是知道如何把控测试节奏。3. 实操环节模拟与完整解题过程复盘3.1 模拟一道完整的“优惠券使用”综合题试卷里有一道综合题把好几个知识点串在一起了用户在途虎App选择“199元小保养套餐”使用一张“满199减50”优惠券下单时应付金额为149元但实际支付后账户被扣款199元。请分析问题可能出在哪里并设计验证方案。这道题我在做的时候没有急着写结论而是先在草稿纸上画了一条资金链路用户端展示金额→提交订单时后端计算金额→支付网关扣款金额→订单系统记账金额。任何一环出现偏差都会导致用户实付和应付不一致。最可能的三个原因我按概率排序一是前端展示与后端计算不一致。前端页面展示了优惠券抵扣后的149元但提交订单时后端没有正确匹配优惠券或者优惠券状态异常导致后端计算金额仍为原价199元。判断方法是抓包看下单接口的请求参数里有没有正确携带优惠券ID再看后端返回的订单金额。二是优惠券在支付环节没生效。有些老系统会把优惠分摊放在支付成功后的回调里处理如果回调处理异常就会出现“支付时按原价扣款订单里却显示已优惠”的情况。这需要查看支付回调日志和订单状态变更记录。三是并发场景下优惠券被重复使用或状态未锁住。比如用户在其他设备上已经把这张券用了但当前设备页面未刷新仍然显示可用。提交订单时后端发现券已被用但没有报错拦截而是直接走了原价逻辑。这就是典型的“并发下的状态校验缺失”。设计验证方案时我建议先通过接口测试复现再定位到具体模块。具体步骤是先准备一张测试优惠券和一个测试账号分别用“正常领取”“不领取券”“领取券但支付前在另一设备核销”三种场景跑一遍下单接口对比返回的应付金额是否都是199元。再用数据库直接看优惠券表的状态和订单表的实付金额如果券状态已是“已核销”但订单金额是原价就能基本定位为后端状态校验问题。这道题整体考察的是定位问题的分析能力。回答时要让阅卷人看到你有“先分模块、再逐个排除”的思路而不是直接给出一堆可能性。3.2 动手实操用Charles抓包模拟弱网环境测试笔试里还有一道弱网测试的简答题问的是如何模拟弱网环境验证App在2G/3G网络下的表现。我在这里提供一个最常用的实操方案用Charles抓包工具模拟弱网这也是移动端测试最基础的一项技能。打开Charles在菜单栏找到Proxy → Throttle Settings勾选Enable Throttling然后在Throttle Preset里选择预设的网速档位。如果预设中没有想要的档位可以手动设置带宽、延迟、丢包率等参数。比如模拟3G网络常用的参数是带宽780kbps、延迟100ms、丢包率2%模拟弱2G网络可以设置带宽20kbps、延迟400ms、丢包率5%。设置完成后手机连上代理打开途虎App重点观察以下场景首页图片是否懒加载失败、保养套餐详情页是否长时间白屏、预约提交时是否出现超时弹窗、断网恢复后是否有重试机制。每个场景都要记录出现问题的页面和时间点。这里分享一个实测中容易踩的坑很多同学开了弱网模拟后发现App完全打不开然后以为是自己配置有问题。实际上是因为Charles默认只对HTTP流量生效如果App用的是HTTPS且没有配置SSL代理就会出现页面空白。解决办法是在Charles的SSL Proxying Settings里添加*:443并保证手机安装了Charles的CA证书。否则你测出来的“弱网问题”其实只是“证书验证失败”不是真实的弱网表现。3.3 自动化测试实操Appium连接模拟器跑通一条业务流试卷里自动化相关题目比重不小其中有一道问的是使用Appium编写一条自动化脚本的步骤。对于平时只写过脚本没跑过真机的同学来说这道题容易写得很虚。我在这里给出一个最小可运行的全流程从配置到代码大家可以直接照着试。环境准备部分需要安装Node.js、Appium Desktop或命令行版Appium、Android SDK以及一个Android模拟器或真机。然后用Python写脚本的话还需要安装Appium-Python-Client库。一个最小示例脚本如下from appium.webdriver import Remote from appium.webdriver.common.appiumby import AppiumBy desired_caps { platformName: Android, platformVersion: 12.0, deviceName: emulator-5554, app: /path/to/tuhu.apk, noReset: True, automationName: UiAutomator2 } driver Remote(http://127.0.0.1:4723/wd/hub, desired_caps) # 等待首页加载 driver.implicitly_wait(10) # 定位“保养”入口并点击 el driver.find_element(AppiumBy.ID, com.tuhu.auto:id/tab_maintenance) el.click() # 断言页面出现“选择门店”按钮 assert driver.find_element(AppiumBy.ID, com.tuhu.auto:id/btn_select_store).is_displayed() driver.quit()这段脚本跑通后就可以往里面加断言、加数据参数化。但笔试里如果让你“设计自动化测试方案”你要展现的就不只是一段代码而是更完整的框架思维用例分层页面对象层、业务流层、数据层、失败截图与日志收集、与Jenkins集成做定时任务、测试报告生成。把这几块写出来才能体现出你具备独立搭建自动化框架的能力而不只是会调API。实际工作中自动化脚本维护成本最高的是元素定位所有App的UI改动都可能导致脚本大面积报错。所以我在方案里还会建议优先使用稳定的resource-id定位少用xpath在页面对象层做元素封装后续UI变更时只改一处。4. 高频考点速查与避坑清单4.1 常见失分点对照表结合我自己的做题过程以及和几位同样参加过途虎笔试的同学交流复盘整理了一份高频失分点表格大家可以对照自查。考点模块常见失分点正确做法用例设计只写有效等价类漏无效等价类每个非法的独立条件都要覆盖一次测试方法选择看到输入框就只想到等价类和边界值根据需求复杂度选有多个条件组合用判定表流程类用场景法Linux命令忘记加grep -v grepps aux之后一定过滤grep自身进程SQL聚合在HAVING里使用SELECT别名重复书写聚合函数不依赖别名接口测试只关注状态码不关注响应体内容先看响应体再看服务端日志最后看链路移动端测试忽略弱网和中断场景重点覆盖弱网、断网、来电、切后台等中断场景自动化测试只写脚本不写维护方案补充元素封层、失败截图、数据驱动设计4.2 时间分配建议试卷B总共90分钟我的实际时间分配是这样的选择题和判断题控制在35分钟以内这些题大部分是概念题想太久反而容易改错。多选题控制在10分钟犹豫不决的题先标记不要恋战。简答题大约25分钟每题控制在8分钟左右答到点子上就行不需要长篇大论。最后一道场景设计大题留20分钟这部分一定要写结构化的编号方便阅卷人看出你的思路。4.3 关于试卷B的一个独家观察整套卷子做下来一个很明显的倾向是——凡是涉及业务闭环的题几乎没有一道是“背过就会”的全是需要现场分析场景。这反映出途虎对测试工程师的期望不是“执行者”而是“质量owner”你不仅要能执行测试用例还要能主动分析业务逻辑里可能存在的漏洞并对测试结果负责。这一点在最后那道场景设计题里体现得最充分。设计用例时除了常规的功能用例我额外补了一条看似边缘、实际非常关键的用例“用户已提交预约但尚未到店且期间门店修改了营业时间系统是否会自动推送变更通知”。这种用例在标准测试用例模板里不会出现但真正做过业务测试的人会知道这类“状态变更通知”场景在真实业务中往往就是投诉重灾区。5. 一套完整的备考策略与实用建议笔试只是整个秋招流程的其中一环考完之后还有面试。从试卷B的难度和风格来看后续面试大概率会围绕“项目经历”和“场景题”展开不太会问特别偏门的概念题。所以备考重心应该放在三件事上第一把测试基础概念吃透到能随手举例的程度第二Linux和SQL要达到“不看文档能直接写”的熟练度第三结合途虎的业务形态提前积累“线上App线下门店”场景的测试经验。关于第二点我多说一句很多计算机专业的同学平时用Windows比较多Linux命令全靠记忆一到写命令的时候就会混。我的建议是不要死记硬背在自己电脑上装个虚拟机或者用云服务器搭一个Linux环境把常用的日志查看、进程管理、权限修改、网络排查命令都实际操作一遍两周时间基本就能形成肌肉记忆。SQL同样如此没必要刷特别复杂的题目就把关联查询、聚合函数、子查询、窗口函数这几类吃透。笔试中的SQL基本不会超过这个范围。关于第三点坦白说没有实际项目经验的同学在这类题目上会比较吃亏。我给出一个可操作的替代方案在工作日晚上打开途虎App把用户能走的核心路径都完整走一遍包括注册、选门店、选套餐、下单、支付、查看订单详情、取消订单、申请退款。每走一步都记录下可能出现问题的地方然后设想“如果我是测试会怎么设计用例来保障这个流程”。这不花太多时间但对理解业务型测试的思维模式很有帮助。另外给你一个提升简历通过率的小建议如果时间允许可以在GitHub上维护一个小的测试项目比如把自己写的接口自动化脚本和测试用例设计文档放上去形成“需求分析→用例设计→脚本实现→测试报告”的完整闭环。面试官看项目经历时看重的不只是技术栈更是“你有没有把一件事做完整的意识”。这套试卷B整体上不难但信息量不小。只要基础扎实、业务场景想得足够多拿高分并不难。踏踏实实把上面几个模块过一遍这套题基本就能稳住了。