面试必问-测试用例设计

专栏介绍

本专栏将会对近年高频测试相关面试题做详细解答,结合自己多年工作经验,以及同行大佬指导总结出来的。旨在帮助测试、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. 优化点:比如电梯按钮的设计是否符合一般人的习惯,按钮颜色关门后是否清晰可见数字等等

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

相关推荐
吾店云建站8 小时前
WordPress 6.7 “Rollins”发布
科技·程序人生·职场和发展·创业创新·程序员创富
用户31574760813511 小时前
成为程序员的必经之路” Git “,你学会了吗?
面试·github·全栈
Sunyanhui111 小时前
力扣 二叉树的直径-543
算法·leetcode·职场和发展
布川ku子12 小时前
[2024最新] java八股文实用版(附带原理)---Mysql篇
java·mysql·面试
椰椰椰耶15 小时前
【软件测试】白盒、黑盒、灰盒测试,按照测试阶段分类
测试用例
BJHHZX199118 小时前
某乳制品企业核心人才培养与管理项目纪实
职场和发展
有趣的杰克18 小时前
移动端【01】面试系统的MVVM重构实践
面试·职场和发展·重构
我是聪明的懒大王懒洋洋20 小时前
力扣力扣力:53.最大子数组和
算法·leetcode·职场和发展
测试小小怪下士1 天前
单元测试、集成测试、系统测试、验收测试、压力测试、性能测试、安全性测试、兼容性测试、回归测试(超详细的分类介绍及教学)
功能测试·单元测试·测试用例·集成测试·压力测试·模块测试·安全性测试