测试策略设计与实现

1. 什么是单元测试策略?

概念:针对单元测试选择测试的一种方式

2. 单元测试策略-方式

1. 自上向下
2. 自下向上
3. 孤立策略    

2.1 策略 自上向下

方式:从最上层函数往下开始逐层测试

案例1

两个函数(求和、求减),求和函数内调用求减函数;

案例1分析

1. 编写求和函数
2. 编写求减函数
3. 在求和函数内调用求减函数
4. 调用求和函数

代码:

# 定义求和函数
def sum(a,b):
    print(a+b)
    sub(a,b)

# 打桩
def sub(a,b):
    return 20

# # 定义求减函数
# def sub(a,b):
#     print(a-b)

if __name__ == '__main__':
    sum(10,5)

 案例1 问题

1. 我们只想测试求和函数不测求减函数该如何做?

答:打桩

概念:打桩就是模拟编写一个我们需要引用的函数

提示:一般我们只模拟写个函数名,直接返回相应的结果即可
示例:
     def fun_1(self):
         return true

自上向下-总结:

1. 方式
2. 打桩(模拟调用的函数)
3. 缺点(成本高)

2.2 策略 自下向上

方式:从最底层函数往上开始逐层测试

自下向上-总结:

1. 方式
2. 缺点(周期长)

2.3 策略 孤立策略

方式:选择需要进行测试的函数进行测试

孤立策略-总结:

1. 方式
2. 【推荐使用】
3. 优点:选择重要的代码进行测试

3. 测试策略实现

3.1 什么是测试策略实现?

概念:把我们选定的代码,转向流程图、流图及用例的过程

3.2 测试策略实现如何操作?

1. 将测试代码转换成流程图
2. 根据流程图转换为流图

案例2

函数(test001)判断参数a,如果a>0,输入语句1;

代码:

def test001(a):
    if a>0:
        print("语句1被执行")

if __name__ == '__main__':
    test001(0)

案例2 流程图

什么是流图?

概念:表达程序业务逻辑的复杂度一种示意图
构成:   
     1) 圈:判断条件、语句块(一条或多条语句)两者都圈    
     2) 线:箭头指向的线,用来连接圈和圈的指向    

流图的目的?

    1) 确定单元的复杂度级别
    2) 确定测试用例

备注: 路径的个数为复杂度的级别(一条路径为1个复杂度级别)

案例2 流图

测试用例 模板

案例2 总结

1. 路径:2 (1-2-3,1-3)
2. 复杂度:2
3. 用例个数:2

案例3

函数(test002)判断参数a,b;如果a>0 and b<10  输入语句1;否则输入语句2;

代码

# 函数(test002)判断参数a,b;如果a>0 and b<10  输入语句1;否则输入语句2;
def test002(a,b):
    if a>0 and b<10:
        print("语句1被执行")
    else:
        print("语句2被执行")

if __name__ == '__main__':
    test002(-1,1)

流程图和流图

案例4

输入两个数,如果两个数同时为大于0小于10,那么就进行求和运算;否则判断两个数是否同时大于等于10小于20那么
就进行求减运算,否则输入错误;

代码: 

# 输入两个数,如果两个数同时为大于0小于10,那么就进行求和运算;否则判断两个数是否同时大于等于10小于20那么
# 就进行求减运算,否则输入错误

a=int(input("请输入第一个数:"))
b=int(input("请输入第二个数:"))
if a>0 and b>0 and a<10 and b<10:
    print(a+b)
elif a>=10 and b>=10 and a<20 and b<20:
    print(a-b)
else:
    print("输入错误")

流程图与流图

案例5 while循环

使用while循环求1-10相加之和;

代码:

sum=0
i=1
while i<=10:
    sum+=i
    i+=1

if __name__ == '__main__':
    print(sum)

流程图和流图

案例6

提示输入三角形三条边,进行判断三角形类型(等边、等腰、普通)并进行提示,否则提示不是三角形;

提示:
三角形:两边之和大于第三边;
等腰三角形:两条边相等
等边三角形:三条边相等

代码:

a=int(input("请输入第一条边:"))
b=int(input("请输入第二条边:"))
c=int(input("请输入第三条边:"))
# def sjx(a,b,c):
    # 首先判断是否为三角形
if a+b>c and a+c>b and b+c>a:
    if a==b and b==c:
        print("等边三角形")
    elif a==b or b==c or a==c:
        print("等腰三角形")
    else:
        print("普通三角形")
else:
    print("不是三角形")

发布了240 篇原创文章 · 获赞 77 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/dpl12/article/details/104214246