软件测试用例篇(2)
功能测试+界面测试+兼容性测试+安全测试+易用性测试+性能测试
针对有需求的案例来设计测试用例:邮箱注册,部分测试用例
https://zay1xofb7z6.feishu.cn/mindnotes/bmncnKD5Ak6GSZl3PRlWDgF9z3g#mindmap
一)等价类:
场景需求:姓名长度是6-200位,那么如何进行设计测试用例?
对于软件来说,开发人员实现需求里面的要求,也要避免实现需求里面没有要求的,不符合需求要求的你实现了,那么就是一个BUG
1)划分有效等价类和无效等价类
有效等价类:6-200
无效等价类:(0-5)&(200~+OO)
无效等价类更考验同学们的一个发散性思维
2)根据等价类来编写测试用例:
练习:针对需求密码是6-20位的数字来设计无效等价类
长度:针对于长度设计无效等价类,数字长度大于6小于20
无效等价类:
1)只包含数字位数小于6或者是位数大于20
2)不仅仅位数小于6或者位数大于20,不只是包含数字,但是在正确范围之外又出现数字的其他符号
2)虽然位数大于6或者是位数小于20,但是不仅仅包含数字还含有其他符号,也就是在正确范围内有出现数字的其他符号;
有效等价类:对于程序的规格说明书是合理的,有意义的输入数据组成的集合,利用等价类验证程序是否实现了规格说明中所规定的功能和性能;
无效等价类:根据需求说明书,不满足需求的集合;
1)对于我们上面说的if语句,有效等价类就是a>10的数据,无效等价类就是a<=10的数据
2)例如我想要去商店买水果,有效等价类是苹果,桃子和梨,无效等价类是饮料,米
if(a>10) {printf("a大于10"); }b=a;printf("b等于a"); } 这时把a>10的数据归到一个等价类中 把所有小于10的数据归到一个等价类中 例如拿1和15举例子
输入用户名(必填项):字符类型A-Z,不区分大小写,长度是6-15位任何长度(6和15就是边界)
1)有效等价类:A-Z,a-z,大小写混合,大于等于6位,小于等于15位;
2)无效等价类:汉字,特殊符号#,?(),!,数字,空格,字母和前面符号的混合,小于6位,大于15位;
二)边界值法:
2.1)定义:边界值是对等价类的补充,边界值分析法就是对输入或者输出的边界值进行测试的一种黑盒的测试方法,通常边界值分析法是对等价类划分法的补充,这种情况下其测试用例来自于等价类的边界;
2.2)特点:针对我们的输入输出的边界进行测试用例的设计,因为边界是一种特别出现错误的地方,是一种黑盒测试方法;
2.3)需求:活动截止日期是7.14,变量是datetime;
if(datetime<7.15 00.00.00)
if(datetime<=7.14 23.59.59)
2.4)我们的边界值法就可以这么写,这就是边界值的重要性;
2.5)1的边界值是0和2,-1的边界值就是-2和0
时间:7月14号00:00:00 23:59:58,7月15日00:00:00 0:0:0
1)for循环(int i=0;i<arr1.length();i++),因为往往会出现问题,买一个小于3000元的智能手机,3000就是一个边界点;邮件小于24小时有效,24小时就是一个边界点,我们可以对23小时59分进行测试,和24小时01分开始测试;
2)还有6-15位,那么就要对5,6 ,7和14位,15位,16位边界点进行测试;
3)设计测试用例的时候,会把等价类和边界值结合在一起用于进行测试用例的设计;
三)判定表:
我认为因果图法画判定表很多余,而且因果图实际上在设计测试用例的时候并没有多大意义
第一步因为在通过判定表设计测试用例的时候,前提也是要找出输入条件和输出条件之间的关系
第二步就是根据输入条件和输出条件找出它们之间的一个对应关系,因果图也是找这样的一个输入和输出之间的关系,前提是画因果图,再将因果图转化成判定表,多此一举;
1)定义:逻辑图,当输入有多个,并且不同的输入的组合对应着不同的输出结果,可以用因果图法来分析这个输入和输出之间的逻辑关系,来设计测试用例,有效地防止漏测;
使用场景:需要进行考虑输入之间的组合关系,不同的组合关系对应的输出结果不同;
输入有多个,不同的输入组合有不同的输出,为了防止漏测,就要用因果图来设计测试用例
2)需求:淘宝618活动,订单已经提交,订单总金额大于300元或者订单有红包,则认为该订单属于有优惠的订单,否则认为此订单没有优惠的订单
3)判定表设计测试用例的步骤:
1)确认输入条件和输出条件
2)找到输入条件和输出条件之间的关系
3)画判定表
4)根据判定表来编写测试用例
一)确认输入输出条件
输入条件:
1)是否提交订单?输入:提交订单,没有提交订单;
2)订单金额是否大于300?输入:金额大于300元或者小于等于300元
3)是否有红包?输入:订单有红包,订单无红包
输出条件:
输出(订单类型):有优惠,没有优惠
二)确认输入输出条件之间的关系
A:提交订单,B:没有提交订单
C:金额大于300元,D:金额小于300元
E:订单有红包,F:订单没有红包
因为所有的情况都要包含A和B,根据排列组合,划分除了以下几种情况:
ADE,ADF,ACE,ACF,BCE,BCF,BDE,BDF,AC,AD,AE,AF
订单已提交,没有红包,订单大于300,有优惠
订单已提交,有红包,金额大于300,有优惠
订单已提交,有红包,订单小于300,有优惠
订单已提交,没红包,订单没有大于300,没有优惠
订单未提交,有红包,订单大于300,没有优惠
订单未提交,无优惠;
红包和金额组成了四种情况:
1)订单没有提交,金额大于300,有红包,没有优惠
2)订单没有提交,金额大于300,没有红包,没有优惠
3)订单没有进行提交,金额小于300,有红包,没有优惠
4)订单没有提交,金额小于300,没有红包没有优惠
三)画判定表:画判定表,使用飞书新建表格
四)根据判定表来编写测试用例
进行组合情况:
四)正交表
定义:针对输入条件进行排列组合,研究多水平,多因素的一种测试用例的设计方法
因素数:输入的条件的个数
水平数:输入的条件对应的取值,不是输出结果
多因素:输入类型的种类,比如说订单已提交,有红包,金额大于300 多水平:对于每一种输入的取值,因素的取值,例如订单已经提交,订单没有进行提交,金额大于300,金额小于300,有红包,没有红包
正交表的性质:想让我们设计正交表非常难,呜呜呜,但是有一个专门生成正交表的工具
1)每一列中,不同的数字出现的次数相等,每一列数字出现的次数是相等的,例如在两水平正交表中,任何一列都有数码"1"与"2",且任何一列中它们出现的次数是相等的,如在三水平正交表中,任何一列都有"1"、"2"、"3",且在任一列的出现数均相等
2)任意两列的数字的组合次数是相同的,假设第一列和第三列进行组合,第一列中的第一行和第三列第一行组合成了ac,又发现第一列的第四行和第三列的第四行有组成了ac,这里的组合是存在先后顺序的,从左向右看,这样子ac组合就出现了两次;那么假设说如果第一列的第二行和第三列的第二行组成的字母组合是bc,那么必定第一列的第N行和第三列的第N行的组成序列是bc,也一定出现两次;
正交表设计测试用例的方法:
根据正交表设计测试用例的步骤:
1) 找出因素数和水平数
2)确定每一个因素的水平
3)根据因素数和水平数确定正交标的行和列
4)根据正交表的性质去填充正交表里面的数据
5)根据正交表的每一行设计测试用例,正交表里面的填写的值都是水平数
6)补充正交表里面没有的,但是你认为比较关键的测试用例
例子:平台支持邮箱注册功能
例如说邮箱注册,在这种情况下只考虑填写和不填写两种情况
填写姓名,邮箱,密码,确认密码,验证码
一)找出因素书和水平数
因素:姓名,邮箱,密码,确认密码,验证码
水平:填写,不填写
针对所有的因素,只有相同的两种取值,就是填写和不填写
二)确定行和列
行=(水平数-1)*因素数+1;
列=因素数
因素数:5
水平数:2
列=因素数=5,行=(水平数-1)*因素数+1=6
为了验证注册的这5个必填项分别在填写和不填写各种情况下的表现,只要这里面有不填写的项,就都会注册失败
三)画正交表:
四)根据正交表编写测试用例
根据这个正交表此时就可以写测试用例了,测试用例为等等等
1)姓名输入,邮箱不输入,密码输入,确认密码输入,验证码不输入,注册失败
2)姓名输入,邮箱输入,密码不输入,密码不输入,验证码不输入,注册失败
五)补充测试用例
除此之外还要考虑姓名,邮箱,密码,确认密码,验证码全部输入;
姓名,密码,邮箱,确认密码,验证码全部不进行输入;
推荐第二种方案:工具设计正交表
1)找到因素数和水平数
2)使用allparis工具来生成正交表
3)根据正交表来填写测试用例
4)补充测试用例
一)找到因素数和水平数
因素数:姓名,电子邮箱,密码,确认密码,验证码
水平数:填写和不填写
二)使用allpairs工具生成正交表,不再使用计算行和列的方式
2.1)下载pairs压缩包进行解压缩,解压缩生成正常的文件夹之后,打开文件看到了allpairs.exe文件
2.2)在飞书里面或者是excel表格里面列出所有的因素数和水平数
2.3)在这个文件夹目录下面新创建一个文本文档txt,把在excel表格中的因素数和水平数进行复制粘贴
2.4)直接点击ctrl+s保存,将文件保存
2.5)打开控制台,直接进行运行
2.5.1)先切换到D盘
2.5.2)切换到pairs目录
2.5.3)执行exe文件,命令里面指明源文件和最终要生成的文件
注意:使用allpairs生成的正交表和实际的正交表有出路,但是仍然是不会影响到我们使用allpairs来设计测试用例,也就是说会有遗漏的测试用例;
三)根据正交表编写测试用例
总结:如何使用allpairs工具生成正交表?
1)把因素数和水平数写入到excel表格中直接进行复制
2)找到allpairs文件夹路径,新建文本将因素数和水平数粘贴到文本中
3)打开cmd,cd到allpairs文件夹路径底下,找到allpairs.exe,在cmd上执行命令,找到allpairs.exe源文件>目标文件,目标文件就是我们生成的正交表
设计测试用例的方法:
5)场景设计法:
主要分为基本事件流和多个备用事件流
总结:找出场景中的每一个功能点,根据每一个功能点的正常的和异常的情况去设计测试用例
以ATM机取款为例:
插卡----->选择语言---->输入密码----->选择取款业务----->输入取款金额------->出钞------>吐卡
1)插卡
1.1)卡插反了,提示请重新插入卡
1.2)卡插错了,插入一些饭卡,会员卡,公交卡,其他无法识别的银行卡1.3)卡无效,卡的磁片消磁,损坏,提示该银行卡无效,注销卡;
2)选择语言
选择英语不能显示是中文,选择中文不能显示英语
3)输入密码
密码输入正确
密码输入错误
1)密码输入共有三次机会,密码第一次输入错误,第二次输入正确,可以取钱
2)密码前两次输入错误,第三次输入正确,可以取钱
3)三次都输入错误,吞卡/账户锁定
4)选择取款业务
1)充值服务
2)存款服务
3)转账服务
5)取款金额
5.1)输入钱数小于等于银行卡总金额,输入钱数大于银行卡金额(系统提示)
5.2)输入的不足整百,不是整百的倍数,选择超过5W的金额,选择刚好是5W的金额,选择小于5W的金额
5.3)超过每日取款限额
5.4)超过每日取款最大次数
5.4)ATM机没钱(输入余额小于银行卡余额)
5.5)取款时,确认取款钱数后,ATM机会吐出相应的钱数
5.6)比如说长时间不取吞出来的钱,ATM机会自动把吐出来的钱收回到ATM机里面
6)等待出钞
6.1)机器计算故障:机器故障导致不出钞,少出钞,多出钞票
6.2)机器停电,ATM机断电,断网,出现故障
6.3)当用户的所有操作都超时,就会出现吞卡,这是一种安全机制;
7)吐卡
7.1)忘记取卡,肯定要吞卡,防止卡丢了,这是一种保护机制
7.2)正常吐卡
7.3)不吐卡
编写测试用例:基本事件流+异常事件流
卡成功插入进ATM机,选择合适的语言,密码输入正确,输入小于银行卡余额的钱数,取钱成功,退卡
6)错误猜测法:这是根据测试人员的直觉,知识,经验,判断软件的哪一块有问题,找哪一个功能模块有问题,专门针对性的设计测试用例
验证码大小写是否进行区分?把输入的搜索信息的前后空格忽略
依赖于测试人员的个人工作经验和积累
测试人员可以用其他设计测试用例的方法设计需求的测试用例,用错误猜测法作为一种补充的方式,这个方法最后再用,一旦有遗漏的测试面,线上就会出现问题
相关文章:

软件测试用例篇(2)
功能测试界面测试兼容性测试安全测试易用性测试性能测试 针对有需求的案例来设计测试用例:邮箱注册,部分测试用例 https://zay1xofb7z6.feishu.cn/mindnotes/bmncnKD5Ak6GSZl3PRlWDgF9z3g#mindmap 一)等价类: 场景需求:姓名长度是6-200位,那么如何进行设…...

leetcode题解-27. Remove Element
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面…...

【fly-iot飞凡物联】(4):在linux系统上搭建arduino环境,可以使用离线包,导入到arduino上即可。
目录前言1,关于2,然后就可以找到ESP32,ESP8266的主版3,方法2,github下载,然后手动添加到ide中吧4,总结前言 本文的原文连接是: https://blog.csdn.net/freewebsys/article/details/108971807 未…...

java实例解析类图中【关联、组合和聚合】的区别
总目录链接==>> AutoSAR入门和实战系列总目录 文章目录 聚合Composition聚合与组合的区别关联是两个独立类之间的关系,它通过它们的对象建立关联。关联可以是一对一、一对多、多对一、多对多。在面向对象的编程中,一个对象与另一个对象通信以使用该对象提供的功能和服…...

基于m-p条件查询代码生成
目录 起因 演示 使用 0.自定义注解 1.定义一个dto的条件查询类 2.调用主程序 效果图 小结 代码 注解 Dto类 完整代码 起因 最近两天一直写后台管理统计的增删改查(很少写增删改查,所以不是很熟练),几乎每个表都要涉及到条件查询的业务…...

【LeetCode】带环链表两道题
第一题:环形链表 问题介绍 给你一个链表的头节点head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos 来表示链表…...

CSS奇思妙想之-利用CSS裁剪(clip-path)完成各种图形
在日常开发当中,如果想要开发多边形,一般都需要多个盒子或者伪元素的帮助,有没有一直办法能只使用一个盒子实现呢? 有的:css裁剪 clip-path介绍 css裁剪(clip-path)这个属性平时率非常低。但是…...

力扣每日一题刷题总结:哈希表篇
剑指 Offer II 033.变位词组 Medium 哈希表 变位词 2023/3/3 给定一个字符串数组 strs ,将 变位词 组合在一起。 可以按任意顺序返回结果列表。 注意:若两个字符串中每个字符出现的次数都相同,则称它们互为变位词。 示例: 示例 1:…...

【Redis】redis大key和大value的危害,如何处理?
前序 还记得上次和同事一起去面试候选人时,同事提了一个问题:Redis的大key有什么危害?当时候选人主要作答的角度是一个key的value较大时的情况,比如: 内存不均:单value较大时,可能会导致节点之…...

Spring Boot:实现MyBatis动态创建表
在有些应用场景中,我们会有需要动态创建和操作表的需求。 比如因为单表数据存储量太大而采取分表存储的情况,又或者是按日期生成日志表存储系统日志等等。这个时候就需要我们动态的生成和操作数据库表了。 而我们都知道,以往我们使用MyBati…...

SpringBoot+Seata在多数据源和feign中的简单使用
SpringBootSeata简单使用 目录seata执行过程安装seata下载seata使用自定义配置文件,NACOS为注册中心结合springboot实现AT模式1.多数据源引入依赖bootstrap.yml配置在使用的方法上用GlobalTransactional注解调用接口正常时调用接口报错时回滚2.配合feignseata优缺点seata执行过…...

计算机网络中的原码、反码、补码
写在前面 原码、反码、补码是计算机组成原理中的概念,是计算机网络的基础知识之一。这些概念是为了处理二进制数的符号位而引入的,常用于计算机中的整数运算,也常用于数据存储和传输等领域。因此,了解和掌握这些概念对于理解计算机…...

七、Bean的实例化方式
Spring为Bean提供了多种实例化方式,通常包括4种方式。(也就是说在Spring中为Bean对象的创建准备了多种方案,目的是:更加灵活) 第一种:通过构造方法实例化第二种:通过简单工厂模式实例化第三种&…...

Windows程序员学习Linux环境下VI(VIM)编辑器的使用方法
我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来重新审视一下Windows程序员如何学习Linux环境知识。由于很多程序在Windows环境下开发好后,还要部署到Linux服务器上去,所以作为Windows程序员有必要学习Linux环境的知识。VI…...

react入门篇
react入门篇前言一、目标二、项目环境三、实现过程(干货满满💥💥💥)1.创建react项目2.arco design UI库3.路由模块化4. 状态管理zustand5. axios6. 路由守卫前言 提示:这里可以添加本文要记录的大概内容&a…...

阿赵的MaxScript学习笔记分享九《可编辑多面体的操作》
大家好,我是阿赵。这是MaxScript学习笔记分享的第九篇,可编辑多面体的操作。不知不觉写了这么多篇了,应该还有几篇就写完了。自己给自己加一下油。 在3DsMax里面如果需要建模,一般使用到的塌陷方式有3种,可编辑的网格、…...

【Redis场景5】集群秒杀优化-分布式锁
集群环境下的秒杀问题 前序 【Redis场景1】用户登录注册 【Redis场景2】缓存更新策略(双写一致) 【Redis场景3】缓存穿透、击穿问题 【Redis场景拓展】秒杀问题-全局唯一ID生成策略 【Redis场景4】单机环境下秒杀问题 在单机环境下的并发问题,我们可以使用相关…...

transformer目标检测开山之作detr
1. 将一个batch的图片输入backone获得feature。 (2,c,w,h)先输入resnet50中,得到(2,2048,w,h)。虽然这里channel不是256,但是在输入e…...

双指针法|位运算|离散化|区间合并
目录 双指针算法 位运算 离散化 序列合并 双指针算法 题目描述:1.输入n个单词,每个单词在输入的时候按空格隔开,之后打印出每个单词且换行 #include<iostream> #include <string>using namespace std; int main() {strin…...

Rockchip Android13 GKI开发指南
Rockchip Android13 GKI开发指南 文章目录Rockchip Android13 GKI开发指南GKI介绍Google upstream kernel下载及编译Rockchip SDK中GKI相关目录介绍Rockchip GKI编译代码修改编译固件烧写KO编译及修改添加新的模块驱动的方法调试ko方法开机log确认uboot阶段Android阶段KO加载KO…...

手把手教你原生JavaScript打造丝滑流畅的轮播图,让你的网站瞬间提升用户体验!
简介 轮播图是网页设计中常见的交互组件之一,用于展示多张图片或内容,让用户能够方便地浏览、切换和选择。本文将介绍如何使用原生 JavaScript 手写一个简单的轮播图,并且通过代码解释实现细节。 目录 简介 HTML 结构 CSS 样式 JavaScr…...

git常用基本操作
克隆远程代码更新本地代码 git clone <-b | -branch> [branch name] [repository URL] git pull #拉取远程仓库代码,更新本地仓库 git merge <branch-name> #合并目标分支 建立本地仓库分支 git branch #查看当…...

剑指 Offer —— 数组和字符串
文章目录剑指 Offer 04. 二维数组中的查找代码实现解题方案 思路算法步骤剑指 Offer 05. 替换空格题目描述代码实现解题方案 思路算法步骤剑指 Offer 11. 旋转数组的最小数字 - 解决方案题目描述剑指 Offer 04. 二维数组中的查找 在一个 n * m 的二维数组中: 每…...

Java 字符编码
编码:数据存储进计算机中需要转换为二进制存储,这个过程就是编码。 解码:计算机读取数据并展示在页面上,需要将二进制转换为人类语言的过程,叫做解码。 乱码:如果编码和解码时使用的码表不一样,…...

ubuntu-9-安装chrony时间同步
使用chrony搭建时间同步服务器 [Linux系列]Chrony时间同步服务器 配置chrony服务,实现服务器时间自动同步 linux上内网环境配置NTP时间同步详解 经验体会:解决Ubuntu 18.04Windows双系统时间不同步的问题 1 时间同步 我们知道一台电脑主机,…...

CMMI流程规范—服务与维护
服务与维护(Service and Maintenance, SM)是指产品销售之后的客户服务和产品维护。客户服务和产品维护的宗旨就是提高客户对产品以及对开发方的满意度。服务与维护过程域是SPP模型的重要组成部分。本规范阐述了服务与维护过程域的两个主要规程࿱…...

【蓝桥杯集训12】DFS(3 / 5)
目录 842. 排列数字 - DFS按位置枚举 843. n-皇后问题 - DFS按行枚举 165. 小猫爬山 - DFS枚举小猫 1209. 带分数 - DFS 3502. 不同路径数 - 842. 排列数字 - DFS按位置枚举 活动 - AcWing 题目: 给你一个整数n 要求将1~n的所有排列情况列出 比如:…...

Elasticsearch:构建自动补全功能 - Autocomplete
什么是自动补全(autocomplete)功能呢?我们举一个很常见的例子。 每当你去谷歌并开始打字时,就会出现一个下拉列表,其中列出了建议。 这些建议与查询相关并帮助用户完成查询。 Autocomplete 正如维基百科所说的…...

One UI 5.1 更新来了
之前一直在关注One UI 5.0里提到的视频通话背景功能模块,结果5.0版本推送的时候没有引入,有先行者计划博主说是5.1里肯定会有的;前一两天One UI 5.1更新来了,然而该功能还是没有引入,表示很遗憾;本次更新新…...

Python学习笔记11:文件
文件 打开文件 函数open的参数mode的最常见取值 值描述‘r’读取模式(默认值)‘w’写入模式‘x’独占写入模式‘a’附加模式‘b’二进制模式(与其他模式结合使用)‘t’文本模式(默认值,与其他模式结合使…...