目录
测试常见问题和流程篇
1.介绍一下测试流程(重点,常见!)
- 需求评审、测试计划、测试用例、用例评审、冒烟测试、测试执行、验收测试、风险评估、上线\观察、问题跟进、测试报告、复盘会议;
- 根据自己的日常经验来回答,每个点的工作内容都需要清晰掌握,有可能就某个点如何工作进行提问。
2.介绍一下测试方法
- 按阶段:单元测试、集成测试、系统测试、验收测试
- 按手段:黑盒测试、白盒测试、灰盒测试
- 其他:冒烟测试、回归测试
3.介绍一下测试用例设计方法(用例设计方法&测试方法需分清楚)
- 黑盒测试用例设计:等价类划分法、边界值分析法、错误推测法、因果图法、正交试验分析法、流程分析法
- 白盒测试:语句覆盖、判定覆盖、条件覆盖、条件组合覆盖、判定/条件覆盖、路径覆盖
4.设计一个登录页面的用例(提供某个场景设计用例,重点!)
- 功能测试:正确输入、为空输入、字符类型校验、长度校验、密码是否加密显示、大写提示、跳转页面是否成功、登出后用另一个账号登录
- UI:界面布局合理、风格统一、界面文字简洁好理解、没有错别字
- 性能测试:打开登录页面需要几秒、点击登录跳转首页需要几秒、多次点击、多人点击
- 安全性:用户名和密码是否加密发送给服务器、错误登录的次数限制(防止暴力破解)、一台机器登录多个用户、一个用户多方登录、检查元素能否看到密码
- 兼容性测试:不同浏览器、不同的平台(Windows、Mac)、移动设备能否工作
- 易用性:输入框可否tab键切换、回车能否登录等
5.举例说明项目推进的能力(针对个人评价的举例说明)
- (例)推动开发解决菜单权限需退出登录才可应用的问题。
- 描述:XX项目上线后,由于权限更新导致用户无法使用旧界面+用户不懂得自己退出登录以应用新菜单权限,线上多个用户反馈平台相关功能无法使用。处理:远程操作+线上指导出现问题的用户退出登录,凌晨脚本批量强制用户退出登录。推进:在下一次版本中,推动开发处理菜单权限更新问题,以防每次更新菜单都出现用户使用不了功能的问题。结果:处理为用户登录期间仍可使用旧界面,直到用户退出重新登录后,才应用新菜单权限;
- 推动冒烟测试:冒烟不通过,测试召开会议罗列项目不通的模块、存在的问题,一一对应到每个人去跟进,得到解决的时间,后续项目群说明并艾特每个人跟进。测试准时验收。
- 推动文档质量:在日常工作中遇到需求文档、设计文档、接口文档不规范或不详细的在绝大多数,这个时候就要通过沟通或以bug的形式,促使各个岗位将各自的文档完善。
- 结合自己的个人经验,从问题描述+处理过程+推进表现+结果,一一说明。
6.测试中遇到的比较难的一个项目是?(掌握自己简历上的项目)
- XX项目:这个项目是一个新项目、需要对接第三方、从协助测试产品模块到转手负责整个项目加强了一定的需求理解难度、订单逻辑不熟悉、其中需求的问题推进比较困难。
- 针对这些困难,测试方面:先快速了解需求,并与原先的测试负责人了解具体的进度和需要注意的测试点。开发方面:迅速与开发人员了解订单逻辑,以及与第三方对接的过程。产品方面:遇到某个需求问题产品不接受、最后汇报领导+开会讨论了较好的处理方案。虽然过程问题比较多,但是通过项目组的集体努力,最后项目得以按时上线
- 说明项目(最好是简历上的项目方便面试官进一步提问)。描述有难度的地方+如何处理+结果
7.印象深刻的一个bug?
- 隐藏得比较深的bug、影响比较大的bug、处理过程比较曲折的bug。根据自己的经验描述:如何发现的、如何处理、影响、结果、反思。
- 举例说明:如升级版本兼容性问题、接口安全性问题、数据库安全性问题、服务器资源占用溢出问题、代码逻辑问题等
8.你们公司是不是敏捷开发?介绍一下敏捷开发?
- 是,敏捷快速迭代、多版本同时迭代
- 敏捷开发属于增量式开发,对于需求范围不明确、需求变更较多的项目而言可以很大程度上响应和拥抱变化、主张简单、拥抱变化、可持续性、递增的变化、高质量的工作、快速反馈、软件是你的主要目标
9.复盘会议的主要内容有哪些?
- 这点需要结合自己平时参与的项目会议举例说明。如线上bug分析、优化改进策略、bug优先级等等
10.App 的兼容性怎么测,App 的接口测试怎么测?
- 系统兼容(ios、安卓)、机型兼容(iPhone、华为、小米、三星、vivo、OPPO)、分辨率兼容、软件本身向前向后兼容
- 接口测试:获取接口文档,使用fiddler抓包工具获取接口的请求方式、url、请求参数、返回参数,然后使用postman、jmeter进行测试
11.Web 端测试和 App 端测试有何不同(常见)
-
系统结构方面
- Web 项目,b/s架构,基于浏览器的;Web 测试只要更新了服务器端,客户端就会同步会更新;
- App 项目,c/s结构的,必须要有客户端;App 修改了服务端,则客户端用户所有核心版本都需要进行回归测试一遍;
-
兼容方面
- Web项目:a. 浏览器(火狐、谷歌、IE等)b. 操作系统(Windows7、Windows10、Linux等)
- App项目:a. 设备系统: iOS(ipad、iphone)、Android(三星、华为、联想等) 、Windows(Win7、Win8)、OSX(Mac)b. 手机设备可根据 手机型号、分辨率不同
-
性能方面
- web项目 需监测 响应时间、CPU、Memory
- app项目 除了监测 响应时间、CPU、Memory外,还需监测流量、电量等
-
相对于 Wed 项目,APP有专项测试
- 干扰测试:中断,来电,短信,关机,重启等
- 弱网络测试(模拟2g、3g、4g,wifi网络状态以及丢包情况);网络切换测试(网络断开后重连、3g切换到4g/wifi 等)
-
安装、更新、卸载
- 安装:需考虑安装时的中断、弱网、安装后删除安装文件等情况
- 卸载:需考虑 卸载后是否删除 App 相关的文件
- 更新:分强制更新、非强制更新、增量包更新、断点续传、弱网状态下更新
- 界面操作:关于手机端测试,需注意手势,横竖屏切换,多点触控,前后台切换
- 安全测试:安装包是否可反编译代码、安装包是否签名、权限设置,例如访问通讯录等
- 边界测试:可用存储空间少、没有SD卡/双SD卡、飞行模式、系统时间有误、第三方依赖(QQ、微信登录)等
- 权限测试:设置某个 App 是否可以获取该权限,例如是否可访问通讯录、相册、照相机等
数据库篇
1. 工作中常使用的 SQL 语法有哪些?
- create table、create view、 select from where、insert into、update set values、delete、alter、order by、having
2.数据库存储过程
- 一组数据库操作命令,当作是自己写的一个方法,一系列步骤自己去封装(个人理解)
3.SQL 常见查询语句编写(此处仅举例常见的查询语句,如有更多坑,希望补充)
a.查询所有学生的数学成绩,显示学生姓名 name, 分数, 由高到低。
SELECT a.name, b.score FROM student a, grade b WHERE a.id = b.id AND kemu = '数学' ORDER BY score DESC;
b.统计每个学生的总成绩(由于学生可能有重复名字),显示字段:学生 id,姓名,总成绩。
SELECT a.id, a.name, c.sum_score from student a, (SELECT b.id, sum(b.score) as sum_score FROM grade b GROUP BY id) c WHERE a.id = c.id ORDER BY sum_score DESC;
c.列出各门课程成绩最好的学生, 要求显示字段: 学号,姓名,科目,成绩
SELECT c.id , a.name, c.kemu, c.score FROM grade c, student a,(SELECT b.kemu, MAX(b.score) as max_score FROM grade b GROUP BY kemu) t WHERE c.kemu = t.kemu AND c.score = t.max_score AND a.id = c.id
4.慢查询是什么意思?
- 开启慢查询日志,可以让 MySQL 记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。
5.导致数据库性能差的可能原因有哪些?
- 硬件环境问题,如磁盘IO
- 查询语句问题,如join、子查询、没建索引
- 索引失效,建了索引,查询的时候没用上
- 查询关联了太多的join
- 服务器关联缓存,线程数等
- 表中存在冗余字段,在生成笛卡尔积时耗费多余的时间
6.Redis 缓存应用场景
- 需要将数据缓存在内存中,提升查询效率
- 这里希望大家补充
7.怎么定位 Redis 缓存失效问题(缓存坏了)
- Redis 的知识,了解的不是很多
- 抛砖引玉,请大家指正和补充。
Linux 技能篇
1. 工作中常用的 Linux 命令有哪些?
awk、sed、vim、iotop、dstat、cp、top、ifconfig、pwd、cd、ll、ls、cat、tail、grep、mv、rm、mkdir、df、du
2.什么命令可以帮助 Linux 执行 Windows 上传的脚本?
- 改变编码格式
- vim test.sh
- :set ff?// 显示dos的话
- :set ff=unix:wq
3简述 Linux 三剑客
-
grep 命令
- 根据用户指定的模式 pattern 对目标文本进行过滤,显示被模式匹配到的行;
- grep [options] pattern [file]
-
常用参数:
- -v 显示不被pattern匹配到的行
- -i 忽略字符的大小写
- -n 显示匹配的行号
- -c 统计匹配的行数
- -o 仅显示匹配到的字符串
- -E 使用ERE,相当于egrep(可以识别更多的正则表达式规则)
-
sed 命令
- 流编辑器,用来处理一行数据。将一行数据存储在模式空间中->用sed命令处理->送入屏幕->清空空间。
-
常用参数:
- -h 显示帮助
- -n 仅显示script处理后的结果
- -e 指定的脚本来处理输入的文本文件
- -f 以指定的脚本文件来处理
-
常用动作:
- a: 新增 sed -e '4 a newline'
- c: 取代 sed -e '2,5c No 2-5 number'
- d: 删除 sed -e '2,5d'
- i: 插入 sed -ed '2i newline'
- p: 打印 sed -n '/root/p'
- s: 取代 sed -e 's/old/new/g'
- g: 代表全局
-
awk 命令
- 把文件逐行的读入,以空格为默认分隔符将每行切片。把行作为输入,并赋值给$0->将行切段,从$1开始->对行匹配正则/执行动作->打印内容;
awk 'pattern + action' [filenames]
-
常用语法:
- filename awk 浏览的文件名
- begin 处理文本前要执行的操作
- end 处理文本之后要执行的操作
- fs 设置输入域分隔符,等价于命令行-F选项
- nf 浏览记录的域的个数(列数)
- nr 已读的记录数(行数)
-
常用参数:
- ofs 输出域分隔符
- ors 输出记录分隔符
- rs 控制记录分隔符,换行标志
- $0 整条记录
- $1 第一条分隔后的记录
4.如何通命令定位 Linux 服务器下的日志?
- 如果要监控日志,那么使用 tail -f | grep xxx 命令,过滤需要的字段;
- 如果在完整日志中查看内容,使用 cat xxx.log | grep xxxx | awk '{print $1}' 等命令过滤自己需要的内容;
5.简述项目中的环境搭建和维护
- 结合自身经验先从系统安装开始,如常用的 CentOS 和 Ubuntu 说起,系统安装主要是磁盘分区和磁盘阵列问题;
- 基础环境依赖,如 MySQL、Redis、Jenkins、Docker、项目中用到的其他依赖环境等;
- 维护方便主要从遇到的错误说起,如无法远程连接、服务器加固等;
测试面试之测试工具考点
-
介绍一下测试中常用的工具(必备基础,必须掌握!)
- 需求问题跟进、测试计划、风险评估登记、测试报告、复盘会议:wiki
- 测试用例:Xmind 编写,Testlink 管理
- 测试执行:ELK、Xshell等
- Bug 管理:Jira、bugfree、禅道等
- 接口测试相关:Charles、Fiddler、Postman、JMeter等
- 自动化相关:Selenium、Appium、pytest、Locust、JMeter等
-
用什么工具对用例进行管理?
- Testlink 管理用例的一般步骤:新建计划、新建版本、上传xml文件、添加测试用例到测试计划中、分配测试用例给开发、查看用例执行报告。
- Xmind:(略…)
- Excel:(略…)
-
怎么使用 ELK 定位日志?
- 查看产品推送是否成功。产品从 A 平台推送到 B 平台,根据 A 平台的链接 id,搜索对应的日志。搜索不到,则为 A 平台推送失败。搜索到了,查看推送的状态,进一步判断问题所在。
- 使用官方文档,可以进一步了解 ELK 日志查看。
-
Xshell如何登录,如何切换目录?
- 使用 SSH 密钥登录:生成密钥公钥和私钥-上传公钥到服务器-配置 Xshell 使用密钥认证方式登录到服务器;
- 使用账号密码登录:配置中输入被连接服务器的账号、密码、IP 及端口连接;
-
埋点测试怎么测试,使用什么工具,数据要不要入库?
- 使用 Charles、Fiddler 抓包,查看对应的来源记录、事件等必要参数是否正确,查看数据库记录是否正确
-
介绍 Fiddler 和 Postman 的区别
- Fiddler 主要是抓包,Postman 主要进行接口请求;
-
怎么使用 Postman 进行多个接口请求?
- 将多个接口请求归纳到一个集合里,在集合的右上角点击展开箭头,点击 Run;
-
日常工作中 JMeter 是怎么用的?
- 接口测试:通过对指定接口进行请求访问,验证数据出入的准确性与安全性;
- 性能测试:编写对应的测试集,通过脚本控制线程数,实现逐步加压等;
- 结合自己项目经验,没有经验千万不能盲目举例乱说,避免坑自己;
-
例举熟悉的自动化测试工具,并说明其实现原理
- 调用 Android adb 完成基本的系统操作
- 向 Android 上部署 BootStrap.jar
- BootStrap.jar Forward Android 的 4723 端口到 PC 机器上
- PC 上监听端口接收请求,使用 webdriver 协议
- 分析命令并通过 forward 端口发给 BootStrap.jar
- BootStrap.jar 接收请求并把命令发给 UIAutoMator
- UIAutoMator 执行命令
- 运行用 Python 写好的 Selenium 脚本,它会像 Web Service 中发送一个 HTTP 请求;
- 浏览器驱动中的 Web Service 会根据这个请求生成对应的 JS 脚本,因为不同的浏览器,相同的操作生成的 JS 脚本会有所不同,因此不同的浏览器要有不同的驱动;
- JS 脚本驱动浏览器,产生各种操作,并返回给 Web Service;
- Web Service 将结果通过 HTTP 响应的形式返回给客户端;
- Selenium 过程如下:
- Appium 的加载过程
自动化测试相关
包含 Selenium、Appium 和接口测试。
1. 自动化代码中,用到了哪些设计模式?
- 单例模式
- 工厂模式
- PO模式
- 数据驱动模式
2. 什么是断言?
- 检查一个条件,如果它为真,就不做任何事,用例通过。如果它为假,则会抛出 AssertError 并且包含错误信息。
3. UI 自动化测试中,如何做集群?
- Selenium Grid,分布式执行用例
- Appium 使用 STF 管理多设备
- Docker+K8S 管理集群
4. 怎么对含有验证码的功能进行自动化测试?
- 万能验证码
- 测试环境屏蔽验证
- 其他操作不推荐
5. 如何优化和提高 Selenium 脚本的执行速度?
- 尽量使用 by_css_selector() 方法
- by_css_selector() 方法的执行速度比 by_id() 方法的更快,因为源码中 by_id() 方法会被自动转成 by_css_selector() 方法处理;
- 使用等待时,尽量使用显示等待,少用 sleep(),尽量不用隐式等待;
- 尽量减少不必要的操作:可以直接访问页面的,不要通过点击操作访问;
- 并发执行测试用例:同时执行多条测试用例,降低用例间的耦合;
- 有些页面加载时间长,可以中断加载;
6. 接口测试能发现哪些问题?
- 可以发现很多在页面上操作发现不了的 bug;
- 检查系统的异常处理能力;
- 检查系统的安全性、稳定性;
- 前端随便变,接口测好了,后端不用变;
- 可以测试并发情况,一个账号,同时(大于 2 个请求)对最后一个商品下单,或不同账号,对最后一个商品下单;
- 可以修改请求参数,突破前端页面输入限制(如金额);
7. Selenium 中隐藏元素如何定位?
- 如果单纯的定位的话,隐藏元素和普通不隐藏元素定位没啥区别,用正常定位方法就行了(这个很多面试官也搞不清楚);
- 元素的属性隐藏和显示,主要是 type="hidden" 和 属性来控制的,接下来在元素属性里面让它隐藏,隐藏元素可以正常定位到,只是不能操作(定位元素和操作元素是两码事,很多初学者傻傻分不清楚),操作元素是 click,clear,send_keys 这些方法;
- JS 操作隐藏元素;
8. 如何判断一个页面上元素是否存在?
- 方法一:用 try…except…
- 方法二:用 elements 定义一组元素方法,判断元素是否存在,存在返回 True,不存返回 False
- 方法三:结合 WebDriverWait 和 expected_conditions 判断(推荐)
9. 如何提高脚本的稳定性?
- 不要右键复制 xpath(十万八千里那种路径,肯定不稳定),自己写相对路径,多用 id 为节点查找;
- 定位没问题,第二个影响因素那就是等待了,sleep 等待尽量少用(影响执行时间);
- 定位元素方法重新封装,结合 WebDriverWait 和 expected_conditions 判断元素方法,自己封装一套定位元素方法;
10. 如何定位动态元素?
- 动态元素有 2 种情况,一个是属性动态,比如 id 是动态的,定位时候,那就不要用 id 定位就是了;
- 还有一种情况动态的,那就是这个元素一会在页面上方,一会在下方,飘忽不定的动态元素,定位方法也是一样,按 f12,根据元素属性定位(元素的 tag、name的步伐属性是不会变的,动的只是 class 属性和 styles 属性);
11. 如何通过子元素定位父元素
- 使用element.parent方法
12. 平常遇到过哪些问题? ?如何解决的
- 可以把平常遇到的元素定位的一些坑说下,然后说下为什么没定位到,比如动态 id、有 iframe、没加等待等因素;
13. 一个元素明明定位到了,点击无效(也没报错),如果解决?
- 使用 JS 点击,Selenium 有时候点击元素是会失效;
14. 测试的数据你放在哪?
- 对于账号密码,这种管全局的参数,可以用命令行参数,单独抽出来,写的配置文件里(如 ini);
- 对于一些一次性消耗的数据,比如注册,每次注册不一样的数,可以用随机函数生成;
- 对于一个接口有多组测试的参数,可以参数化,数据放 YAML,Text,JSON,Excel 都可以;
- 对于可以反复使用的数据,比如订单的各种状态需要造数据的情况,可以放到数据库,每次数据初始化,用完后再清理;
- 对于邮箱配置的一些参数,可以用 ini 配置文件;
- 对于全部是独立的接口项目,可以用数据驱动方式,用 excel/csv 管理测试的接口数据;
- 对于少量的静态数据,比如一个接口的测试数据,也就 2-3 组,可以写到 py脚本的开头,十年八年都不会变更的;
15. 什么是数据驱动,如何参数化?
- 参数化的思想是代码用例写好了后,不需要改代码,只需维护测试数据就可以了,并且根据不同的测试数据生成多个用例;
16. 其他接口都需要登录接口的信息,怎么去让这个登录的接口只在其他接口调用一次?
- 使用单例模式
- 使用自定义缓存机制
- 使用测试框架中的 setup 机制
- pytest 中 fixture 机制
17. 接口产生的垃圾数据如何清理?
- 造数据和数据清理,需用 python 连数据库了,做增删改查的操作测试用例前置操作,setUp 做数据准备后置操作,tearDown 做数据清理
18. 怎么用接口案例去覆盖业务逻辑?
- 考虑不同的业务场景,一个接口走过的流程是什么样的,流程的逻辑是什么样的,什么样的参数会有什么样的结果,多场景覆盖;
性能篇
1. 性能测试指标包括哪些
- 最大并发用户数,HPS(点击率)、事务响应时间、每秒事务数、每秒点击量、吞吐量、CPU 使用率、物理内存使用、网络流量使用等。
-
前端需主要关注的点是:
- 响应时间:用户从客户端发出请求,并得到响应,以及展示出来的整个过程的时间。
- 加载速度:通俗的理解为页面内容显示的快慢。
流量:所消耗的网络流量。
-
后端需主要关注的是:
- 响应时间:接口从请求到响应、返回的时间。
- 并发用户数:同一时间点请求服务器的用户数,支持的最大并发数。
- 内存占用:也就是内存开销。
- 吞吐量(TPS):Transaction Per Second, 每秒事务数。在没有遇到性能瓶颈时:TPS=并发用户数*事务数/响应时间。
- 错误率:失败的事务数/事务总数。
- 资源使用率:CPU占用率、内存使用率、磁盘I/O、网络I/O。
- 从性能测试分析度量的度角来看,主要可以从如下几个大的维度来收集考察性能指标:
- 系统性能指标、资源性能指标、稳定性指标
2. 如果一个需求没有明确的性能指标,要如何开始进行性能测试?
- 先输出业务数据,如 pv、pu、时间段等,计算出大概的值,然后不断加压测到峰值
3. 介绍 JMeter 聚合报告包括哪些内容?
- 请求名、线程数、响应时间(50 95 99 最小 最大)错误率、吞吐量
4. 如果有一个页面特别卡顿,设想一下可能的原因?
- 后台:接口返回数据慢,查询性能等各种问题
- 前端:使用 Chrome 工具调试,判断 JS 执行久或是其他问题
- 网络问题
5. 说一说项目中的实际测试内容
- 根据自己项目中的经验实话实说,有没有经验很容易露馅。
6. 介绍一下 JMeter 进行性能测试的过程
- 结合自己的项目经验聊。大家也可以自行搜索。
7. 介绍一下 JMeter 和 LoadRunner 的区别
- 详细的不展开了,最重要的是相对来说 LoadRunner 的笨重、昂贵、闭源,理念和生态都落后,而 JMeter 是开源、可定制化开发,功能强大易用,并且在互联网大厂都已经有非常成熟的落地方案(主流的互联网公司基本都在使用 JMeter+ELK+Grafana+Influxdb 这套架构),可以说是进 BAT 大厂必备技能。还不会 JMeter 的同学建议抓紧补起来。
如果你想成为备受企业青睐的IT人才
想要高薪offer(面试宝典免费送)
没有项目实战经验怎么办?
点击下方我来教你