请你说一下自动化测试和手工测试的优缺点
自动化测试的优点:
- 可以减少测试人员的时间和成本,提高资源利用率
- 能够测试手动测试无法进行测试的模块
- 测试具有重复性、一致性和复用性
自动化测试的缺点:
- 比较依赖测试质量
- 不能取代手动测试,查出的缺陷比手动测试更少
- 工具本身不具备想象力
手工测试的优点:
- 可以充分发挥测试人员的审美能力和逻辑推理能力
- 可以依据测试人员的经验和对错误的猜测能力
手工测试的缺点:
- 重复的手动测试代价高
- 依赖于测试人员的能力
请你说一下黑盒白盒
黑盒测试,也称为功能测试,主要是针对程序的功能进行测试,而不关注程序内部的实现逻辑。
白盒测试,又称结构测试,对程序内部的逻辑结构进行测试
什么是HTTP协议?HTTP状态码包含哪些?常用的请求包含哪两种?http和https区别是什么?
答:1.HTTP协议是超文本传输协议,是指计算机通信网络中两台计算机实现通信所必须共同遵守的规定或规则。
2.HTTP的状态码有:100-199,200-299,300-399,400-499,500-599。
3.常用的请求有post请求和get请求。
A、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
B、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
C、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全
软件测试的流程和缺陷流程?
答:1.软件测试流程:产品立项、确认测试需求分析、写测试计划、写测试用例、开发转测试、搭建项目环境、执行测试、提单/回归测试、写测试报告、写帮助文档、产品发布、产品维护。
2.缺陷处理流程:1.讲缺陷的详细信息录入缺陷管理系统,并分配给对应的开发人员 2.如果遇到一些难以再现的缺陷,在开发人员修正过程中配合开发人员进行 Bug 的再现。 3.开发人员修正 Bug 后,会在缺陷管理系统中将修正后的 Bug 状态更改,通常为 Fixed 状态。 4.新版本发布后,测试人员会讲 bug 状态已经更改为 Fixed 的 Bug 进行回归测试。如果测试通过,则将 该 Bug 关闭,如果仍未通过,则将该 Bug 从 Fixed 更改为 Reopen 状态,继续让开 发人员来修正。并等 待下一个新版本发布后的二次回归测试。
缺陷来源是什么?缺陷的分类有哪些?什么是验收测试?
1.需求2结构3设计4编码5测试
-
功能性缺陷:功能实现不符合需求或设计要求。
-
性能缺陷:性能方面存在问题,例如响应时间过长、资源利用率过高等。
-
界面缺陷:用户界面存在问题,例如布局不合理、美观度不足、交互体验差等。
-
兼容性缺陷:在不同的操作系统、浏览器、设备等存在兼容性问题。
-
安全性缺陷:存在安全漏洞,可能被攻击者利用,包括数据泄露、权限提升、非法访问等。
-
其他:标准规范相关、安装部署问题等。
3.验收测试:第三方进行的确认软件满足需求的测试。
软件测试结束标准是什么?软件测试归档文件有哪些?
答:1.所定的测试范围全部都覆盖到
2.所报的缺陷全部被解决
3.测试用例全部被执行
归档;1.测试计划;2.测试用例;3.测试文档;4.绘制思维导图;5.缺陷跟踪记录
文件目录操作命令
ls 显示文件和目录列表
mkdir 创建目录
cd 切换目录
touch 生成一个空文件
echo 生成一个带内容文件
cat、tac 显示文本文件内容
cp 复制文件或目录
rm 删除文件
mv 移动文件或目录、文件或
mv aaa bbb 将aaa改名为bbb
find 在文件系统中查找指定的文件
-name 文件名
wc 统计文本文档的行数,字数,字符数
grep 在指定的文本文件中查找指定的字符串
rmdir 删除空目录
tree 显示目录目录改名树
pwd 显示当前工作目录
ln 建立链接文件
more、less 分页显示文本文件内容
Head、tail分别显示文件开头和结尾内容
缺陷的等级:
致命、严重、一般、轻微
软件测试生命周期:
测试计划--测试设计--测试开发--测试执行及结果评估
测试流程:
1.需求分析
2.测试计划
3.测试用例
4.测试执行
5.Bug提交/跟踪
6.测试报告
测试计划包括哪些内容?
包含了产品概述、测试策略、测试方法、测试区域、测试配置、测试周期、测试资源、测试交流、风险分析等内容。
测试用例的组成元素
1.项目/模块;
2.用例编号;
3.用例名称;
4.优先级;
5.环境配置;
6.前置条件;
7.操作步骤;
8.预期结果;
9.测试结果;
Http和https的默认端口是什么?
Apache server (Http)的默认端口是80;
SSL (Https)的默认端口是443。
请写出下面基本命令操作:
修改文件夹A的权限为可执行
chmod 命令
直接用数字代替也可以
chmod 777 三个数字位置分别代表 属主属组其他人
7 拆分开来就是 4+2+1 4代表读 2代表写 1代表执行
列出所有正在运行的进程
# ps aux | less
查看服务器的机器配置(CPU、内存、硬盘大小)
查看: cat /proc/cpuinfo
把一个文件夹打包压缩成.tar.gz 的命令,以及解压拆包.tar.gz 的命令?
tar -zcvf xxx.tar.gz file
tar -zxvf xxx.tar.gz
将文件a改名为b
mv a b
保存当前文件
:w
退出当前编辑文件
不存盘强制退出
:q!
保存当前编辑的文档并退出
:wq
请写出cookie和session区别?
cookie机制采用的是在客户端保持状态的方案
session机制采用的是在服务器端保持状态的方案。
软件测试结束的标准是什么?
1.测试用例执行完成。
2.提交的Bug全部修复
3.测试范围全覆盖
黑盒测试和白盒测试是软件测试的两种基本方法,请分别说明各自的优点和缺点
答:黑盒测试的优点有:
1)比较简单,不需要了解程序内部的代码及实现;
2)与软件的内部实现无关;
3)从用户角度出发,能很容易的知道用户会用到哪些功能,会遇到哪些问题;
4)基于软件开发文档,所以也能知道软件实现了文档中的哪些功能;
5)在做软件自动化测试时较为方便。
黑盒测试的缺点有:
1)不可能覆盖所有的代码,覆盖率较低,大概只能达到总代码量的30%;
2)自动化测试的复用性较低。
白盒测试的优点有:
帮助软件测试人员增大代码的覆盖率,提高代码的质量,发现代码中隐藏的问题。
白盒测试的缺点有:
1)程序运行会有很多不同的路径,不可能测试所有的运行路径;
2)测试基于代码,只能测试开发人员做的对不对,而不能知道设计的正确与否,可能会漏掉一些功能需求;
3)系统庞大时,测试开销会非常大。
根据自己的理解什么是测试用例和测试规程,设计一个测试用例应当从哪几方面考虑?
答:狭义的讲,一个测试用例就是测试人员用以测试被测软件的某个特性或特性组合的一组数据。这组数据可能是从用户处得来的实际的一组数据,也可能是测试人员专门设计出来的测试软件某些功能的一组数据。
测试规程就是详细的对测试用例设计方法、测试方法、测试工具、测试环境和测试数据进行描述的文档,还可以包括能把某个或某一组测试用例应用到被测软件上完成某项测试的一系列的操作步骤。
设计测试用例应当从以下几方面考虑:边界值,等价类划分,有效/无效值等。
具体场景下的一些功能测试
文件导出功能测试用例:
一:文件导出(Test Case)
1、验证导出文件名长度,根据具体情况而定
2、验证导出文件为空的情况
3、验证导出文件名为特殊字符的情况
4、验证导出全部资料的情况,导出的信息是否正确
5、验证导出部分资料的情况,导出的信息是否正确
6、验证导出大量数据时的时间是否在合理的时间范围内
7、验证导出目的磁盘空间已满的情况下,导出是否有友好的处理方式
8、验证导出目的的文件夹为只读的情况下,导出时是否有友好的的提示信息
二:上传图片(Test Case)
对于上传的文件,假设系统要求上传的文件为jpg或gif格式图片,大小为<=5M的文件,我们在设计测试用例时,应该从以下几个方面进行考虑:
1:文件类型正确,文件大小合适的校验
例如:上传一种jpg或gif的格式图片,文件大小为4.9M,结果为上传成功
2:文件类型正确,文件大小不合适的校验
例如:上传一种jpg或gif的格式图片,文件大小为5.1M,提示为:“上传的附件中大小不能超过5M”
3:文件类型正确,文件大小合适的校验
例如:上传一种jpg或gif的格式图片,文件大小为5M,结果为上传成功
4:文件类型错误,文件大小合适的校验
例如:上传.doc;.xls;ppt;bmp;jpeg;psd;tiff;tga;png;swf;svg;pcx;dxf;wmf;emf;lic;eps;.txt等格式文件,文件大小合适,提示“只能上下jpg或gif格式图片”
5:文件类型和文件大小合法,上传一个0kb的图片,提示信息:“请重新上传文件,或者是不能上传0kb的图片”
6:文件类型和文件大小合法,上传一个正在使用中的图片(即打开该图片,在上传该图片),上传成功
7:文件类型和文件大小合法,手动输入一个存在的图片地址,点击上传,上传成功
8:文件类型和文件大小合法,手动输入一个不存在的图片地址,点击上传,提示:“请正确选择要上传的文件”
9:文件类型和大小都合法,手动输入一个存在的图片名称,点击上传,一般情况下系统会提示:“请正确选择要上传的文件的路径”
三:文件导出(Test Case)
1、验证导出文件名长度,根据具体情况而定
2、验证导出文件为空的情况
3、验证导出文件名为特殊字符的情况
4、验证导出全部资料的情况,导出的信息是否正确
5、验证导出部分资料的情况,导出的信息是否正确
6、验证导出大量数据时的时间是否在合理的时间范围内
7、验证导出目的磁盘空间已满的情况下,导出是否有友好的处理方式
8、验证导出目的的文件夹为只读的情况下,导出时是否有友好的的提示信息
---------------------------------------------------------------
四、文件上传(Test Case):
***页面***
1、页面美观性、易用性
2、按钮文字正确性
3、说明文字是否正确
4、正确/错误的提示文字是否正确
5、提示当前位置是否正确,并且和其他页面保持一致格式
6、必添项的标示是否正确
***功能***
1、路径是否可以手工输入
2、上传文件超过最大值是在提交前校验还是提交后校验
3、上传文件格式是否全部支持
4、上传文件是否支持中文名称
5、文件名称的最大值、最小值、特殊字符(包含空格)、使用程序语句是否会对其造成影响、中文名称是否能正常显示
6、对于是否发布的设置是否正确
7、简介最大值、特殊字符、使用程序语句是否会对其造成影响
***按钮***
1、保存按钮
· 对输入项有错误提示后光标提示是否正确
· 对输入项的错误提示是否描述正确
· 对必添项是否进行校验
2、清空按钮
· 是否清除了填写内容
3、返回按钮
· 是否返回上一页面
五、文件下载(Test Case):
***页面***
1、当前位置的提示是否现实正确
2、页面美观性、易用性
3、按钮文字是否正确
4、说明性文字是否正确
5、正确/错误的提示文字是否正确
***功能***
1、右键另存为是否可以正确下载文件,并且记录下载次数
· 工具下载是否正确,并且记录下载次数
2、单击下载是提示下载还是在页面打开
· 直接打开是否显示正确
· 对于本机没有安装工具的文件是否能够打开,是否能给出正确的提示
· 对于直接在页面内打开的内容是否能够显示正常,页面美观性
· 保存到本地是否能正确显示
· 取消下载是否会纪录下载次数
3、下载次数是否被正确记录
4、后台没有发布的文件是否在前台可以找到并下载
5、后台设置了下载权限的文件是否可以被正确看到、是否可以下载
***按钮***
返回按钮是否回到上一页面
再补充一些其他的常见测试点:
1、上传文件名测试,检查不符合文件名规范
2、上传文件名类型测试,检查不同文件类型是否支持如:.rar,.mp3,avi等
3、上传文件大小测试,检查不同文件规格大小如:0字节文件, 1kb, 200kb, 2mb, 20mb,2g等
4、上传文件容错性测试:如检查覆盖同文件操作;
5、上传文件异常情况测试:如硬盘空间不足
6、上传文件速率性能测试:检查上传不同的文件在不同的网络环境响应速度,及系统资源占用
7、上传文件安全性测试:如上传常见木马
8、上传文件易用性测试:检查上传文件操作是否让用户易于学习和理解使用等
9、上传文件特性测试:如果支持如断点续传等一些特性
10、上传文件后,检查是否与源文件一致,包含目录设置等
11、上传文件,是否能打开等
工作中印象深刻的 BUG
我们换位思考一下,面试官问这个问题的目的是什么?
其实,它并不关心你描述的这个bug是否真的有价值,或有多曲折离奇?他只是:
了解你平时工作中的测试能力
所以,这就要求的你平时工作中遇到bug时试着自己去定位,定位bug的过程远比你的单纯的执行测试用例有“价值”(自我技能提高的价值),在定位bug的过程中你需要掌握和运用更多知识。
另外,建议你平时养成总结的好习惯,发现的bug,开发解决了,最好问问他原因以及解决的方法,这样再遇到类似问题时,自己也可以试着定位解决。遇到难解决的bug,也可以把最终的解决过程记录下来。(这不是就有素材了)
举几个例子:
(1)有的用户在系统成功上传文档之后,点击文档的名称没法进行预览。后面是开发做了优化,发布后用户才能使用了。(这个bug是我第一次真正意识到兼容性测试的重要性,也增加了我对兼容性测试的认识)
(2)我遇到的一个就是:
需求:做一排单选功能,能实现单选的功能
开发:做的是点击单选按钮,能选中该内容
测试:也是这么测的
上线后,领导说难用,很难点中那个小圆点。
原因:只实现了选中单选小圆圈,并且圆点点很小,有选中的作用,没有做成点击该行,即可选中。这个问题貌似大家都实现了需求,却没有很好的考虑易用性。
项目中负责的模块?并说一下你设计的用例?(包括功能和接口, 考验基本功)
怎么设计功能测试用例
1、显式功能性需求
对于显式功能性需求我们最长用到的方案主要有三种:
等价类划分法
边界值分析法
错误推断法
1.1、 等价类划分法
我们如果想测试一个功能的最傻的办法就是穷举。比如说一个密码验证功能,我们把所有的可能的密码都尝试一遍,自然就可以覆盖掉到所有的问题与可能。但是这种穷举的方法明显是做不到的。因此我们要用到等价类划分法。
等价类划分法就是说我们将所有可能的输入数据或操作分为多组不同的子集,每个子集中的数据与操作对发现程序中的潜在错误都有同等的效应。这样我们就将一个子集称为一个等价类。比如输入各种与用户名不相符的密码,是一个等价类;输入各种不存在的用户名是另一组等价类。这样在测试的时候,我们只要在每个等价类中选择一个典型操作,就可以达到较好的测试覆盖度。
等价类还会分为有效等价类和无效等价类两种。有效等价类指的是合理的、有意义的输入,主要用来验证功能是否实现了某个功能。无效等价类与有效等价类相反,指的是无意义的,超过软件规格的,不合理的输入,主要用来测试功能的健壮性,看是否考虑了如何处理不合理的情况。
1.2、边界值分析法
在我们在测试合理与不合理的数据的时候,往往最容易出现问题的就是合理与不合理的边界,这时我们就需要使用边界值分析法了。边界值分析法,就是对恰好大于、小于和等于边界的值进行测试,来验证程序是否做到了合适的处理。边界值分析法一般是作为等价类的补充,来加强测试功能实现的程度与健壮性保障的程度,是否符合规格。
1.3 错误推测法
在测试的时候就算我们使用了等价类划分法和边界值分析法,也很可能会遗漏一些需求中没有清晰提出,技术上比较隐蔽的错误。这种错误就需要测试人员通过已有的经验、对功能实现可能的方法的理解或直觉,来推测出软件中可能存在的各种错误与场景,然后编写测试用例来进行验证,这就叫做错误推测法。比如,登录超时后,某个需要权限操作的功能在使用的时候,是否跳到了登录页,还是直接报错,甚至说依旧可以操作。这种错误是需要测试人员一定的经验、技术积累与直觉的。
虽然说功能性测试往往是黑盒测试,但是如果测试工程师对于功能的实现有一定的理解——比如说是否用了缓存、是否使用了消息队列、是否某个地方会消耗极大的性能等等——将会更容易的推断出哪些地方会产生错误。
2、非功能性需求
在测试工程师测试完显示功能需求之后,还要考虑到系统的非功能性需求。这种需求可能在文档中有明确提到,也可能并没有明确的提出。但是我们的测试工程师在测试的时候却必须要关注到。
2.1 兼容性测试
兼容性指的是开发的软件是否在各种平台都可以使用。比如我们开发一个网站,我们的用户可能会用到各种不同的浏览器访问我们的网站。这样我们在测试的时候,就不能只考虑到某一种浏览器。我们需要考虑到多种浏览器的兼容性。
兼容性测试可能会涉及到:
不同厂商的浏览器及相同厂商不同版本的浏览器。
不同的设备终端及操作系统
不同的屏幕分辨率
不同的用户软件环境(比如是否禁用了cookie、是否可以连接外网等)
2.2 安全性测试
我们的测试人员还需要关注到开发软件的安全性。这涉及到:
用户隐私信息是否加密
需要权限的资源是否有没有权限也可以被拿到的风险
会不会受到跨站脚本的攻击
会不会受到sql注入攻击
等等
2.3 压力测试
测试人员也需要考虑的软件是否能够承载其需求所需的压力,例如:
软件是否能在合理的时间内响应用户行为
软件是否可能承载足够的请求
软件在处理大数据量时会不会产生资源锁死
等等
怎么设计接口测试用例
主要从四个方面来设计接口用例:功能,业务逻辑,异常,安全;
一、功能:
1)功能是否正常;
2)功能是否按照接口文档实现
举例:比如博客园添加随笔,需要登录才能添加。也就是业务要求不支持游客添加随笔功能,如果设计一个没有登录的用户,然后去测试添加随笔接口,结果接口能添加到随笔,说明功能不正常,不符合需求和接口文档描述。
二、业务逻辑:是否依赖业务;
举例:该接口调用之前,需要调用登录接口,如果不登录也能请求数据,不符合业务逻辑。
三、异常:参数异常和数据异常
1)参数异常:关键字参数,参数为空,多,少参数,错误参数
2)数据异常:关键字数据,数据为空,长度不一致,错误数据
举例:不管数据异常还是参数异常,测试点差不多,一个参数有key和value,key表示参数,value表示数据。第一,看看参数和数据能不能支持关键字,例如Java中的保留关键字等等。第二个就是参数和数据都为空,看看是否做了判断。第三个,参数多和少,例如有两个参数的接口,你需要设计一个三个参数的用例,一个只有一个参数的用例。数据那边长度不一致,例如设计很长的字符串是否支持,因为数据库创建表过程都设置好了每个字段的长度。输入错误的参数和数据,例如故意输出单词等等。
四、安全测试用例设计:
1)cookie:有cookie才能获取数据,如果不带cookie还有信息返回,说明有问题
2)header:正常接口带header信息,删除header看是否能够返回数据。
3)唯一识别码:app手机识别码,一般是唯一的。
安全测试主要从上面三点检查。第三个是唯一识别码,主要是指app上手机的识别码,一般很少用到,除非很严格的接口测试,例如银行app登录,需要指纹,而指纹来源手机,一般有一个手机识别码判断过程。
软件测试的概念
软件测试是指:通过执行或操作软件/程序,找出软件缺陷,以衡量软件质量,并评估软件是否达到设计的要求的过程。(利用一些技术手段找出程序的缺陷,确保软件的质量)
测试人员在软件开发过程中的任务是什么?
答:a、寻找Bug;
b、避免软件开发过程中的缺陷;
c、衡量软件的品质;
d、关注用户的需求。
总的目标是:确保软件的质量。
当开发员与你在bug问题上发生争执该怎么办?
答:1、自检:对照需求文档重新确定这个到底是不是bug.
2、如果是,写清楚,将实际的bug问题单写给开发员与其沟通。
3、沟通无果,找领导或者产品需求人员协商。
软件测试过程模型有哪些?
a、v模型
b、w模型
c、H模型
d、X模型
e、前置模型
遇到不可重现的bug,该怎么办?
a、回忆操作步骤,尽可能尝试重现。
b、提交bug与开发沟通。
c、后续回归测试时着重关注
d、如果无法重现,也没有任何信息,可以让开发增加监控日志,以便于下次出现问题时,可以捕获到相关信息以便于进行分析并定位问题。
e、如果问题比较严重,但无法重现,可以让开发检视自己的代码,做代码审查,评估代码是否有问题。
如何避免缺陷重复提交的问题?
解答:a、尽量避免两个人同时测试同一模块。
b、即使两个人同时测试同一模块,必须在提交缺陷时一定用系统查一下是否有类似缺陷
已经被提交。
缺陷bug单包含哪些元素(内容 )
1.缺陷模块 2.缺陷编号 3.缺陷标题 4.缺陷等级 5.前置条件 6.操作步骤 7.缺陷结果 8.预期结果
请你分别介绍一下单元测试、集成测试、系统测试、验收测试、回归测试
单元测试:针对最小模块(单个代码块)的测试,一般由开发人员进行白盒测试
集成测试:针对多个模块(代码块)进行测试,验证各个模块之间的接口是否正常
系统测试:对整个系统进行测试,确保整个系统工作能顺利进行
验收测试:分为alpha测试和beta测试,甲方按照用户需求进行测试
首先alpha测试和beta都属于验收测试,这两种测试都需要用户参加,且都不能由程序员和测试员执行。广义上来讲, α测试是“内测”, β测试是“公测”。
alpha测试:是由用户在开发者的场所来进行的,在一个受控的环境中进行
beta测试:由软件的最终用户在一个或多个用户场所来进行的,开发者通常不在现场,用户记录测试中遇到的问题并报告给开发者,开发者对系统进行最后的修改,并开始准备发布最终的软件。
回归测试:是对已修改过缺陷的程序进行重复测试,以发现在这些变更后是否有新的缺陷引入或被屏蔽。
有了“黑盒”测试为什么还要“白盒”测试?
因为黑盒测试只能观察软件的外部表现,它是不关注软件内部逻辑实现的,即是软件的输入输出都是正确的,却并不能说明软件就是正确的,程序有可能是用错误的运算方式得出正确的结果,例如“负负得正,错错得对”,只有白盒测试才能发现真正的原因。白盒测试能发现程序里的隐患,像数据溢出、内存泄漏、误差累计问题。在这方面,黑盒测试存在严重的不足。
深度剖析常见的黑盒测试方法:
a、等价类划分法是把程序的输入域划分成若干部分(子集),然后从每个部分中选取少数代表性数据作为测试用例。每一类的代表性数据在测试中的作用等价于这一类中的其他值。
等价类又分为有效等价类和无效等价类。
b、边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。
c、错误推测方法的基本思想:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例。
d、因果图法是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况。
e、判定表由四部分组成:条件桩、条件条目、动作桩、动作条目。
f、正交表法:是从大量的实验点中挑出适量的、有代表性的点,应用正交表,合理地安排实验的一种科学的实验设计方法。
g、场景法是指根据不同的场景,设计符合需求的用例。
输入三个整数,判断三个整数能否构成一个三角形,请用黑盒测试方法中的一种设计出相应的测试用例并详细说明所使用的黑盒测试方法
解答:等价类划分法:三角形三条边A、B、C的数据类型不同
有效等价类:(输入3个正整数、输入3个正小数)
1、两数之和大于第三数,如A<B+C;B<C+A;C<A+B
2、两数相等,如A=B或B=C或C=A
3、三数相等,如A=B=C
4、三数不相等,如A!=B,B!=C,C!=A
无效等价类:
1、输入为空
2、输入为负整数
3、输入为非数字
4、输入为少于三个数
5、输入为特殊字符
Test Case按照优先级分类:
1、优先级别高 2、中等优先级别 3、一般优先级别 4、低等级别
单元测试依据是详细设计说明书,集成测试依据是概要设计说明书
在您以往的工作中,一条软件缺陷(或者叫Bug)记录都包含了哪些内容?如何提交高质量的软件缺陷(Bug)记录?
答:一条Bug记录最基本应包含:缺陷编号、缺陷模块、缺陷标题、缺陷级别、前置条件、操作步骤、缺陷结果、预期结果等等;要有效的发现Bug需参考需求以及详细设计等前期文档设计出高效的测试用例,然后严格执行测试用例,对发现的问题要充分确认肯定,然后再向外发布如此才能提高提交Bug的质量。
Linux下如何创建一个文件名为aa.txt的文件,如何在aa.txt中写入hello i love software?如何删除目录文件?如何修改文件名aa修改bb?
答:1 ,创建aa.txt文件:touch aa.txt 2,先输入命令vim aa.txt,回车后按i键输入 hello i love software 然后按esc键,最后按:wq!保存并强制退出。3,删除目录文件:rm -rf 目录文件名 4,把aa修改为bb:mv aa bb
写出常用的Linux命令,不少于20个
cd ls pwd cat mkdir touch mv rm wc cp ps netstat vim tar rmdir find echo less more head tail
什么是冒烟测试?
冒烟测试;一个初始化的快速的测试工作以决定软件测试者新发布的版本测试是否可以执行下一步的,正规测试如果软件或者新发布的版本每5分钟系统冲突使系统陷于泥潭说明该软件不够健全目前不具备下一步的条件。
MySQL中的内连接和外连接是什么?
答:内连接:select * from 表1 inner join 表2 on 表1.id=表2.id;
1:右外连接:select * from 表1 right join 表2 on 表1.id=表2.id;
2:左外链接:select * from 表1 left join 表2 on 表1.id=表2.id
让你测试一个网站,你该如何测试功能性测试:
界面测试:界面是否设计美观,布局是否合理
功能测试:是否正常跳转
性能测试:
安全测试:
兼容性测试:
如何区分bug是前端还是后端问题
看页面展现样式问题以及页面交互之后接口请求路径请求参数请求方法是否有问题,若有则是前端问题,若后端返回业务处理不正确,响应的数据不正确等,则是后端问题
你是怎么理解测试的?
测试岗位在有些公司是没有的,他们是技术负责测试工作,其实每一个人都是有“完美心理”的,技术测试自己程序,找问题的角度肯定不会太细致,测试可以从专业角度用户角度全方位体验程序的完整性,使用专业工具辅助测试,提高项目质量。
觉得测试最重要的能力是什么?
善于发现问题,需要有良好的沟通协调能力,测试平时需要去督促督促技术修改进度,也需要有耐心,对程序一轮一轮测试验证。
测试团队的人数,以及在测试团队之中的角色
一般测试人数都是以团队为结构 4个开发1个测试 负责编写测试用例 测试界面、接口、功能测试工作
测试用例怎么编写的
测试用例包含:测试模块/项目、用例编号、用例标题、优先级、环境准备、前置条件、操作步骤、预期结果、测试结果
比如我最近的商品模块,我会先写界面元素与设计稿一致,添加商品名称长度、商品描述长度、价格小数点后两位纯数字等,对应验证给出提示“商品名称不能超过30个字符”等
你们APP支持第三方登录 微信如果点了没反应是怎么回事 也没有跳到微信界面
A、校验是否已做该功能 排除功能缺失
B、fiddler抓包查看请求参数,如果请求参数可以响应参数不对那就是后端问题;如果请求参数可 以,响应参数也是对的那就是前端问题没有做好对应处理
C、查看是不是所有手机都会出现这个情况还是个别机型手机,做好兼容排查
如果线上发现了一个最为严重的bug怎么处理
先审视bug的严重程度是否影响大部分用户使用,如果是权衡选择版本回退方案,如果是个别的紧急迭代一个版本上去 ,bug解决后分析问题发生的原因避免下次发生类似错误。
怎么区分缺陷的严重程度
致命(1级bug):主流程的阻碍(比如商品无法购物),金额上的不对、程序的不响应都是致命问题
严重(2级bug):二级页面的子功能缺陷,比如修改手机号修改不成功
一般(3级bug):界面缺陷样式与设计稿不符合,长度的限制、提示语的修改等
建议(4级bug):建议加一个xx功能 ,或者建议退出登录按钮可以放在个人资料中,这样避免频繁退出
如果一个开发不配合你,你怎么解决与开发之间的冲突
首先看bug的等级是什么样的,如果是致命和严重的肯定需要和他立即进行沟通,也要了解他不处理的原因,如果是单纯的不想处理这个就属于工作中的怠慢,如果是手头中的项目优先级高于我这个,那问下大概多久可以处理完再处理我这个。
说说什么是测试环境,你们公司有哪些环境和服务器
环境分为:测试环境(开发使用的用来做测试的)、UAT环境(防止上线后直接在线上修改模拟线上的一个环境)、生产环境(线上用户使用的一个环境)
测试环境和UAT环境一般是一台或者两台服务器
生产环境会根据用户的使用进行增加,一般不会低于两台
怎么快速定位bug
fiddler抓包定位前后端缺陷
安卓和IOS怎么测试
两者之间的区别
1,操作系统:android操作系统较多,IOS较少只能升级不能降级,并且新的版本的资源库不能完全兼容旧版中系统中的应用,如果低版本应用调用了高版本的资源库,会导致系统崩溃
2,安装卸载测试:应用发布后:下载安卓包的平台和渠道很多:豌豆荚、应用宝、360手机助手等;IOS 主要有 App store、iTunes
本地测试:安卓手机可以通过扫码或者直接安卓APK包安装测试包;IOS要安装测试包必须绑定手机的uuid才可以安装ipa测试包
3,按键操作测试:安卓手机针对每一款手机有不一样的操作;苹果手机操作习惯单一
4,开发语言:虽然同样的业务安卓和IOS的展示形式和业务一致,但是底层全完不一样。安卓的应用是有java语言实现的;iOS用objectC实现
哪些功能用到接口测试? 接口测试作用是什么
一般接口测试用于移动端APP、H5、小程序这些
接口作用:
1.1一般的功能测试,覆盖不到多种情况。
1.2从安全角度考虑,只依赖于前端的校验不能满足要求,需要服务端也要做校验,比如:充值的界面,充值金额输入框不能输入负数,测试时,我们要确保服务器也做了这个校验。有一万种手段绕过前端验证。
1.3当小程序的代码不更新,而服务端代码更新时,直接通过接口自动化测试就能快速知道是否影响APP的功能。
1.4很多情况下是没有界面的,只提供接口功能,没法通过界面的方式进行测试。
电商购物流程是怎么样的
添加商品管理商品到选购商品,商品异常场景,下单支付,判断支付异常场景,支付成功后生成订单 ,订单取消,支付以及发货等
Web、APP、小程序测试有什么区别
Web测试:功能测试:刷新、回退、前进、翻页、页面加载、url
兼容测试:不同的浏览器内核进行测试(IE、chrome、Firefox)
性能测试:web项目需监测响应时间、CPU、内存
app测试:界面测试:分辨率,屏幕尺寸,兼容性
设备系统:Android/iOS 多少系统(安卓还要看不同手机)
专项测试:
(1)干扰测试:中断,来电,短信,关机,重启
(2)弱网测试:2g、3g、4g,wifi网络状态差
(3)安装、更新、卸载
小程序测试:开发版本二维码、体验版本二维码、线上版本,小程序更新不需要手动更新自动更新
怎么看待加班这个事情
加班分为自己工作效率不佳导致的加班和项目赶进度时候的必要加班,如果是我自己个人原因我会找出问题避免这样的事情发生,如果是发版本迭代 加功能这些必要的加班我是可以接受的。
你的优势是什么?你的缺点是什么?你的职业规划是什么?
我个人比较细心有耐心,也会愿意尝试新的事物,职业规划是想往自动化方向发展的
缺点的话可能是性格吧,有的时候会急躁一些的
你有什么需要问我的?
请问下目前什么贵公司的项目都有哪些,如果我有幸进去的话负责的是什么项目
你什么时候可以入职?
入职时间大概在两三天左右,不能推迟太久容易失去机会,以拿到offer为主,拿到offer后才有底气去看别的公司,如果在时间差的这几天还是没有找到那么就去这家有offer的,所以在谈的时候每一个offer都当做自己会去,不要留遗憾。到时候去了结果觉得自己当时为什么不沟通清楚
工作中印象深刻的 BUG
我们换位思考一下,面试官问这个问题的目的是什么?
其实,它并不关心你描述的这个bug是否真的有价值,或有多曲折离奇?他只是:
* 了解你平时工作中的测试能力
所以,这就要求的你平时工作中遇到bug时试着自己去定位,定位bug的过程远比你的单纯的执行测试用例有“价值”(自我技能提高的价值),在定位bug的过程中你需要掌握和运用更多知识。
另外,建议你平时养成总结的好习惯,发现的bug,开发解决了,最好问问他原因以及解决的方法,这样再遇到类似问题时,自己也可以试着定位解决。遇到难解决的bug,也可以把最终的解决过程记录下来。(这不是就有素材了)
举几个例子:
(1)有的用户在系统成功上传文档之后,点击文档的名称没法进行预览。后面是开发做了优化,发布后用户才能使用了。(这个bug是我第一次真正意识到兼容性测试的重要性,也增加了我对兼容性测试的认识)
(2)我遇到的一个就是:
需求:做一排单选功能,能实现单选的功能
开发:做的是点击单选按钮,能选中该内容
测试:也是这么测的
上线后,领导说难用,很难点中那个小圆点。
原因:只实现了选中单选小圆圈,并且圆点点很小,有选中的作用,没有做成点击该行,即可选中。这个问题貌似大家都实现了需求,却没有很好的考虑易用性。
如何设计各种用例,比如滴滴打车、微信聊天、二维码
现场设计场景,说出查询服务端日志的命令?
head命令
① Head -n -5 test.log:显示日志文件的开头5行;
② Head -c 20 test.log:显示文件前20个字节;
tail命令
① tail test.log:显示最后10行内容,tail默认显示最后10行内容;
② tail -n 20 test.log:-n命令显示指定的行数;表示查看文件最后20行内容;
③ tail -f test.log:-f实时显示日志内容(默认10行,相当于添加参数-n 10);
④ tail -n +10 test.log:从第10行开始显示内容;
⑤ tail -r -n 10 test.log:逆序显示最后10行内容;
cat命令
① cat -n file:输出file文件中的全部内容,并且对file文件进行从 1 开始的编号;
② cat -n text.txt > python.txt:把text.txt的文件内容加上行号后输入到python.txt中;
③ cat log.txt | grep ‘qq’:在log日志中查找qq字符;
④ cat log.txt | grep ‘qq’-A 5:在log日志中查找qq字符,并显示所在行之后5行;
⑤ cat log.txt | grep ‘qq’ -B 5:在log日志中查找qq字符,并显示所在行之前5行;
⑥ cat log.txt | grep ‘qq’ -C 5:在log日志中查找qq字符,并显示所在行前后5行;
⑦ cat log.txt | grep -v‘qq’:在log日志中查找排除qq字符所在的行;
grep命令
① grep qq /home/test:在/home/test文件中查找单词qq;
② grep qq /home/test /home/test1:在多个文件中查找单词qq;
③ grep -l qq /home/test /home/test1:使用-l参数,列出包含指定模式的文件的文件名;
④ grep -n qq /home/test:使用-n参数,在文件中查找指定模式并显示匹配行的行号;
⑤ grep -v qq /home/test:使用-v参数,输出不包含指定模式的行;输出/home/test文件中不包含单词qq的行;
⑥ grep ^qq /home/test:Bash脚本将 ^ 符号视作特殊字符,用于指定一行或者一个单词的开始。例如输出/home/test文件中所有以“qq”开头的行;
⑦ grep -i qq /home/test:使用-i参数,在查找时忽略字符的大小写;在/home/test文件中查找“qq”单词;
⑧ grep -e qq -e ww /home/test:使用-e参数,一条grep命令中在/home/test文件中查找‘qq和‘ww单词;
⑨ grep -B 4 qq /home/test:使用-B参数输出匹配行的前4行;
⑩ grep -A 4 qq /home/test:使用-A参数输出匹配行的后4行;
11 grep -C 4 qq /home/test:使用-C参数输出匹配行的前后各4行;
12 grep test *file:查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行;
13 grep -r update /home:以递归的方式查找符合条件的文件。例如,查找指定目录/home及其子目录(如果存在子目录的话)下所有文件中包含字符串"update"的文件,并打印出该字符串所在行的内容;
14 grep -v test *test*:反向查找。前面各个例子是查找并打印出符合条件的行,通过"-v"参数可以打印出不符合条件行的内容。查找文件名中包含 test 的文件中不包含test 的行;
more命令
① more +3 test.log:从第三行开始显示内容;
② more -4 test.log:将日志内容设置为每屏显示4行;
③ more -5 +10 test.log:一屏5行,从第10行开始显示;
④ more -5 +qq test.log:先找到qq字符串,然后在这个字符串所在行的前两行开始显示;
less命令
① less -n test.log:查看文件并显示行号;
② less +10g test.log:定位到第10行;
Vim命令
补充:
跟tail功能类似的命令还有:
cat 从第一行开始显示档案内容。
tac 从最后一行开始显示档案内容。
more 分页显示档案内容。
less 与 more 类似,但支持向前翻页
head 只显示前面几行
tail 只显示后面几行
n 带行号显示档案内容
od 以二进制方式显示档案内容
输入网址后,发生了什么
1.DNS解析
DNS解析的过程就是寻找哪台机器上有你需要资源的过程,寻找的过程遵循就近原则。
输入一个网址并按回车的时候浏览器会根据输入的URL去查找对应的IP,具体过程如下:
(1)首先是查找浏览器缓存,浏览器会保存一段时间内访问过的一些网址的DNS信息,不同浏览器保存的时常不等。
(2)如果没有找到对应的记录,这个时候浏览器会尝试调用操作系统缓存来继续查找这个网址的对应DNS信息。
(3)如果还是没找到对应的IP,那么接着会发送一个请求到路由器上,然后路由器在自己的路由器缓存上查找记录,路由器一般也存有DNS信息。
(4)如果还是没有,这个请求就会被发送到ISP(注:Internet Service Provider,互联网服务提供商,就是网络运营商,中国电信中国移动等),ISP也会有相应的ISP DNS服务器,就是本地DNS服务器,请求的域名基本上都能在这里找得到。
(5)如果还是没有的话, ISP的DNS服务器会将请求发向根域名服务器进行搜索。根域名服务器就是面向全球的顶级DNS服务器,共有13台逻辑上的服务器,从A到M命名,真正的实体服务器则有几百台,分布于全球各大洲。
(6)如果到了这里还是找不到域名的对应信息,那只能说明一个问题:这个域名本来就不存在,它没有在网上正式注册过。或者域名过期了。
这也就是为什么有时候打开一个新页面会有点慢,因为如果本地没什么缓存,查找域名的过程要这样递归地查询下去,查找完还要一层层的向上返回。例如"mp3.baidu.com",域名先是解析出这是个.com的域名,然后跑到管理.com域的服务器上进行进一步查询,然后是.baidu,最后是mp3, 所以域名结构为:三级域名.二级域名.一级域名。
所以DNS根据域名查询IP地址的过程为:浏览器缓存 --> 操作系统缓存 --> 路由器缓存-->本地(ISP)域名服务器缓存 --> 根域名服务器。
2.进行TCP连接
浏览器终于得到了IP以后,向服务器发送TCP连接,TCP连接经过三次握手。
3.浏览器发送HTTP请求
浏览器和服务器建立连接以后,浏览器接着给这个IP地址给服务器发送一个http请求,方式为get,例如访问www.baidu.com。其本质是在建立起的TCP连接中,按照HTTP协议标准发送一个索要网页的请求。
这个get请求包含了主机(Host)、用户代理(User-Agent),用户代理就是自己的浏览器,它是你的"代理人",Connection(连接属性)中的keep-alive表示浏览器告诉对方服务器在传输完现在请求的内容后不要断开连接,不断开的话下次继续连接速度就很快了。可能还会有Cookies,Cookies保存了用户的登陆信息,一般保存的是用户的JSESSIONID,在每次向服务器发送请求的时候会重复发送给服务器。
在建立连接发送请求时每个服务端需要和客户端保持通信,有很多客户端都会和服务器进行通信。服务器为了识别是哪个客户端与它通信,就必须用一个标识记录客户端的信息。客户端首次访问服务器,服务端返回响应时通过附带一个记录的客户端信息的标识来返回给客户端,这个标识就是JSESSIONID,JSESSIONID就放在了客户端的Cookies里。当客户端再次向服务器发送请求时上就使用上次记录的Cookies里面的JSESSIONID,这样服务器就知道是哪个浏览器了。这样他们之间就能保持通信了。
4.服务器处理请求
服务器收到浏览器的请求以后),会解析这个请求(读请求头),然后生成一个响应头和具体响应内容。接着服务器会传回来一个响应头和一个响应,响应头告诉了浏览器一些必要的信息,例如重要的Status Code,2开头如200表示一切正常,3开头表示重定向,4开头是客户端错误,如404表示请求的资源不存在,5开头表示服务器端错误。响应就是具体的要请求的页面内容。
5.浏览器解析渲染页面
(1)浏览器显示HTML
当服务器返回响应之后,浏览器读取关于这个响应的说明书(响应头),然后开始解析这个响应并在页面上显示出来。
浏览器打开一个网址的时候会慢慢加载这个页面,一部分一部分的显示,直到完全显示,知道最后的旋转进度条停止。因此在浏览器没有完整接受全部HTML文档时,它就已经开始显示这个页面了。
(2)浏览器向服务器发送请求获取嵌入在HTML中的对象
在浏览器显示HTML时,打开一个网页的过程中,主页(index)页面框架传送过来以后,浏览器还会因页面上的静态资源多次发起连接请求,需要获取嵌入在HTML中的其他地址的资源。这时,浏览器会发送一些请求来获取这些文件。这些内容也要一点点地请求过来,所以标签栏转啊转,内容刷啊刷,最后全部请求并加载好了就终于好了。
这时请求的内容是主页里面包含的一些资源,如图片,视频,css样式,JavaScript文件等等。
这在文件属于静态文件,首次访问会留在浏览器的缓存中,过期才会从服务器去取。缓存的内容通常不会保存很久,因为难保网站不会被改动。
静态的文件一般会从CDN中去取,CDN根据请求获取资源的时候可能还会用到负载均衡。
(3)浏览器发送异步(AJAX)请求
对于那些动态的请求,动态网页等就必须要从服务器获取了。对于静态的页面内容,浏览器通常会进行缓存,而对于动态的内容,浏览器通常不会进行缓存。对于这些动态请求,Nginx可能会专门设置一些服务器用来处理这些访问动态页面的请求。
6.关闭TCP连接
当数据完成请求到返回的过程之后,根据Connection的Keep-Alive属性可以选择是否断开TCP连接,HTTP/1.1一般支持同一个TCP多个请求,而不是1.0版本下的完成一次请求就发生断开。TCP的断开与连接不一样,断开可以分为主动关闭和被动关闭,需要经过4次握手。
当浏览器需要的全部数据都已经加载完毕,一个页面就显示完了。
为什么要写用例
① 理清思路,避免漏测和重复测;
② 提高测试效率;
③ 更好的发现问题,记录问题,复现问题;
④ 告诉领导:我做过;
如何进行接口测试
通过工具模拟客户端向服务端发送请求并接受服务器返回的数据来对接口的功能,逻辑业务,异常,安全进行测试;
(1)功能测试:测试这个接口的功能是否实现,并且测试这个接口是否按照接口文档来进行开发的(比如说接口文档规定了一些关键字,而开大的时候把关键字改成了其他的关键字,因为在整个项目周期,并不只有一个开发而是有多个,所以可能因为在开发过程中因为关键字不一样导致某些开发的功能异常,还有自动化脚本也会发生异常)
(2)逻辑业务,主要指的是一些逻辑业务依赖关系(比如支付宝提交订单的时候要保证你是在登录的情况下,如果你没有登录而提交成功了,这就是异常,可以修改请求的cookie来测试)
(3)异常测试:参数异常:关键字参数(应用其他的关键字替换进行测试)、参数为空、参数多少(通过添加参数增添个数),参数错误。数据异常:关键字数据(填入的数据用其他的数据语言的数据替用)、数据长度、数据为空、数据错误。
由于我们项目前后端调用主要是基于http协议的接口,所以测试接口时主要是通过工具或代码模拟http请求的发送与接收。工具有很多如:postman、jmeter、soupUI、java+httpclient、robotframework+httplibrary等。
–也可以用 接口自动化来实现,就是用代码实现,框架和UI自动化差不多,发送请求用断言来判断。
当一个接口出现异常时候,你是如何分析异常的?
1.抓包,用fiddler工具抓包,或者浏览器上f12,app上的话,那就用fiddler设置代理,去看请求报文和返回报文了
2.查看后端日志,xhell连上服务器,查看日志
挑一个你项目中你负责的比较小的模块并且跟我介绍一下,然后说一下你针对这个模块的测试设计了哪些异常用例?
例如:学生信息模块—学籍号正常16位
异常用例:
① 学籍号为空,相应提示信息;
② 学籍号少于16位,相应提示信息;
③ 学籍号输入字符、特殊字符,相应提示信息;
④ 未存在的学籍号,相应提示信息;
⑤ 重复绑定学籍号,数据是否重复;
⑥ 不同网络条件下学籍号绑定;
⑦ 大数据量下绑定的响应时间;
微信发红包的测试用例?
功能
1.在红包钱数,和红包个数的输入框中只能输入数字
2.红包里最多和最少可以输入的钱数 200 0.01
3.拼手气红包最多可以发多少个红包 100
3.超过最大拼手气红包的个数是否有提醒
4.当红包钱数超过最大范围是不是有对应的提示
5.当发送的红包个数超过最大范围是不是有提示
6.当余额不足时,红包发送失败
7.在红包描述里是否可以输入汉字,英文,符号,表情,纯数字,汉字英语符号,
7.1是否可以输入它们的混合搭配
8.输入红包钱数是不是只能输入数字
9.红包描述里许多能有多少个字符 10个
10.红包描述,金额,红包个数框里是否支持复制粘贴操作
12.红包描述里的表情可以删除
13.发送的红包别人是否可以领取
13.发的红包自己可不可以领取 2人
14.24小时内没有领取的红包是否可以退回到原来的账户
14.超过24小时没有领取的红包,是否还可以领取
15.用户是否可以多次抢一个红包
16.发红包的人是否还可以抢红包 多人
17.红包的金额里的小数位数是否有限制
18.可以按返回键,取消发红包
19.断网时,无法抢红包
20.可不可以自己选择支付方式
21.余额不足时,会不会自动匹配支付方式
22.在发红包界面能否看到以前的收发红包的记录
23.红包记录里的信息与实际收发红包记录是否匹配
24.支付时可以密码支付也可以指纹支付
25.如果直接输入小数点,那么小数点之前应该有个0
26.支付成功后,退回聊天界面
27.发红包金额和收到的红包金额应该匹配
28.是否可以连续多次发红包
29.输入钱数为0,"塞钱进红包"置灰
性能
1.弱网时抢红包,发红包时间
2.不同网速时抢红包,发红包的时间
3.发红包和收红包成功后的跳转时间
4.收发红包的耗电量
5.退款到账的时间
兼容
1.苹果,安卓是否都可以发送红包
2.电脑端可以抢微信红包
界面
1.发红包界面没有错别字
2.抢完红包界面没有错别字
3.发红包和收红包界面排版合理,
4.发红包和收到红包界面颜色搭配合理
安全
1.对方微信号异地登录,是否会有提醒 2人
2.红包被领取以后,发送红包人的金额会减少,收红包金额会增加
3.发送红包失败,余额和银行卡里的钱数不会少
4.红包发送成功,是否会收到微信支付的通知
易用性(有点重复)
1.红包描述,可以通过语音输入
2.可以指纹支付也可以密码支付
装饰器有了解吗?简单介绍一下装饰器
装饰器是将另一个函数作为输入并修改/扩展其功能的函数;可以抽离出大量与函数功能本身无关的雷同代码并继续重用;