面试必问-测试用例设计

专栏介绍

本专栏将会对近年高频测试相关面试题做详细解答,结合自己多年工作经验,以及同行大佬指导总结出来的。旨在帮助测试、python方面的同学,顺利通过面试,拿到自己满意的offer。

每篇的题量虽然不多,但完全消化掉也是需要时间的。务必不用着急心切,揠苗助长,只有多多练习,反复温习,掌握理解清楚了,才不会遗忘,这样才能应对各种情况的面试。

让我们一起卷起来吧!

全部文章请访问专栏:《大厂测试高频面试题详解》


文章目录


测试用例的格式

普遍是 Excel 或 Xmind。

Excel 优势是比较细化,可以突出更多的测试要素,适用于等价划分类等黑盒测试设计思路,也适用于输入输出的场景;缺点是结构化不直观,不好体现功能需求,用例数过于臃肿。

Xmind 优势是大部分只需要列出测试点,更加注重探索性测试,能够更好的去描述功能需求,结构化展示比较直观,比较契合产品PRD;缺点是不太适用于输入输出的场景,测试细节不好表达。


测试用例优先级

  • 高(优先执行):产品基本的功能验证,即关键路径的测试用例,包括最常执行的功能、基本流程的输入(正向流程+正向数据)。
  • 中(次级执行):包括界面数据有效性校验、默认值、边界值。
  • 低(最后执行):建议执行的测试用例,包括不常执行的功能、异常流程的输入以及异常数据的输入。

测试用例要素

  1. 用例标识(id)
  2. 用例标题
  3. 重要性
  4. 前置条件
  5. 操作步骤
  6. 预期结果
  7. 作者(选填)

测试方案设计应从哪些方面去考虑?

无非是从以下方面去考虑,其中,功能测试我认为是最重要的一个环节。

  • 功能测试(最重要)
  • 文档测试
  • UI测试
  • 接口测试
  • 性能测试(压力、负载)
  • 安全测试
  • 稳定性测试(Monkey、遍历测试等)
  • 异常测试(断网/弱网)
  • 兼容性测试(安卓、IOS系统版本以及APP新老版本)
  • 易用性测试
  • 可用性测试
  • 配置测试

用例设计实战(上)

1)设计登陆界面的测试用例

  1. 功能测试
    • 正常流程(正确账号密码,点击提交,验证能否正确登陆)
    • 异常流程(错误的账号密码,点击提交,验证登陆失败,并提示相应错误信息)
    • 登陆成功后能否正确跳转
    • 用户名和密码,太短或太长的处理(边界值法)
    • 用户名和密码,有特殊字符(比如空格)及其他非英文的情况
    • 记住用户名,记住密码
    • 登陆失败后,不记录密码
    • 用户名和密码前后有空格的处理
    • 密码是否是密文显示,使用"*"号或圆点等符号代替
    • 验证码的辨认难度,考虑颜色(色盲使用者),刷新或换一个按钮是否好用
    • 输入密码时,大写键盘开启时是否有提示信息
    • 什么都不输入,点击提交按钮,检查提示信息
    • 登陆token测试
  2. 界面测试
    • 布局是否合理,按钮和表单是否整齐
    • 按钮和表单高度和长度是否符合要求
    • 界面风格是否符合UI设计稿
    • 文字有无错别字
  3. 性能测试
    • 打开登陆页面,需要的时间是否在需求要求的时间内
    • 输入正确的账号密码,点击登陆,是否在需求时间内跳转成功
    • 模拟大量用户同时登陆,检查一定压力下能否正常跳转
  4. 安全性测试
    • 用户名或密码是否是通过加密方式,发送给后端服务器
    • 用户名和密码应该在前端和后端做双重验证
    • 防止CSRF攻击,是否存在token
    • 用户名和密码的输入框,应该屏蔽SQL注入攻击
    • 用户名和密码的输入框,应该禁止输入脚本(防止xss攻击)
    • 防止暴力破解,检测是否有错误登陆的次数限制
    • 是否支持多用户在同一机器上登陆
    • 同一用户能否在多台机器上登陆
  5. 可用性测试
    • 是否可以用全键盘操作,是否有快捷键
    • 输入用户名,密码后按回车,是否可以登陆
    • 输入框是否可以Tab切换
  6. 兼容性测试
    • 不同浏览器下能否显示正常,且功能正常(IE,6,7,8,9,10,11,Firefox,Chrome,Safari)等
    • 同种浏览器下不同版本能否显示正常且功能正常
    • 不同的操作系统是否能正常工作(Windows, Mac)
    • 移动设备上是否正常工作(iOS,Android)
  7. 本地化测试
    • 不同语言环境下,页面的显示是否正确

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)设计电梯的测试用例

问:如何对电梯进行测试

  1. 功能:上升、下降、停止、开门、关门、梯内电话、灯光、指示灯,监控等;
  2. 性能:速度、反应时间、关门时间等;
  3. 压力:超载、尖锐物碰撞电梯壁等;
  4. 安全:停电、报警装置、轿箱停靠位置、有人扒门时的情况等;
  5. 可用性:按键高度、操作是否方便、舒适程度,是否是就近原则停靠等;
  6. UI:美观程度、光滑程度、形状、质感等;
  7. 稳定性:长时间运行情况等;
  8. 兼容性:不同电压是否可工作、不同类型电话是否可安装等。
  9. 异常场景: 突然停电时的情况、障碍物阻挡、
  10. 交互测试: 多次点击同一楼层号码、与其他电梯之间是否协作良好、同时按关门和开门按钮、电梯运行期间上人下人再按新的楼层等
  11. 优化点:比如电梯按钮的设计是否符合一般人的习惯,按钮颜色关门后是否清晰可见数字等等

👇🏻遇到问题,学习指导请点击下方卡片联系作者👇🏻

相关推荐
玩镜的码农小师兄7 小时前
[从零开始面试算法] (04/100) LeetCode 136. 只出现一次的数字:哈希表与位运算的巅峰对决
c++·算法·leetcode·面试·位运算·hot100
绝无仅有8 小时前
面试真实经历某商银行大厂计算机网络问题和答案总结
后端·面试·github
绝无仅有8 小时前
面试真实经历某商银行大厂系统,微服务,分布式问题和答案总结
后端·面试·github
paishishaba8 小时前
JAVA面试复习笔记(待完善)
java·笔记·后端·面试
聪明的笨猪猪18 小时前
Java JVM “调优” 面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
兩尛19 小时前
Spring面试
java·spring·面试
白云千载尽20 小时前
leetcode 912.排序数组
算法·leetcode·职场和发展
代码充电宝20 小时前
LeetCode 算法题【简单】290. 单词规律
java·算法·leetcode·职场和发展·哈希表
恋红尘1 天前
Redis面试八股
数据库·redis·面试
hanxiaozhang20181 天前
Netty面试重点-2
面试·netty