毛泽东说:“我一生最大的爱好是读书”,“饭可以一日不吃,觉可以一日不睡,书不可以一日不读”。
学习是文明传承之途、人生成长之梯、政党巩固之基、国家兴盛之要。
---谈论学习也不行?
退伍回来10个多月,奈何没有相关的软件测试工作经验和经历,而且毕业四五年没碰过了软件专业了,加之现在疫情的变化无常,报培训班时间不够自由,所以回来边恶补专业知识,边找相关工作。只能是四处碰壁,让我学习的欲望更加强烈。
今天也恰巧看到CSDN话题挑战赛第2期中的《学习笔记》这个参赛话题很符合我,正好把我近期学习的(四)自动化测试-unittest框架简单总结一下,方便自己以后找出来看看。
参赛话题:学习笔记
目 录
一、前期脚本问题
1、测试用例过多,只能单一执行,或者导包执行。
2、断言方式简单且不实用,日志只能体现在控制台输出,无法体现在报告中。
3、无法体现测试报告中的效果:测试用例数量、执行数量、通过数量、失败数量以及失败原因。
二、融入unittest框架
不仅仅是代码级别的功能测试、逻辑覆盖
1、unittest框架好处
(1)提供用例组织与执行
(2)提供丰富的断言方法
(3)提供丰富的日志和报告(HTML格式更直观展示)
2、unittest框架工作原理
(1)Fixture(固定件)
TestCase:测试用例、脚本
TestSuite:测试集合、套件、文件夹、统一管理多条测试用例
TestRunner:测试运行器
TestLoader:测试用例加载器
TestRusult:测试结果、字典类型
(2)单元测试代码段
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author:bigbear
# datetime:2022/9/3 16:39
# software: PyCharm
"""
单元测试:
测试对象:类中的方法(函数)
"""
class MyMath:
"""定义运算函数:实现加减乘除算法"""
@staticmethod
def add(a, b):
"""加法"""
# 测试问题:若a是字符串,b是整型,应该是字符串拼接运算
if isinstance(a, str) and isinstance(b, int):
b = str(b)
return a + b
else:
return a + b
@staticmethod
def subtract(a, b):
"""减法"""
return a - b
@staticmethod
def multiply(a, b):
"""乘法"""
return a * b
@staticmethod
def divide(a, b):
"""除法"""
if b == 0:
return "除数不能是0,小学生都知道的啊"
else:
return a / b
if __name__ == '__main__':
"""单元测试-代码功能验证"""
mm = MyMath()
# 实现第一条加法测试用例
actual_value = mm.add(1, 1)
expect_value = 2
if actual_value == expect_value:
print("加法功能实现正确")
# 实现第二条加法测试用例:can only concatenate str (not "int") to str
try:
actual_value = mm.add("a", 1)
expect_value = "无法运算"
if actual_value == expect_value:
print("加法功能实现正确")
except Exception as e:
print(f"加法功能实现正确:{e}")
# 实现第三条加法测试用例
try:
actual_value = mm.add("a", "b")
expect_value = "ab"
if actual_value == expect_value:
print("加法功能实现正确")
except Exception as e:
print(f"加法功能实现正确:{e}")
三、unittest框架拆分介绍
1、导入unittest包
import unittest
2、创建测试用例类
继承单元测试框架的单元测试用例的类unittest.TestCase
class MyMathUnittest(unittest.TestCase):
"""继承单元测试框架的单元测试用例类"""
3、测试用例类中的五种特殊方法(包含使用场景及执行顺序)
setUp()、test_xxx()、tearDown()执行顺序与位置无关,且每执行一条测试用例,setUp()和tearDown()都会执行一次(无论该测试用例是否通过)。
@classmethod注解的方法是类方法,不用创建对象也可以用的方法,在对象进入内存之前就已经存在的方法,随着类一起进内存。
(1)setUp() # 初始化、环境搭建
(2)test_xxx() # 测试用例方法、步骤
(3)tearDown() # 还原测试用例环境
(4)@classmethod-setUpClass() # 对当前测试用例类的所有测试用例进行初始化,只在类执行开始执行一次
(5)@classmethod-tearDownClass() # 对当前测试用例类的所有测试用例资源进行释放,只在类执行结束执行一次
import unittest
# from importlib import import_module
from my