拓冰建站拓冰建站
首页 / 资讯中心 / 正文

搜狗2020测试岗笔试复盘:从Linux命令到自动化测试考点全解析

每年到了八九月一大波校招笔试就开始了。搜狗2020校招测试岗的第一场笔试我印象挺深——题目不算特别难但覆盖面很广从Linux命令到测试用例设计、从自动化脚本到网络协议全都有涉及。更关键的是这场笔试透露了搜狗这类互联网公司对测试工程师的真实期待不只要求你会“点点点”还要看你的代码功底、系统思维和排查问题的能力。这篇文章我会完整复盘这套笔试题把每道题背后的考点、解题思路、容易踩的坑都拆开讲透。不管你是明年才参加校招还是马上要上考场这篇内容都能帮你建立一套测试笔试的系统性认知。文中涉及的工具命令和代码逻辑我也会给出可复现的示例方便你照着准备。1. 搜狗测试笔试的题目结构与考察逻辑搜狗这场笔试时长大概90分钟题量在30道左右包含选择题、填空题、简答题和编程题四种类型。从整体分布来看选择题占比最大约50%主要考察基础理论简答题和编程题各占20%左右是拉开分差的关键。和很多大厂测试岗笔试一样它并不是单一考察某个知识点而是按照“基础理论—工具实操—代码能力—测试思维”四个层级递进设计。第一层级是计算机基础包括数据结构、操作系统、网络协议、数据库。这些是测试工程师的底层能力尤其是Linux命令和SQL查询基本属于必考内容。第二层级是测试理论与方法论包括测试流程、用例设计方法、缺陷生命周期、测试类型划分等。这部分考察的是你是否具备系统化测试思维而不是零散的实操经验。第三层级是自动化测试与工具链包括Selenium、Appium、JMeter、Postman、Jenkins、Pytest等。搜狗对这块的考察很实际会给出具体业务场景让你选择最合适的工具和方案。第四层级是编程与算法能力通常用Python或Java写一段小代码考察字符串处理、文件读写、基础算法等。我当年参加笔试时有个很明显的感觉试卷的很多题目都把“测试思维”和“工程实践”绑在了一起。比如它不会直接问你“什么是等价类划分”而是给你一个登录框的需求让你设计测试用例不会让你背诵HTTP状态码而是给出一段接口返回报文让你判断问题出在哪一层。这也提醒了准备测试岗笔试的同学光背八股文不够一定要能把理论和实际场景结合起来。2. 高频考点逐个拆解从选择题到填空题的拿分要点2.1 软件测试基础理论概念辨析题选择题部分有不少概念辨析题比如“以下哪个属于白盒测试方法”“缺陷严重程度和优先级的区别”“回归测试应该在什么阶段执行”。这类题目难度不高但非常容易失分原因在于很多概念的名字听起来相似实际含义却完全不同。举几个常考的辨析组合白盒测试覆盖方法语句覆盖、判定覆盖、条件覆盖、路径覆盖。它们的强弱关系是路径覆盖最强语句覆盖最弱。常考“哪种覆盖标准能发现逻辑错误最多”这类问题。黑盒测试用例设计方法等价类划分、边界值分析、因果图法、判定表法、正交试验法。考得最多的是等价类和边界值因为它们在现实中应用最广。测试类型单元测试、集成测试、系统测试、验收测试以及冒烟测试、回归测试、压力测试、负载测试、并发测试等。题目通常会给你一段描述让你判断属于哪种测试类型。缺陷状态流转New → Open → Fixed → Reopen → Closed。题目可能给你一个状态问它下一步应该是什么或者在某个状态下缺陷是否可以关闭。备考建议把这四组概念整理成对比表格每天晚上过一遍形成条件反射。特别是边界值分析这是搜狗这类公司最爱考的点因为它们自己做输入框类功能非常多。2.2 Linux命令与Shell脚本操作题搜狗笔试的Linux题目不会考很生僻的参数但会考实际工作中最常用的场景。常见类型有两种一种是给你一个具体任务让你写出相应的命令另一种是给出命令的输出结果让你判断该命令的功能。高频场景包括# 查看日志文件的末尾100行并且持续追踪新写入的内容 tail -100f app.log # 从日志中找出所有包含ERROR的行并统计数量 grep ERROR app.log | wc -l # 找出某个目录下占用空间最大的5个文件 du -ah /var/log | sort -rh | head -5 # 把某个端口占用进程找出来并杀掉 lsof -i:8080 kill -9 进程PID # 后台启动一个服务并将日志写入指定文件同时忽略终端关闭的影响 nohup python run.py server.log 21 值得注意的是搜狗笔试常考管道符组合比如 grep awk sort uniq 这种多命令串联用来做日志分析。例如统计一个访问日志中每个IP的访问次数并降序排列。完整的命令是awk {print $1} access.log | sort | uniq -c | sort -nr这行命令的逻辑是先用awk提取第一列一般是IP再用sort排序让相同IP相邻然后用uniq -c去重计数最后sort -nr按数字大小倒序排列。这道题基本每年都会出现变体核心逻辑是不变的。2.3 SQL查询与数据库相关题目数据库这块考察的是你能否针对具体场景写出正确的SQL。常见题目包括按照某个字段分组统计、多表联查、子查询、聚合函数配合HAVING使用、去重统计等。一个我在笔试中遇到的真实题目有两张表一张是学生表 studentid, name, class_id一张是成绩表 scoreid, student_id, subject, score要求查出“每门科目成绩大于80分的学生姓名和科目”。正确的SQL思路是先查成绩表中大于80的记录再通过JOIN关联学生表取出姓名SELECT s.name, sc.subject FROM student s INNER JOIN score sc ON s.id sc.student_id WHERE sc.score 80如果题目进一步要求“查出每个科目最高分对应的学生姓名”就需要用到子查询或者窗口函数SELECT sc2.subject, sc2.student_id, s.name, sc2.max_score FROM ( SELECT subject, MAX(score) AS max_score FROM score GROUP BY subject ) sc2 LEFT JOIN score sc ON sc.subject sc2.subject AND sc.score sc2.max_score LEFT JOIN student s ON s.id sc.student_id这个题目看似简单但非常考验是否理解GROUP BY的语义——分组后的聚合结果无法直接取到对应行的明细字段必须通过再次关联才能拿到完整信息。2.4 计算机网络与HTTP协议考点网络题主要考察HTTP协议基础、TCP三次握手、DNS解析流程、Cookie和Session机制等。搜狗本身做搜索和输入法对网络层协议的理解要求比较高所以这块题目占比不低。必背的几个点HTTP状态码2xx成功、3xx重定向301永久重定向、302临时重定向、304未修改、4xx客户端错误401未认证、403禁止访问、404不存在、5xx服务端错误500服务器内部错误、502网关错误、503服务不可用、504网关超时。三次握手的过程客户端发送SYN → 服务端回复SYNACK → 客户端回复ACK。GET和POST的区别GET的参数在URL中长度有限制用于获取数据POST的参数在Body中无长度限制用于提交数据。还有一个容易被忽略的区别GET请求会被浏览器主动缓存POST不会。Cookie辨析Cookie存在客户端Session存在服务端。考题经常故意把两者弄混让你判断对错。2.5 编程基础与数据结构题选择题中偶尔会出现一两道数据结构和算法的基础题比如数组和链表的区别、栈和队列的应用场景、二分查找的时间复杂度、冒泡排序和快排的稳定性等。这些题目不需要你写出完整代码但基本概念必须清楚。常见的问法有以下哪个数据结构适合用来实现浏览器的前进后退功能答案是双栈、哈希表查找的平均时间复杂度O(1)、快速排序在最坏情况下的时间复杂度O(n²)等。3. 三道笔试编程题的完整复盘3.1 第1题账号密码合法性校验这道题要求写一个函数判断给定的用户名和密码是否合法规则包括用户名长度6到16位只能包含字母和数字密码必须包含大写字母、小写字母、数字和特殊字符中的至少三类用户名和密码不能相同。这道题其实是在考察字符串遍历和条件判断的代码基本功用Python写非常方便import re def check_username(username): if not (6 len(username) 16): return False if not re.match(r^[a-zA-Z0-9]$, username): return False return True def check_password(username, password): if len(password) 8 or len(password) 20: return False if password username: return False char_type_count 0 if re.search(r[a-z], password): char_type_count 1 if re.search(r[A-Z], password): char_type_count 1 if re.search(r[0-9], password): char_type_count 1 if re.search(r[^a-zA-Z0-9], password): char_type_count 1 return char_type_count 3 def validate(username, password): return check_username(username) and check_password(username, password) # 测试用例 print(validate(user123, Passw0rd!)) # 输出 True print(validate(user, Passw0rd!)) # 输出 False用户名不合法这道题真正考察的不是你能不能写出来而是你能否把边界条件考虑完整。比如用户名恰好6位、恰好16位、包含下划线、密码只包含两类字符、用户名密码相同、密码长度恰好8位——这些都是隐藏的测试点。如果在写代码时没有提前考虑这些边界很容易丢分。3.2 第2题简易网络流量统计第二题要求模拟一个网络访问日志分析器。给定一个日志文件每行包含时间、客户端IP、请求URL、响应状态码和响应时间要求统计每个IP的请求次数、请求失败状态码大于等于400的比例、平均响应时间最长的Top3接口。这题考察的是文件解析和字典统计。核心代码逻辑如下from collections import defaultdict def analyze_log(file_path): ip_count defaultdict(int) ip_total_count defaultdict(int) ip_fail_count defaultdict(int) api_time defaultdict(list) with open(file_path, r, encodingutf-8) as f: for line in f: parts line.strip().split(,) if len(parts) 5: continue timestamp, ip, url, status, response_time parts status int(status) response_time float(response_time) ip_count[ip] 1 ip_total_count[ip] 1 if status 400: ip_fail_count[ip] 1 api_time[url].append(response_time) # 输出每个IP的请求次数和失败率 for ip, cnt in sorted(ip_count.items(), keylambda x: x[1], reverseTrue): fail_rate ip_fail_count[ip] / ip_total_count[ip] * 100 print(f{ip}: {cnt}次, 失败率{fail_rate:.2f}%) # 输出平均响应时间最长的Top3接口 api_avg_time {url: sum(times) / len(times) for url, times in api_time.items()} top3 sorted(api_avg_time.items(), keylambda x: x[1], reverseTrue)[:3] print(平均响应时间TOP3:) for url, avg_time in top3: print(f{url}: {avg_time:.2f}ms)这道题的关键点在于读取文件时要做好异常处理因为日志中可能有空行或者格式异常的行字典的键要用合适的对象比如IP用字符串、URL用字符串排序时要注意reverse参数的用法。如果题目要求输出Top3那么数据量少时也要能正常处理不能因为不足3个接口就越界。3.3 第3题测试用例生成器这道题要求为一个手机号注册表单设计测试用例并输出成结构化格式。这题最考验测试思维核心是考察对等价类划分和边界值分析法的实际应用。我当时的思路是这样的手机号字段有效等价类11位、以1开头、第二位是3/5/7/8/9无效等价类10位、12位、非数字字符、不以1开头、第二位不是3/5/7/8/9密码字段有效等价类8到20位包含字母和数字无效等价类长度小于8、大于20、纯数字、纯字母验证码字段有效等价类6位数字无效等价类5位数字、7位数字、包含字母、为空然后对每个字段的边界值进行补充手机号取10位、11位、12位密码取7位、8位、20位、21位验证码取5位、6位、7位。最后把有效等价类组合成正向用例把无效等价类和边界值组合成负向用例。还需要额外考虑组合场景手机号有效但密码无效、手机号无效但验证码正确等交叉情况以及网络异常时的提示信息是否符合预期。这类题目没有标准答案但阅卷老师会看你的用例是否覆盖了正常流、异常流、边界值和安全性比如SQL注入、暴力破解验证码防护。只要覆盖全面基本都能拿高分。4. 测试场景设计题看到需求怎么拆解4.1 面试官想要的测试设计思路笔试中有一类分值很高的简答题给你一个具体的功能需求让你设计完整的测试方案。我遇到的题目是为搜狗输入法的语音输入功能设计测试用例。这类问题表面考的是用例设计实际考的是你是否有一套结构化的拆解思路。正确做法不是上来就写用例而是从功能、性能、兼容性、异常处理、安全与隐私、用户体验这几个维度逐层展开。以语音输入为例功能维度要考虑唤醒是否准确、语音识别文字是否正确、中英文混输是否正常、标点符号是否自动添加、修改识别结果是否方便、无网络时能否离线识别。性能维度要考虑说话后多久能出结果、连续识别半小时后内存占用是否持续增长、手机发热后是否卡顿。兼容性维度要考虑Android和iOS不同版本、不同机型麦克风兼容性、连接蓝牙耳机后是否正常。异常维度要考虑说话到一半突然静音、网络从WiFi切到4G、正在识别时来电话、环境噪音很大时是否有提示。安全隐私维度要考虑语音数据是否在本地处理、上传数据是否加密、用户能否手动删除历史录音。我当时按这个框架列了大概30条用例基本覆盖了面试官想看的各个角度。这套多维度分析框架在后续面试中也帮我拿下了好几个offer。4.2 一个登录页面的完整测试用例实例搜索类公司和输入法公司非常注重细节登录功能这种高频功能几乎必考。我按“功能—界面—接口—安全—兼容—性能—异常”七个维度整理一套用例模板功能性用例正确账号密码能登录错误密码有明确提示账号不存在有明确提示空密码不能提交用户名密码前后有空格时如何处理。界面用例登录按钮在键盘弹出时能否点击密码框是否默认掩码显示错误提示文字是否完整显示页面在主流分辨率下有无布局错乱。接口用例提交参数的字段名和接口文档是否一致响应超时时前端有无loading状态和超时提示返回500错误时提示是否友好。安全性用例错误密码尝试5次后是否有验证码或锁定登录接口是否防暴力破解密码传输是否加密是否支持第三方登录的风险控制。兼容性用例iOS/Android各版本表现是否一致不同浏览器Chrome、Safari、Firefox是否正常小程序端和App端是否正常。性能用例弱网环境3G下是否在规定时间内响应大量用户同时登录的并发处理冷启动打开登录页的耗时。异常场景用例断网时提交表单是否有提示杀掉进程后重新打开是否需要重新登录手机存储不足时是否报错。这套模板不只用于笔试在真实项目中直接作为登录模块的测试checklist也没问题。准备校招的同学完全可以提前把这类高频功能的用例模板整理好考试时直接套框架再补充场景细节。4.3 接口异常场景怎么测现在的互联网产品基本都是前后端分离架构接口测试是测试工程师的核心工作之一。搜狗笔试对接口测试的考察也占了相当比重。除了正常的参数组合验证异常场景的设计往往是拉分的关键。接口异常场景主要分为三类参数异常、依赖异常和环境异常。参数异常包括参数缺失、参数类型错误、参数值为空、参数长度超出限制、参数格式错误比如传Json却给了Xml依赖异常包括依赖的下游接口超时、返回数据为空、返回数据格式错误、下游服务返回500环境异常包括网络延迟高、网络断开、DNS解析失败、接口被防火墙拦截等。设计接口异常用例的核心思路是把“正常路径”找出来然后逐个环节去破坏它。正常链路是“客户端 → 网关 → 业务服务 → 数据库”破坏的方式就是让某个环节下的输入异常化、依赖异常化、环境异常化然后断言系统是否给出了合理的降级响应。5. 从笔试看搜狗测试工程师的能力要求参加完这场笔试加上后来在测试行业摸爬滚打的这些年我越发觉得搜狗这类互联网公司的测试笔试本质上是在筛选三种能力首先是系统性测试思维。不仅会对着需求写用例还能从用户角度理解业务逻辑从架构角度理解数据流向从运维角度预判故障场景。体现在题目上就是那些一看就没标准答案的场景设计题。这种能力靠临时刷题很难快速提升需要平时多问“为什么”和“如果…会怎样”。其次是工程化能力。现在测试早已不是纯手工执行的时代CI/CD流水线、自动化脚本、日志分析、监控告警都是测试工程师的日常工具。笔试中出现的Linux命令、Python编程、Shell脚本题正是为了筛选具备工程动手能力的候选人。我在实际工作里每天最常用的就是Linux命令来查看日志定位线上问题用Python写数据构造脚本用Jenkins跑自动化回归任务。最后是快速学习与问题定位能力。搜狗的业务线非常多从搜索到输入法、从地图到AI硬件每个业务的技术栈和测试方案差异巨大。笔试题目覆盖面广也是在看候选人是否有能力在短时间内接触一个全新领域并快速上手。这种能力通常体现在排查问题思路的描述中比如面对一个偶现的线上问题你是直接重新跑一遍还是会先观察日志特征、缩小范围、逐步定位。6. 备考一个月如何系统准备测试开发岗笔试题6.1 分模块突击路线如果你距离笔试还有一个月左右的时间我建议按照下面的路线来分配精力这套方法是我后来辅导学弟学妹时验证过比较有效的节奏第一周基础理论攻坚。花3天把软件测试基础测试流程、用例设计方法、缺陷管理整理成知识框架花2天过Linux高频命令每天在虚拟机上练习两小时花2天过计算机网络核心知识点重点抓HTTP协议和TCP握手。第二周工具链实操。Selenium和Appium搭好环境各跑通一个自动化示例脚本JMeter跑一次简单的接口压测Postman完成一个接口的完整测试流程包含环境变量和断言Jenkins搭建本地流水线实现一个定时构建任务。第三周编程能力强化。每天练2道力扣简单题2道中等题把Hive和MySQL常用函数过一遍重点掌握GROUP BY、JOIN、窗口函数Python的os、re、json、requests这几个高频库要达到熟练使用程度。第四周模拟题实战。每天限时做一套测试岗笔试题优先做牛客网上的真题和模拟卷针对每道错题写错题笔记把知识点追溯到具体模块再补强整理自己的一套测试用例设计模板覆盖登录、注册、搜索、支付、消息通知这些高频组件。6.2 刷题资源与工具清单很多同学会问到底刷哪些题、装哪些工具才够用。我按实用程度整理了一份清单刷题平台力扣完成数组、字符串、哈希表、双指针、二叉树五个标签的简单和中等题、牛客网搜索“测试开发笔试题”、CSDN的笔试面经汇总板块。自动化工具SeleniumWeb端、Appium移动端、Requests接口层、Pytest测试框架、Allure报告生成。性能测试工具JMeter或Locust。校招阶段只需要理解并发、QPS、响应时间、吞吐量这些指标含义能跑通一个简单压测脚本即可。接口调试工具Postman或Apifox需要掌握环境变量、全局变量、断言、批量执行、mock server这几个功能。抓包工具Charles或Fiddler使用场景包括查看HTTPS请求内容、模拟弱网、断点修改请求和响应。6.3 考场上的时间分配策略90分钟要完成30道左右的题目时间其实非常紧张。我的经验是选择填空部分不要犹豫每题最多2分钟快速过简答题先列出提纲和关键词然后按框架展开不用写长段落编程题先写主逻辑再补边界判断保证核心代码能运行。特别提醒一点如果真的遇到完全不会的题目千万别空着。测试岗笔试阅卷的时候蒙一个答案可能还有分空着一定零分。特别是场景设计题就算不知道最优解也要从功能、性能、兼容性这几个老生常谈的角度多写几条把自己知道的知识点全部铺开。7. 笔试之外的校招测试岗细节笔试只是校招的第一关很多同学笔试考得不错却在后续环节掉了链子。结合搜狗及其他大厂的招聘流程我补充几点容易被忽视的细节。简历上不要只写“熟悉功能测试”“掌握Postman”这些描述已经完全没有竞争力。更好的写法是量化结果比如“负责XX系统的接口自动化测试搭建Pytest执行框架将回归耗时从2小时缩短到20分钟”或者“通过分析线上日志定位到XX接口偶发超时的根因推动开发修复后线上报错率下降80%”。有数字、有影响、有技术含量的描述才能让面试官有追问的欲望。面试环节不要只讲做的过程要讲遇到的痛点和自己的思考。比如面试官问“你在项目中遇到的最难的问题是什么”不要回答“调了很久终于解决了”而是要说清楚问题的背景、排查的思路、排除干扰项的方法、最终定位的方式以及这个过程中你沉淀了什么经验。测试工程师本质上也是一个需要不断挖掘根因的角色你的思路比结论本身更有说服力。另外建议在投递测试开发岗位时至少准备一个完整的项目演示最好有代码仓库地址。这个项目可以不是大型系统但一定要闭环有需求文档、有测试计划、有测试用例、有自动化脚本、有测试报告。我见过一个很有竞争力的候选人用Pytest搭了一个接口自动化测试框架打通了本地IDE执行、Jenkins持续集成和Allure报告展示面试时直接打开浏览器演示当场把面试官征服了。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门