专栏介绍
本专栏将会对近年高频测试相关面试题做详细解答,结合自己多年工作经验,以及同行大佬指导总结出来的。旨在帮助测试、python方面的同学,顺利通过面试,拿到自己满意的offer。
每篇的题量虽然不多,但完全消化掉也是需要时间的。务必不用着急心切,揠苗助长,只有多多练习,反复温习,掌握理解清楚了,才不会遗忘,这样才能应对各种情况的面试。
让我们一起卷起来吧!
全部文章请访问专栏:《大厂测试高频面试题详解》
文章目录
测试用例的格式
普遍是 Excel 或 Xmind。
Excel 优势是比较细化,可以突出更多的测试要素,适用于等价划分类等黑盒测试设计思路,也适用于输入输出的场景;缺点是结构化不直观,不好体现功能需求,用例数过于臃肿。
Xmind 优势是大部分只需要列出测试点,更加注重探索性测试,能够更好的去描述功能需求,结构化展示比较直观,比较契合产品PRD;缺点是不太适用于输入输出的场景,测试细节不好表达。
测试用例优先级
- 高(优先执行):产品基本的功能验证,即关键路径的测试用例,包括最常执行的功能、基本流程的输入(正向流程+正向数据)。
- 中(次级执行):包括界面数据有效性校验、默认值、边界值。
- 低(最后执行):建议执行的测试用例,包括不常执行的功能、异常流程的输入以及异常数据的输入。
测试用例要素
- 用例标识(id)
- 用例标题
- 重要性
- 前置条件
- 操作步骤
- 预期结果
- 作者(选填)
测试方案设计应从哪些方面去考虑?
无非是从以下方面去考虑,其中,功能测试我认为是最重要的一个环节。
- 功能测试(最重要)
- 文档测试
- UI测试
- 接口测试
- 性能测试(压力、负载)
- 安全测试
- 稳定性测试(Monkey、遍历测试等)
- 异常测试(断网/弱网)
- 兼容性测试(安卓、IOS系统版本以及APP新老版本)
- 易用性测试
- 可用性测试
- 配置测试
用例设计实战(上)
1)设计登陆界面的测试用例
- 功能测试
- 正常流程(正确账号密码,点击提交,验证能否正确登陆)
- 异常流程(错误的账号密码,点击提交,验证登陆失败,并提示相应错误信息)
- 登陆成功后能否正确跳转
- 用户名和密码,太短或太长的处理(边界值法)
- 用户名和密码,有特殊字符(比如空格)及其他非英文的情况
- 记住用户名,记住密码
- 登陆失败后,不记录密码
- 用户名和密码前后有空格的处理
- 密码是否是密文显示,使用"*"号或圆点等符号代替
- 验证码的辨认难度,考虑颜色(色盲使用者),刷新或换一个按钮是否好用
- 输入密码时,大写键盘开启时是否有提示信息
- 什么都不输入,点击提交按钮,检查提示信息
- 登陆token测试
- 界面测试
- 布局是否合理,按钮和表单是否整齐
- 按钮和表单高度和长度是否符合要求
- 界面风格是否符合UI设计稿
- 文字有无错别字
- 性能测试
- 打开登陆页面,需要的时间是否在需求要求的时间内
- 输入正确的账号密码,点击登陆,是否在需求时间内跳转成功
- 模拟大量用户同时登陆,检查一定压力下能否正常跳转
- 安全性测试
- 用户名或密码是否是通过加密方式,发送给后端服务器
- 用户名和密码应该在前端和后端做双重验证
- 防止CSRF攻击,是否存在token
- 用户名和密码的输入框,应该屏蔽SQL注入攻击
- 用户名和密码的输入框,应该禁止输入脚本(防止xss攻击)
- 防止暴力破解,检测是否有错误登陆的次数限制
- 是否支持多用户在同一机器上登陆
- 同一用户能否在多台机器上登陆
- 可用性测试
- 是否可以用全键盘操作,是否有快捷键
- 输入用户名,密码后按回车,是否可以登陆
- 输入框是否可以Tab切换
- 兼容性测试
- 不同浏览器下能否显示正常,且功能正常(IE,6,7,8,9,10,11,Firefox,Chrome,Safari)等
- 同种浏览器下不同版本能否显示正常且功能正常
- 不同的操作系统是否能正常工作(Windows, Mac)
- 移动设备上是否正常工作(iOS,Android)
- 本地化测试
- 不同语言环境下,页面的显示是否正确
2)设计IP地址的测试用例
问:给定一个字符串,怎么判断是不是ip地址?手写这段代码,并写出测试用例?
java版
java
public class IpTest{
public static boolean isIpLegal(String str){
//检查ip是否为空
if(str == null){
return false;
}
//检查ip长度,最短为:x.x.x.x(7位),最长为xxx.xxx.xxx.xxx(15位)
if(str.length()<7 || str.length()>15 ){
return false;
}
//对输入字符串的首末字符判断,如果是"."则是非法IP
if(str.charAt(0) == '.' || str.charAt(str.length()-1) == '.'){
return false;
}
//按"."分割字符串,并判断分割出来的个数,如果不是4个,则是非法IP
String[] arr = str.split("\\.");
if(arr.length != 4){
return false;
}
//对分割出来的每个字符串进行单独判断
for(int i=0; i<arr.length; i++){
//如果每个字符串不是一位字符,且以'0'开头,则是非法IP,如:01.002.03.004
if(arr[i].length()>1 && arr[i].charAt(0) == '0'){
return false;
}
}
//对每个字符串中的每个字符进行逐一判断,如果不是数字0-9,则是非法IP
for(int j=0; j<arr[i].length(); j++){
if(arr[i].charAt(j) < '0' || arr[i].charAt(j) > '9'){
return false;
}
}
//对拆分的每一个字符串进行转换成数字,并判断是否在0~255之间
for(int i=0; i<arr.length; i++){
int temp = Integer.parseInt(arr[i]);
if(i==0){
if(temp < 1 || temp > 255){
return false;
}
}else{
if(temp < 0 || temp > 255){
return false;
}
}
}
return true;
}
public static void main(String[] args){
//输入一个字符串
Scanner scanner = new Scanner(System.in);
String ipStr = scanner.next();
boolean isIpLegal = isIpLegal(isStr);
if(isIpLegal){
System.out.println(ipStr + "合法");
}else{
System.out.println(ipStr + "非法");
}
}
}
python版
python
def ip_check(ip_str):
# 题目要求入参只有字符串类型
if not isinstance(ip_str, str):
return False
if len(ip_str) < 7 or len(ip_str) > 15:
return False
if ip_str.startswith('.') or ip_str.endswith('.'):
return False
ip_lst = ip_str.split('.')
if len(ip_lst) != 4:
return False
for idx, ip_num in enumerate(ip_lst):
if not ip_num.isdigit():
return False
if len(ip_num) > 1 and ip_num.startswith('0'):
return False
if idx == 0:
if int(ip_num) < 1 or int(ip_num) > 255:
return False
else:
if int(ip_num) < 0 or int(ip_num) >255:
return False
return True
有关ip地址的知识点:
有效可用的ip地址
A类 | 1.0.0.0 - 126.255.255.254 |
---|---|
A私有 | 10.0.0.0 - 10.255.255.254 |
B类 | 128.0.0.0 - 191.255.255.254 |
B私有 | 172.16.0.0 - 172.31.255.254 |
C类 | 192.0.0.0 - 223.255.255.254 |
C私有 | 192.168.0.0 - 192.168.255.254 |
Windows自动分配 | 169.254.0.0 - 169.254.255.254 |
有效但不可用的IP地址
D类 | 244.0.0.0 - 239.255.255.254 |
---|---|
E类 | 240.0.0.0 - 255.255.255.254 |
全网 | 0.x.x.x, x.x.x.0 |
广播 | x.x.x.255 |
回环 | 127.0.0.0 - 127.255.255.254 |
测试用例-等价划分类
输入 | 结果 |
---|---|
64.11.22.33 | 有效可用 |
10.12.13.14 | 有效可用,不能直接访问公网 |
151.123.234.56 | 有效可用 |
172.20.123.56 | 有效可用,不能直接访问公网 |
192.127.35.65 | 有效可用 |
192.168.128.128 | 有效可用,不能直接访问公网 |
169.254.15.200 | 有效可用,不能直接访问公网 |
224.1.2.3 | 有效不可用,超过有效范围(D类) |
250.11.22.33 | 有效不可用,超过有效范围(E类) |
0.200.3.4 | 有效不可用,全网地址 |
64.11.22.0 | 有效不可用,全网地址 |
10.12.13.255 | 有效不可用,广播地址 |
127.50.60.70 | 有效不可用,回环地址 |
3)设计电梯的测试用例
问:如何对电梯进行测试
- 功能:上升、下降、停止、开门、关门、梯内电话、灯光、指示灯,监控等;
- 性能:速度、反应时间、关门时间等;
- 压力:超载、尖锐物碰撞电梯壁等;
- 安全:停电、报警装置、轿箱停靠位置、有人扒门时的情况等;
- 可用性:按键高度、操作是否方便、舒适程度,是否是就近原则停靠等;
- UI:美观程度、光滑程度、形状、质感等;
- 稳定性:长时间运行情况等;
- 兼容性:不同电压是否可工作、不同类型电话是否可安装等。
- 异常场景: 突然停电时的情况、障碍物阻挡、
- 交互测试: 多次点击同一楼层号码、与其他电梯之间是否协作良好、同时按关门和开门按钮、电梯运行期间上人下人再按新的楼层等
- 优化点:比如电梯按钮的设计是否符合一般人的习惯,按钮颜色关门后是否清晰可见数字等等
👇🏻遇到问题,学习指导请点击下方卡片联系作者👇🏻