1.几分钟介绍一下自己
2.为什么选择测试这行?
因为其具有挑战性和成就感,找一些系统隐藏的逻辑漏洞的时候,自己就非常的开心。并且测试需要细心和耐心,自己可以很快的分析bug的来源。
3.你的测试职业发展是什么?
测试经验越多,测试能力越高。所以我的职业发展是需要时间积累的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前3年积累测试经验,按如何做好测试工程师的要点去要求自己,不断更新自己改正自己,做好测试任务。
4.一个测试工程师应该具备哪些素质和技能?
掌握基本的测试基础理论
本着找出软件存在的问题的态度进行测试,不要以挑刺的形象出现
可熟练阅读需求规格说明书等文档
以用户的观点看问题
有强烈的质量意识
细心和责任心
良好的有效的沟通方式(与开发人员及客户)
具有以往的测试经验能够及时准确的判断出高危险区在何处
5.请描述下你公司的测试流程?
需求分析讨论-确定测试策略-设计测试用例-测试用例评审-beta测试-uat测试-测试报告
6.你是测试组长,您是怎样管理团队的?
我会对成员的思想做一个较为全面的了解,分析项目的形势,当前的状况,未来的发展方向、目标,让每个成员都参与到项目的讨论中;人员的分配要合理,要能适应岗位的要求,明确其应有的岗位职责,根据能力高低来分配工作,对实位的奖惩要符合其岗位的重要程度;制定公司的规章制度,并严格执行,领导的激励也不可缺少。
7.你工作中的沟通对象一般都是哪些人?
(1).产品、开发、UI/UE设计
(2).市场、运维、运营
(3).领导、下属
8.您在以往的测试工作中都曾经具体从事过哪些工作?其中最擅长哪部分工作?
做过web测试,小程序测试,H5页面测试,后台测试,接口测试。最擅长接口测试,自己给公司的业务流程写过一套自动化框架,用于回归业务流程。
9.软件生命周期概念是什么?
需求分析 —》可行性分析 —》概要设计 —》详细设计 —》编码实现 —》调试和测试 —》软件验收与应用 —》维护升级 —》废弃
10.软件测试分类
1.按照开发阶段划分软件测试:单元测试、集成测试、系统测试、验收测试。
2.按照测试实施组织划分软件测试:开发方测试、用户测试(alpha测试,Beta测试)、第三方测试。
3.按照测试技术划分:白盒测试、灰盒测试、黑盒测试。
软件测试方法和技术的分类与软件开发过程相关联,它贯穿了整个软件生命周期。
11.测试的目的是什么?
测试的目的是找出软件产品中的错误,使软件尽可能的符合用户的要求。当然软件测试是不可能找出全部错误的。
1.发现:被测对象与用户需求之间的差异
2.增加:用户对被测对象的质量信息
3.获取被测对象信息,为决策提供依据
4.为软件质量的可持续运行提供保障
5.预防Bug,降低风险
12.软件测试原则是什么?
13.软件测试的流程是什么?
14.测试分为哪几个阶段?
一般来说分为5个阶段:单元测试、集成测试、确认测试、系统测试、验收测试
15.了解 bug 处理流程吗?
bug分级;优先级(高中低)、严重程度(高中低)
bug分类:UI、系统、接口
bug状态:新建、待修改、待验证、已验证、遗留、关闭
16.一条bug记录包含哪些内容?
1.测试工程师、开发人员、bug日期
2.bug标题, bug正文, bug附件
3.bug优先级、bug严重等级
4.bug所属模块
5.bug状态(新建、已修复、已验证、遗留等)
6.bug处理记录
17.常见的测试用例设计方法
等价类
边界值
判定表
场景法
错误推测法
18.白盒和黑盒的区别,你是怎么运用的?
19.列举几个黑盒测试方法:
等价类/边界值、决策表、状态转换图、决策树和正交测试法
20.没有产品说明书和需求文档地情况下能够进行黑盒测试吗?
这个问题是测试工程师经常遇到的问题,根源就是软件开发文档管理不规范,对变更的管理方法就更不合理了。实际上没有任何文档的时候,测试人员是能够进行黑盒测试的,这种测试方式我们可以称之为探索测试,具体做法就是测试工程师根据自己的专业技能、领域知识等不断的深入了解测试对象、理解软件功能,进而发现缺陷。
在这种做法基本上把软件当成了产品说明书,测试过程中要和开发人员不断的进行交流。尤其在作项目的时候,进度压力比较大,可以作为加急测试方案。最大的风险是不知道有些特性是否被遗漏。
21.列举几个白盒测试方法:
语句、分支、条件、判定/条件、MC/DC、路径和控制流覆盖
22.如何对模块接口进行白盒测试?
模块接口测试重点检查进出模块的数据是否正确。
主要检查的内容包括以下几个方面:
模块的实际输入与定义的输入是否一致,包括检查参数个数、类型、顺序等。
模块中对于非内部/局部变量是否合理使用。
使用其他模块时,是否检查该模块的可用性和处理结果。
使用外部资源时,是否检查了可用性并及时释放资源,这些资源包括内存、文件、硬盘、端口等。
23.平常用什么工具测接口的
接口测试工具很多,首先postman
其次用jmeter
24.平常你是怎么测试接口的?
25.POST和GET的区别?
本质上没有区别,是HTTP协议中的两种发送请求的方法,HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。
1、传送方式:get通过地址栏传输,post通过报文传输。
2、传送长度:get参数有长度限制(受限于url长度),而post无限制
3、GET和POST还有一个重大区别,简单的说:
GET产生一个TCP数据包;POST产生两个TCP数据包
26.cookie和session的区别
(1)cookie数据存放在客户的浏览器上,session数据放在服务器上
(2)cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session
(3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面应当使用cookie
(4)单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie
(5)可以将登陆信息等重要信息存放为session;其他信息需要保存,可以放在cookie
27.请求接口中常见的返回状态码
1xx – 信息提示(表示临时的响应。客户端在收到常规响应之前,准备接收一个或多个1xx响应)
2xx – 成功(表明服务器成功地接受了客户端请求)
3xx – 重定向(客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请求服务器上的不同的页面,或通过代理服务器重复该请求)
4xx – 客户端错误(发送错误,客户端有问题。例如,客户端请求不存在的页面,客户端未提供有效的身份证验证信息)
5xx – 服务器错误(服务器由于遇到错误而不能完成该请求)
常见的有
(1)200 OK - [GET]:服务器成功返回用户请求的数据
(2)201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功
(3)202 Aceepted - []:表示一个请求已经进入后台排队(异步任务)
(4)204 NO CONTENT - [DELETE]:用户删除数据成功
(5)400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作
(6)401 Unauthorized -[] :表示用户没有权限(令牌、用户名、密码错误)
(7)403 Forbidden -[] :表示用户得到授权(与401错误相对),但是访问被禁止
(8)404 NOT FOUND -[]:用户发出的请求针对得到是不存在的记录,服务器没有进行操作,该操作是幂等的
(9)406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
(10)410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
(11)422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
(12)500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。
28.如何分析一个bug是前端还是后端的
这种情况很容易判断,先抓包看请求报文,对着接口文档,看请求报文有没问题,有问题就是前端发的数据不对。
请求报文没问题,那就看返回报文,返回的数据不对,那就是后端开发的问题咯
29.压力测试和负载测试的区别
负载测试是模拟实际软件系统所承受的负载条件的系统负荷,通过不断加载(如逐渐增加模拟用户的数量)或其它加载方式来观察不同负载下系统的响应时间和数据吞吐量、系统占用的资源(如CPU、内存)等,以检验系统的行为和特性,以发现系统可能存在的性能瓶颈、内存泄漏、不能实时同步等问题。
压力测试是在高负载情况下对系统的稳定性进行测试。是在高负载(大数据量、大量并发用户等)下的测试,观察系统在峰值使用情况下的表现,从而发现系统的功能隐患。
负载测试:多用户,用户数渐增,持续同时发同一业务请求,产出最大TPS;
压力测试:多用户,资源使用饱和,持续同时发同一业务请求,产出系统瓶颈或使用极限。
30.当开发人员说不是BUG时,你如何应付?
开发人员说不是BUG,有2种情况,一是需求没有确定,所以我可以这么做,这个时候可以找来产品经理进行确认,需不需要改动。3方商量确定好后再看要不要改。二是这种情况不可能发生,所以不需要修改,这个时候,我可以先尽可能的说出是BUG的一句是什么?如果被用户发现或出了问题,会有什么不良结果?程序员可能会给你很多理由,你可以对他的解释进行反驳。如果还是不行,那我可以给这个问题提出来,跟开发经理和测试经理进行确认,如果要修改就改,如果不要修改就不改。其实有些真的不是BUG,我也只是建议的方式写进测试文档中,如果开发人员不修改也没有大问题。如果不是BUG的话,一定要坚持自己的立场,让问题得到最后的确认。
31.开发没时间修复,如何推进bug的修复
和开发说明该问题的严重性,会怎样影响产品的正常使用,如何还是坚持不改,就上报领导,让领导辅助推进;
确认问题的严重程度,如果影响不大,不是非要改的bug,并且修复风险比较大,和领导商量后,如果认为暂时可以不用修复,也可以不修复。
32.文档测试主要包含什么内容?
在国内软件开发管理中,文档管理几乎是最弱的一项,因而在测试工作中特别容易忽略文档测试也就不足为奇了。要想给用户提供完整的产品,文档测试是必不可少的。文档测试一般注重下面几个方面:
文档的完整性:主要是测试文档内容的全面性与完整性,从总体上把握文档的质量。例如用户手册应该包括软件的所有功能模块
描述与软件实际情况的一致性:主要测试软件文档与软件实际的一致程度。例如用户手册基本完整后,我们还要注意用户手册与实际功能描述是否一致。因为文档往往跟不上软件版本的更新速度
易理解性:主要是检查文档对关键、重要的操作有无图文说明,文字、图表是否易于理解。对于关键、重要的操作仅仅只有文字说明肯定是不够的,应该附有图表使说明更为直观和明了
文档中提供操作的实例:这项检查内容主要针对用户手册。对主要功能和关键操作提供的应用实例是否丰富,提供的实例描述是否详细。只有简单的图文说明,而无实例的用户手册看起来就像是软件界面的简单拷贝,对于用户来说,实际上没有什么帮助
印刷与包装质量:主要是检查软件文档的商品化程度。有些用户手册是简单打印、装订而成,过于粗糙,不易于用户保存。优秀的文档例如用户手册和技术白皮书,应提供商品化包装,并且印刷精美
33.安全性测试都包含哪些内容?
1,用户访问认证
2.传输数据加密
3.安全防护策略:如安全日志、入侵检测、隔离防护、漏洞扫描
4.数据备份与恢复
5.防病毒系统
6.SQL注入、JS注入
34.什么是自动化测试
自动化测试是一种使用自动化工具编写和执行测试人员测试脚本和案例的技术。
自动化测试的主要目标是减少手动运行的测试用例数量,而不是完全取消手动测试。
35.什么时候自动化测试?什么时候不自动化测试?
36.请描述一下自动化测试流程?
1.编写自动化测试计划
2.设计自动化测试用例
3.编写自动化测试框架和脚本
4.调试并维护脚本
5.无人值守测试
6.后期脚本维护(添加用例、开发更新版本)
37.常用的测试工具有哪些
1.网络调试工具:Fiddler
2.页面调试工具:Chrome Inspector firebug
3.WEB自动化工具:QTP、Selenium
4.移动端工具:ADB,Monkey, MonkeyRunner
5.移动端自动化框架:Appium 、Robotium 、Android、selendroid
6.平台知识:windows、mac、android、Linux
7.服务端压力工具:Loadrunner、JMter
8.接口测试工具:postman
9.数据库工具:mysql/mongodb 可视化工具
10.BUG管理平台:Gitlab、禅道、Jira
38.说明jmeter的工作原理?
jmeter就像一群将请求发送到目标服务器的用户一样。它收集来自目标服务器的响应以及其他统计数据,这些统计数据通过图形或表格显示应用程序或服务器的性能。
39.Jenkins的工作流程?
40.登陆的时候,所有信息输入正确,点击登陆按钮没反应,可能原因有哪些?
1、浏览器兼容性问题;
2、网速太慢;
3、系统卡顿;
4、代码处理逻辑问题,没有做页面跳转或错误提示;
41.一个搜索的输入框,你会怎样进行测试
大范围:功能性、兼容性、稳定性、性能、安全、接口、线上监控、自动化
小范围:功能性、兼容性、安全
关于功能性测试
常规可输入的内容,数字、英文、中文、特殊符号、转义符等
非常规有一定含义的,HTML标签、CSS、js代码、URL等
输入内容的边界值,空字符、超长文本(边界值+1、-1)
关于兼容性测试
根据产品的用户分布,手机品牌、分辨率、topN的机型
根据产品在不同浏览器上的占有率,选择主要浏览器测试
兼容性主要关注的问题,页面渲染,页面布局等,借助firebug调试
关于稳定性测试
在某一压力下,搜索结果能正常返回
多次查询,返回的内容相对稳定。后台数据可能有波动,但是几分钟几秒钟内查询结果应该一致
关于性能测试
QPS,query per second,每秒钟能处理的请求数
从点击到页面全部加载,页面耗时情况(耗时与页面大小,资源数量有关)
关于安全性测试
JS注入 ——如在查询输入框中输入JS代码
SQL注入——搜索框输入SQL语句
做一些破坏
关于接口测试
查询接口正确性验证:使用postman等工具单发一些查询请求,查看返回内容
查询接口对异常数据的容错情况:查询乱七八糟的查询词,是否会返回无结果
查询接口在非浏览器情况下的处理情况:
a.查询接口很容意被高级用户拿到,他们会频发地去抓取页面。
b.页面会对查询做一些限制,如有些字符无法输入,但是通过接口会绕过页面的限制
关于自动化测试
基于selenium工具进行UI自动化测试,例行回归验证,提高效率
Android端可以使用appium+UIautomantor
关于线上监控
保证线上服务质量,建立实时监控。可以及时发现异常,减少对用户的影响
42.淘宝双十一凌晨服务挂了十分钟,工程师抢修之后,马上上线,又挂了,请问有哪些原因会造成这个情况?
服务器内存不够、服务器超出负载、并发量太大、遇到恶意攻击。
43.对杯子进行测试用例设计
界面测试:
查看杯子外观是否漂亮
功能性:
1 用水杯装水看漏不漏,水能不能被喝到
2 杯子是否能够容纳果汁、白水、酒精、汽油
可靠性(包括安全方面):
杯子有没有毒或细菌,杯子从不同高度落下的损坏程度
易用性:
是否有防滑措施、是否方便饮用、杯子是否烫手、
效率(性能、压力方面):
是否容易损坏,测试杯子抗破碎强度。
维护:
破损后,有没有修补措施
可移植性(包含兼容性):
测试杯子在不同的地方、温度等环境下的使用情况
44.那如果你这边测试和开发那边测试结果不一致,怎么办?
1、先确认测试环境的代码是不是和开发那边的是一致的,因为有可能是开发没把代码提交到服务器,我们现在测试的版本还不是最新的;
2、如果测试环境的代码和开发的是一致的,就用fidder抓个包,看看问题是在前台还是后台,如果服务器返回的数据有问题,就把响应的服务器的日志取下来发给开发定位。
45.产品在上线后用户发现bug,这时测试人员应做哪些工作?
测试人员复现问题后,提交问题单进行跟踪;
评估该问题的严重程度,以及修复问题时的影响范围,回归测试需要测试哪些功能;
问题修复后,先在测试环境上回归,通过后再在生产环境上打补丁,然后再进行回归测试;
总结经验,分析问题发生的原因,避免下次出现同样问题。
46.在项目中发现哪些典型bug?什么原因导致的?
注册信息中的错误提示信息:如手机信息栏应填入11位有效电话号码,但提示信息却为“13位电话号码”,这是因开发人员粗心大意造成的。
47.列举几个你常用的linux 命令
clear:清除屏幕
curl web请求
cd:切换目录
如:切换到D盘 cd D:
cd … : 返回上一级目录
如:现在在c:\list\tcp
命令: cd…
结果是:退到 c:\list
ls-l :查看所有文件的详细信息
Is-a:列出当前目录下所有文件
touch:创建文件
如:创建mook 文件夹 touch mook
mkdir:创建目录
echo:创建带有内容的文件
如:echo"hello mook">mookhello
内容是:hello mook
文件名是:mookhello
cat:查看文件内容
如:查看mookhello文件里面的内容
命令:cat mookhello
结果是hello mook
cp:拷贝
如:拷贝mookhello的文件重置名为mook2
命令:cp mookhello mook2
再执行查看:ls-l
结果是:出现mook2 的文件夹
cat mook2的内容是否与mookhello 的相同
mv:移动或重命名
如:mook2 重命名为mook3;
命令:mv mook2 mook3
rm-f:强制删除
如:删除 mook 文件;
命令: rm-f mook
rm-f 不能删除有文件的目录;只能使用 rm-r:递归删除
如:
rm-r:递归删除
如:删除 mooktest 目录
命令:rm-r mooktest
wc:统计文本中行数、字词、字符数
如:wc mookhello
结果:
1行 2字词 11个字符
cat mookhello
grep:在文本文件中查找某个字符串
如:grep mook mookhello
tree:显示目录结构
In:创建软链
如:ln -s mookhello mook2
结果:
more, less:分页显示文本内容
head, tail:显示文件头尾内容
48.查询所有学生的数学成绩,显示学生姓名name, 分数, 由高到低
SELECT a.name, b.score
FROM student a, grade b
WHERE a.id = b.id
AND kemu = '数学'
ORDER BY score
DESC
49.统计每个学生的总成绩,显示字段:姓名,总成绩
SELECT a.name, sum(b.score) as sum_score
FROM student a, grade b
WHERE a.id = b.id
GROUP BY name
DESC
50.什么是MongoDB?他的优势是什么?
是一个文档数据库,可提供高性能,高可用性和易扩展性。
51.什么是敏捷开发,和传统开发比较的优势和劣势?
敏捷开发是在上个世纪90年代,传统开发方式不能够满足现实开发的需要,对传统方式进行总结,对成功失败的开发案例进行研究后,得到的一种不同于传统方式的开发流程,主要的特点是迭代式进行,这种方式把一个软件开发过程分成了若干个小的迭代过程,每一迭代完成一部分功能,每一次迭代过程的工作内容按照功能的重要程度不同而排列,首先完成重要的,同时也是风险比较大的功能,而后是次重要的,依此类推,同时在每次迭代中,都要进行分析、设计、开发、测试,因为分成了一个个小过程,一步步的逼近目标,所以,可以使得产品的用户能够逐渐得明白自己的真实需求从而能够提出真正的需求,而开发团队也可以根据更正后的需求进行下一次迭代的设计。