测试方法:
按照是否执行进行分类:静态测试,动态测试
按照测试手段分类:手工测试,自动化测试
按照测试对象进行分析:
黑盒测试 -对象:系统功能测试
-优点:简单
-缺点:介入时间短,发现重大bug时难以修复
-评估标准:需求覆盖率100%
灰盒测试 -对象:系统模块间接口
-优点:介入时间早于黑盒测试
-缺点:需要测试有相应的代码能力
-评估标准:接口覆盖率(不一定100%)
白盒测试 -对象:代码,函数
-优点:介入时间早
-缺点:测试人员需要代码能力
-评估标准:逻辑覆盖率
单元测试目的
为什么要做单元测试,以及适用项目
价值:提前介入测试,发现代码级别bug
适用项目:大型的,项目周期长
新系统,新团队
涉及财产,生命的项目
UT开展流程
UT计划
1 确定单元测试范围
依据标准:二八原则(20%的代码中隐藏80%的缺陷)
如何确定20%的代码:使用频率-高
复用性-全新的,部分复用,全部复用(全新的即需要单元测试)
开发人员背景-技术背景,业务背景
复杂度-一般认为复杂度在七级以上的20%的代码
2 确定评估标准
逻辑覆盖率
-
语句覆盖率
-
什么是语句:非分支判断
-
练习:输入一个数字,判断是否大于0,如果大于0,对该数字-1,否则+1
-
计算方式:被测的语句/全部的语句
-
语句分别为:B[输入代码],D1[执行+1操作],D2[执行-1操作]
输入数字3:语句覆盖率为2/3
输入数字-1:语句覆盖率为2/3
整体覆盖率为100%
分支覆盖率
- 分支if语句的2个分支
- 计算方式:被测试的分支
输入数字5,分支覆盖率1/2
条件覆盖率
-
什么是条件:结果为true或false
-
计算方式:被测条件数/全部条件数
> 输入数字3,条件覆盖率为1/2
输入admin,123456,条件覆盖率为为2/4 --username==“admin” 为true,password == "123456"为true
输入zhangyiqi,123456,条件覆盖率为为1/4 --username==“zhangyiqi” 为false,后面判断直接断路不执行
输入admin,634444,条件覆盖率为为2/4 --username==“zhangyiqi” 为true,password == "123456"为false
输入admin,123456,条件覆盖率为为1/4 --username==“admin” 为true,后面不执行
输入zhangyiqi,123456,条件覆盖率为为2/4 --username==“zhangyiqi” 为false,password == "123456"为true
输入admin,634444,条件覆盖率为为1/4 --username==“admin” 为true,后面不执行
输入a:3,b:6 ,条件覆盖率为 3/8 -->执行的语句有 a >5 false;a==5 false;c
输入a:6,b:3 条件覆盖率为 2/8 -->执行的语句有 a >5 true ;b<5 true
输入a:6,b:6 条件覆盖率为 4/8 -->执行的语句有 a >5 true ;b<5 false;a==5 false;b<10 true
输入:admin,123456 条件覆盖率:3/8 —> admin true,123456 true,admin false
输入:fanbinbin,123456 条件覆盖率:2/8 -->fanbinbin flase,fanbinbin flase,
路径覆盖率
-
什么是路径:从开始到结束的过程
-
计算公式:被测路径数/全部路径数
分支-条件覆盖率
- 分支-条件:分支-条件的组和
- 计算方式:被测分支数+被测条件数/全部分支数+全部条件数
测试策略
输入:admin,654321
语句覆盖率:4/6 -->输入用户名,输入密码,后台登录失败,前端登录失败
分支覆盖率:2/4 -->后台登录失败,前端登录失败
条件覆盖率:3/8 admin true;654321 false;admin false
分支条件覆盖率:5/12
路径覆盖概率:1/4
UT设计
测试策略
- 自顶向上:
从最上层函数开始逐层开展测试(不怎么使用)
注意:需要对函数中调用的函数打桩(模拟调用的函数)
测试成本高
- 自顶向下:
从最下层函数开始逐级向上开展测试
测试周期长
孤立策略:
选择需要进行的测试函数即可(一般选择这个)
UT实现
步骤
1,先将测试代码转为流程图
2,将流程图转化为流图
-
流图只有圈和线
- 圈:判定框中的条件或者一条或者多条语句
- 线:带有线头指向的连接
-
通过流程图描述的是程序的复杂度(圈复杂度)
- 路径个数就是描述复杂程度的级别
-
确定测试路径
-
编写测试用例
例elif判断
例while循环
循环体为重复代码不需要重复测试
例三角形判断
UT执行
借助单元测试框架unittest
编写测试用类执行测试
读取数据的方式
使用xml文件的读取方式
导包 from xml.dom import minidom
打开xml文件 root = minidom.parse(“文件路径/文件名”)
找到节点 firstnode = root.getElementsByTagName(“标签名”)[索引]
找打节点上的值 secondnode = firstnode.getElementsByTagName(“标签名”)[索引].firstChild.data
使用csv文件的读取方式
注意:csv文件以逗号隔开
读取操作:
导包 import csv
打开并读取csv文件内容 csv.reader(open(“文件路径/csv文件”, “r”))
遍历循环读取内容 数据类型为列表
但会数据待使用