1-什么是UnitTest框架
概念:UnitTest框架是专门用来进行执行代码测试的框架
2-为什么要使用UnitTest框架?
- 能够组织多个用例去执行
- 提供丰富的断言方法
- 提供丰富的日志与测试结果
3-UnitTest核心要素
- TestCase
- TestSuite
- TextTestRunner
- Fixture
3.1-TestCase
点击查看代码
说明:(翻译:测试用例)一个TestCase就是一条测试用例;
使用:
1. 导包:import unittest --> 导入unitest框架
2. 继承:unittest.TestCase --> 新建测试类继承unittest.TestCase
提示:
1). 测试用例:在自动化测试中,一条用例就是一个完整的测试流程;
2). 测试方法名称命名必须以test开头;
(原因:unittest.TestCase类批量运行的方法是搜索执行test开头的方法)
3.2-TestSuite (翻译:测试套件)
点击查看代码
说明:多条测试用例集合在一起,就是一个TestSuite;
使用:
1. 实例化: suite = unittest.TestSuite() ——>(suite:为TestSuite实例化的名称)
2. 添加用例:suite.addTest(ClassName("MethodName")) ——>(ClassName:为类名;MethodName:为方法名)
3. 添加扩展:suite.addTest(unittest.makeSuite(ClassName))
(搜索指定ClassName内test开头的方法并添加到测试套件中)
提示:
1). 一条测试用例(.py)内,多个方法也可以使用测试套件
2). TestSuite需要配合TextTestRunner才能被执行
3.3-TextTestRunner (翻译:执行测试用例)
点击查看代码
说明:是用来执行测试用例套件
使用:
1. 实例化: runner=unittest.TextTestRunner() ——>(runner:TextTestRunner实例化名称)
2. 执行: runner.run(suite) ——>(suite:为测试套件名称)
3.4-Fixture
点击查看代码
说明:是一个概述,对一个测试用例环境的搭建和销毁就是一个Fixture;
使用:
1. 初始化(搭建):def setUp(self) --> 首先执行
(setUp:此方法继承于unittest.TestCase)
2. 结束(销毁): def tearDown(self) --> 最后执行
(tearDown:此方法继承于unittest.TestCase)
提示:
1. 必须继承unittest.TestCase类,setUp、tearDown才是一个Fixture;
2. setUp:一般做初始化工作,比如:实例化浏览器、浏览器最大化、隐式等待设置
3. tearDown:一般做结束工作,比如:退出登录、关闭浏览器
4. 如果一个测试类有多个test开头方法,则每个方法执行之前都会运行setUp、结束时运行tearDown
4-defaultTestLoader
点击查看代码
说明:
使用unittest.defaultTestLoader()类,通过该类下面的discover()方法自动搜索指定目录下指定开头
的.py文件,并将查找到的测试用例组装到测试套件;
用法:
test_dir = '../'
disconver = unittest.defaultTestLoader.discover(test_dir, pattern='test*.py')
——>(test_dir为要指定的目录 ./为当前目录;pattern:为查找的.py文件的格式 ;test:代表文件开头是test,*:通配符,匹配所有)
运行:
runner=unittest.TextTestRunner()
runner.run(disconver)
5-defaultTestLoader与TestSuite区别
点击查看代码
1. TestSuite可以添加TestCase中所有test开头的方法和添加指定的test开头方法;
2. defaultTestLoader搜索指定目录下指定开头.py文件,并添加TestCase内所有test开头的方法,不能指定添加方法;
提示:defaultTestLoader属于TestSuite另一种实现方式;
使用案例
结构目录介绍
unittest_07.py
点击查看代码
import unittest
def add(a, b):
return a + b
class TestCase01(unittest.TestCase):
def testcase_01(self):
print('testcase_01')
print('1 + 1 =', add(1, 1))
def testcase_02(self):
print('testcase_02')
print('6 + 8 =', add(6, 8))
unnittest_08.py
点击查看代码
import unittest
from untest_07 import TestCase01
suite = unittest.TestSuite()
# 以测试用例类里的每一种方法为单位添加
suite.addTest(TestCase01("testcase_01"))
suite.addTest(TestCase01("testcase_02"))
runner = unittest.TextTestRunner()
runner.run(suite)
-----------------------------------------运行结果---------------------------------------------------------------------------------
C:UsersXXXXXXScriptspython.exe D:/XXX/自动化测试/案例演示/unittest_08.py
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
testcase_01
1 + 1 = 2
testcase_02
6 + 8 = 14
Process finished with exit code 0
unnittest_08.py
点击查看代码
import unittest
from untest_07 import TestCase01
suite = unittest.TestSuite()
# 以测试用例类为单位添加
suite.addTest(unittest.makeSuite(TestCase01))
runner = unittest.TextTestRunner()
runner.run(suite)
-------------------------运行结果---------------------------------------------------
C:UsersXXXXXXScriptspython.exe D:/XXX/自动化测试/案例演示/unittest_08.py
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
testcase_01
1 + 1 = 2
testcase_02
6 + 8 = 14
Process finished with exit code 0
defaultTestLoader方法案例
test01.py
点击查看代码
import unittest
def add(a, b):
return a + b
class TestCase01(unittest.TestCase):
def testcase_01(self):
print('test01.py里面的testcase_01方法')
print('1 + 1 =', add(1, 1))
def testcase_02(self):
print('test01.py里面的testcase_02方法')
print('6 + 8 =', add(6, 8))
test02.py
点击查看代码
import unittest
def add(a, b):
return a + b
class TestCase01(unittest.TestCase):
def testcase_01(self):
print('test02.py里面的testcase_01方法')
print('3 + 1 =', add(3, 1))
def testcase_02(self):
print('test02.py里面的testcase_02方法')
print('10 + 7 =', add(10, 7))
demo_1.py
点击查看代码
import unittest
discover = unittest.defaultTestLoader.discover('./cases', pattern="test*.py")
runner = unittest.TextTestRunner()
runner.run(discover)
-------------------运行结果-----------------------------
C:UsersXXXXXXScriptspython.exe D:/XXX/自动化测试/demo_09.py
....
----------------------------------------------------------------------
Ran 4 tests in 0.000s
OK
test01.py里面的testcase_01方法
1 + 1 = 2
test01.py里面的testcase_02方法
6 + 8 = 14
test02.py里面的testcase_01方法
3 + 1 = 4
test02.py里面的testcase_02方法
10 + 7 = 17
Process finished with exit code 0