测试常用分类
按阶段划分
- 单元测试:针对程序源代码进行测试
- 集成测试:又称接口测试,主要针对模块与模块或系统与系统之间的接口进行验证
- 系统测试:针对软件全面进行验证(功能,兼容性,文档)
- 验收测试:使用内测,公测来实现
- 内测:公司内部进行验证
- 公测:让玩家来进行测试
按代码可见度划分
黑盒测试:看不见源代码,主要对程序功能进行测试
灰盒测试:看见部分代码,主要对程序接口进行测试
白盒测试:看见全部代码,主要对程序源代码进行测试
扩展-总结:
- 系统测试和黑盒测试重点核心是功能测试
- 集成测试和灰盒测试又称接口测试
- 单元测试和白盒测试是对代码进行测试
- 自动化测试归属功能测试
- 性能测试、安全测试归属专项测试
扩展-测试策略
- 冒烟测试:大规模测试之前,针对程序主功能进行测试,保证程序具备可测试性。
- 面试题:提测试标准时什么? – 冒烟测试通过!测试之前要怎么做?–冒烟测试。
模型
- 质量模型
- 测试模型
质量模型
学到了什么?–针对任何软件或硬件,测试要覆盖的方面
重点:功能、兼容、性能、易用性、安全
W模型
学到了什么?–软件开发流程、软件测在开发的作用
开发流程:需求分析、概要测试、详细设计、编码、集成、实施、交付。
测试流程:单元测试、集成测试、系统测试、验收测试。
测试流程
需求分析
测试计划
编写用例
执行用例
缺陷管理
测试报告
需求分析
前置:阅读需求分析文档,记录不明确之处。
- 确定各部门对需求一致。
- 站在不同角度对需求进行检查(查漏补缺)。
HTML + CSS
单选按钮
1
2
3
4<!-- type="text"文本框,placeholder文字内容 -->
输入框:<input type="text" placeholder="请输入用户名" /><br>
<!-- type="radio" 单选,name属性,checked="checked"选择 -->
<input type="radio" name="name" id="baomi" checked="checked"><label for="baomi">保密</label>type=”radio”
注:如果想文字可以点击切换,那么加
label
标签,并且设置for
属性和对应的单选按钮的id
属性值一致,必须给这一组单选框添加name
值,才可以实现单选效果,设置默认选中状态,要给单选框按钮添加checked="checked"
。下拉菜单
1
2
3
4
5
6
7
8
9
10
11地址:<select name="" id="">
<optgroup label="---分类一---">
<option value="">1</option>
<option value="">2</option>
<option value="">3</option>
</optgroup>
<optgroup label="---分类二---">
<option value="">1</option>
<option value="" selected="selected">默认选择</option>
<option value="">3</option>
</optgroup>select
和option
的组合:注:如果想设置多组下拉菜单,需要添加一个
optgroup
标签,并设置label
属性做为提示文字,如果没有默认选中状态,需要给对应的option
添加selected
属性。
面试理论
面试基础
用例用什么软件工具好?
testlink,禅道(比较多)
测试环境怎么搭建?
测试管理工具的搭建(禅道)、项目(tomcat
,appache
),LR,jmeter
怎么介绍项目比较?
项目环境(软件+硬件)
项目业务(一个直播系统。主要功能:在线直播,在线考试,在线交流,咨询等功能)
测试流程
特色:性能很好,稳定性好
你在里面角色,设计用例,提交bug
软件测试的流程?
考察目的:软件测试基础
参考:需求分析(需求是否合理、需求是否可测试)->测试计划(人、时间、业务点、资源)->测试设计(写标题,测试用例)->冒烟测试(准入测试)->全面开展测试(测试执行:测试环境搭建)->bug
提交->新版本发布(bug
有没有验证、新功能测试、回归测试)->测试报告总结。
web
测试和app
测试的区别?
考察目的:你对web
和app
的认识
参考:网页(PC
,手机),app(手机),web
,app(混合APP,纯APP)
共同点:兼容性,客户端
不同点:app手机,耗电量,网络差
如何提交高质量的缺陷报告单?
考察目的:软件bug
单
参考:
bug
可读性(把复现步骤写清晰,发现bug
的环境记录详细)深层次
学习人家的
bug
竞争条件的地方,经常出现问题的地方
web
如何进行性能测试?
考察目的:web
性能评估
考察目的:
web
系统性能指标是什么(性能测试评估)- 我们项目
web
系统,http
,jmeter
,LR;jmeter
- 我们要测试哪些业务(业务建模)
- 监控
- 记录并且调试
你们是如何编写测试用例,根据什么来编写的?如何保证用例的覆盖度?
考察目的:测试用例编写和方法,工具,对业务需求的把握
参考:我们根据需求(需求说明书、之前的产品、同品,软件规范、经验值)编写用例(UI
、功能、兼容性、安全、性能、稳定性、易用性),用到什么方法(测试用例设计方法)
工具:1.表格 2.freemind
思维编写 3testlink
,禅道
覆盖度:需求分析(需求是否合理、需求是否可测试)->测试计划(人、时间、业务点、资源)->测试设计(写标题,测试用例)->冒烟测试(准入测试)->全面开展测试(测试执行:测试环境搭建)->bug
提交->新版本发布(bug
有没有验证、新功能测试、回归测试)->测试报告总结。
例子:设计一个电梯的测试用例
- 需求(用途,用在什么场合)
- 功能
- 容量(容错,安全,解除,红外线感应,提示,告警)
- 稳定性
- 通风,速度
接口测试
一、接口测试用例设计需要考虑哪些方面?(理论)
- 考虑输入的合法性:参数必填,默认值,参数长度或类型效验,边界等(例:图片上传考虑图片的大小和格式,查询考虑数据排序,分页考虑数据分页显示等)。
- 链路接口考虑业务逻辑。
- 数据库效验。
- 兼容性(
APP
多个版本)。 - 安全性(鉴权,敏感信息加密)
- 性能(
TPS
,响应时间)。 - 幕等性(调用1次和10000次结果一样)。
二、你们是怎么做接口测试的?(接口测试流程)
获取接口文档。熟悉单接口和链路接口,包括地址,方式,鉴权,入参,出参,错误码等。
编写接口测试用例以及评审(三方会审)。
正例:单接口是返回成功,链路接口返回成功。
反例:
- 鉴权反例:鉴权码必填,错误,已过期。。。(鉴权:鉴定是否有访问接口的权限)。
- 参数反例:必填,类型异常,长度异常。。。
- 错误码反例:根据接口文档而定
- 其它反例:接口黑名单,接口次数限制,分页场景(当前页,每页条数)。
- 分页:查询订单接口,99条数据,currpage=10,pagenum=10
- 兼容性:(一个接口对应多个版本的
APP
)
使用接口工具(
jmeter
,postman
,apifox
,suopUI
)等工具实施接口测试,有bug
提bug
。考虑:关联,加密,动态参数,签名等。
持续集成(自动的获取脚本并且子的执行,自动的生成报告,自动发送报告)
- jmeter+ant+jenkins+git
- postman+newman+jenkins+git
三、cookie
,session
,token
有什么相同点和不同点。
相同点:
三者都是为了实现鉴权,并且都是由服务器生成的。
不同点:
生成时间:
cookie
是第一次访问服务器生成,session
每一个登录生成,token
一般是由一个单独的接口生成。保存位置:
cookie
保存包客户端,session
保存在服务器内存(默认30分钟的生命周期),token
保存在服务器的硬盘(生命周期为2小时比较多)安全方面:
cookie
不安全,session
相对安全,token
比较安全。长度安全:
cookie
最大4k,sessionid
没有限制,token
没有限制。
四、你平常做接口测试的过程中发现过哪些bug
?多吗?
接口测试发现的bug
,一般都是接口没有按约定返回数据,参数必填,参数长度,类型没有校验,包括边界值,代码逻辑,数据错误,或没有返回合理的错误提示,没有鉴权。
前后端联调阶段接口的bug
非常多。
例:
查询商品列表接口:前端调用的是
mock
的三条数据,前端调后端接口时分页是否又问题。下订单的接口:商品价格应该0以上,接口测试时改成负数,发现余额增加了。
修改商品接口:按需求只有卖家才可以修改,我们传入一个普通用户可以修改。
在接口冒烟测试和回归测试阶段发现的 bug 就很少。
五、你在接口测试中是怎么效验接口返回结果是否正确?
我们这么做的,接口用例中一般又两种断言:1.状态断言(一个)。2.就业断言(多个)
- 验证接口返回码为200。
- 当接口返回的报文比较少的情况下,那么就会使用相等断言。
- 当接口返回的报文比较多的情况下,那么就会使用包含核心的业务关键字。
- 我们返回的是
JSON
格式的数据,一般会使用响应断言和JSON
断言。 - 像我们有数据驱动的接口,那么一般会使用
BeanShell
断言。 - 针对一些接口的业务流,就会去调查数据库校验最核心的业务流完成的标识段。
六、一个接口请求不通过该如何排查?
- 检查请求四要素:请求方式,请求路径,请求路径,请求头。
- 客户端和服务器之间的网络是否通(ping),甚至服务器的项目都没有部署好。中间件服务没有启动。
- 检查服务器的防火墙。
- 确定鉴权码是否有效。
- 左手打开
Fidder
,右手打开Jmeter
做接口测试。 - 绑定
hosts
(本机上)。
七、接口测试中的加密或签名的接口如何处理?
- 首先了解接口的接口的加密方式(加密一般是参数,签名一般是请求头)
- base64,md5,sha系,rsa
- 查看接口测试工具是否支持当前加密方式,如果支持的话,直接使用对应的加密方法对参数进行加密传输即可,如果加密方式工具不支持(内部的算法,自定义的算法),我们开发会给我们一个
jar
包,我们只需要在jmeter
的beanshell
里面调用这个jar
里面的加密算法实现加密算法实现参数加密即可。- 接口内部代码:
admin
md5
WRWETWETWETWETEwer
- 前端接口工具:
admin
admin
WRWETWETWETWETEwer
- 接口内部代码:
八、工作中常用的jmeter
自带函数有哪些?
__random
__randomstring()
__time()
__md5()
__setpropty() 跨线程组保存属性
__propty() 跨线程组获取或者设置属性的值
__p() 跨线程组获取属性的值
- 获得鉴权码(只执行一次) 线程组1
- N个接口(执行N次) 线程组2
九、Postman
中常见的POST
提交数据方式有哪些?有什么区别?
- application/x-www-form-urlencoded 表单
- multipart/form-data 表单+文件上传
- application//json(text/plain,text/xml) json,text,xml,js,html
- binary 二进制
十、抓包如何定位前后端的BUG
抓包看请求报文和响应报文,如果请求报文有问题就是前后端的bug
,如果请求报文没有问题,然后返回报文有问题就是后端问题。
参照物是页面数据。
- 你是不是要在页面提交数据。
- 抓包。
- 重点是返回报文(也是页面数据)。
为什么做接口测试?
前后端开发架构:前端的数据来自Mock
。
功能测试:界面。仅仅只是测试界面远远不够。
全面的功能测试之前保证接口没有问题。
面试:
- 实战
- 技能