Selenium3自动化测试【37】单元测试Unittest(2)
引言
unittest是Python标准库中自带的单元测试框架。unittest可以组织执行测试用例,并且提供了丰富的断言方法,可以判断测试用例是否通过,最终生成测试结果。
同步视频知识与系列知识内容,可关注:【公众号】:柒哥测试;【WX】:Lee-890;
1. UnitTest介绍
用uinittest单元测试框架可以进行web自动化测试。
由于unittest是Python标准库中自带的单元测试框架,因此安装完Python后就存在,无需单独安装。
2.UnitTest核心要素
unittest核心的要素是TestCase,TestSuite,TextTestRunner,Fixture。
2.1 TestCase:测试用例
- 一个TestCase就是一个测试用例。
- 一个测试用例就是一个完整的测试流程,包括测试前环境准备(SetUp),执行测试代码(run),以及测试后环境的还原(tearDown)。
- 一个测试用例就是一个完整的测试单元,通过运行这个测试单元,可以对某一个问题进行验证。用户定义测试用例需要继承TestCase类。
一个测试用例是在unittest中执行测试的最小单元。它通过unittest提供的assert方法来验证一组特定的操作和输入以后得到的具体响应。unittest提供了一个名称为TestCase的基础类(unittest.TestCase),可以用来创建测试用例。
2.2 TestSuite:测试套件
一个测试套件(TestSuite)是多个测试用例的集合,是针对被测程序对应的功能和模块创建的一组测试,一个测试套件内的测试用例将一起执行。
- TestSuite()是测试用例集合;
- 通过addTest()方法手动把TestCase添加到TestSuite中,也可通过TestLoader把TestCase自动加载到TestSuite(TestCases之间不存在现后顺序)。
2.3 TextTestRunner:测试执行器
测试执行器负责测试执行调度并且生成测试结果给用户。
TestTestRunner是运行测试用例的驱动类,其中的run方法可以执行TestCase、TestSuite。
2.4 TextTestResult:测试报告
测试报告用来展示所有执行用例的成功或者失败状态的汇总,执行失败的测试步骤的预期结果与实际结果,还有整体运行状况和运行时间的汇总。
2.5 Fixture:测试夹具
通过使用Fixture,可以定义在单个或多个测试执行之前的准备工作和测试执行之后的清理工作。
- 对一个测试用例环境的搭建和销毁,就是一个Fixture,通过覆盖TestCase的setUp()和tearDown()方法来实现;
- 如在测试用例中需要访问数据库,那么可以在setUp()中建立数据库连接并进行初始化。测试用例执行后需要还原环境。 tearDown的过程很重要,要为以后的TestCase留下一个干净的环境。如在tearDown()中需要关闭数据库连接。
3. 工作流程
unittest的整个流程如下:
- 首先需要编写TestCase;
- 再把TestCase添加到TestSuite中;
- 再由TextTestRunner来执行TestSuite;
- 运行的结果保存在TextTestResult中。
整个过程集成在unittest.main模块中。
4. UnitTest案例实战
4.1 UnitTest案例准备
通过PyCharm在工程目录下,创建UnitTestDemo的Python package,UnitTest的案例均存放在UnitTestDemo下。
1. 创建基础待测方法
在UnitTestDemo下新建mathfunc.py文件,代码如下:
加法,返回a+b的值
def add(a,b):
return a+b
# 减法,返回a-b的值
def minus(a,b):
return a-b
# 乘法,返回a*b的值
def multi(a,b):
return a*b
# 除法,返回a/b的值
def divide(a,b):
return a/b
2. 设计测试用例
为前面的测试方法设计测试用例,在UnitTestDemo下创建test_mathfunc.py,代码如下:
import unittest
from UnitTestDemo.mathfunc import *
class TestMathFunc(unittest.TestCase):
"""测试mathfunc.py"""
def test_add(self):
"""测试加法add()"""
self.assertEqual(3,add(1,2))
self.assertNotEqual(3,add(2,2))
def test_minus(self):
"""测试减法minus"""
self.assertEqual(1,minus(3,2))
def test_multi(self):
"""测试乘法multi"""
self.assertEqual(6,multi(2,3))
def test_divide(self):
"""测试除法divide"""
self.assertEqual(2,divide(6,3))
self.assertEqual(2.5,divide(5,2))
4.2 组织与设定测试用例的执行顺序
通过PyCharm在工程目录下,创建UnitTestDemo的Python package,UnitTest的案例均存放在UnitTestDemo下。
测试套件(TestSuite)是多个测试用例的集合,是针对被测程序的对应的功能和模块创建的一组测试。
通过TestSuite()的addTest()方法手动把TestCase添加到TestSuite中,或通过TestLoader把TestCase自动加载到TestSuite中。
1. 创建测试套件
执行单条用例调用addTest()方法,在UnitTestDemo下创建test_suite.py,代码如下:
import unittest
from UnitTestDemo.test_mathfunc import TestMathFunc
if __name__ == "__main__":
suite = unittest.TestSuite()
# addTest()添加单个TestCase
suite.addTest(TestMathFunc("test_multi"))
runner = unittest.TextTestRunner()
runner.run(suite)
执行多条测试用例addTests()方法, test_suite.py代码如下:
import unittest
from UnitTestDemo.test_mathfunc import TestMathFunc
if __name__ == "__main__":
suite = unittest.TestSuite()
# addTest()添加单个TestCase
#suite.addTest(TestMathFunc("test_multi"))
# addTests()执行加法、减法、除法
tests = [TestMathFunc("test_add"),TestMathFunc("test_divide"),TestMathFunc("test_minus")]
suite.addTests(tests)
runner = unittest.TextTestRunner()
runner.run(suite)
精讲视频
如果你觉的文章读的不过瘾,可以查看详细的视频教程。
- 《移动端[App]测试必备技能》
地址:https://ke.qq.com/course/2145019 - UI自动化测试:Selenium3自动化测试
地址:https://ke.qq.com/course/3172187?tuin=9c43f38e - 《全栈测试系列视频》课程
地址:https://ke.qq.com/course/2525707?tuin=9c43f38e
测试学习路线如下
热销图书
图书京东、当当有售
京东图书地址
当当图书地址
同步视频知识与系列知识内容,欢迎可关注:【公众号】:柒哥测试;或【WX】:Lee-890交流