- 一、前言
- 二、简单运用
- 三、TestCase测试用例
- 四、TestSuite多条测试用例集合在一起
- 五、夹具Fixture 测试用例方法前后执行功能
- 1、案例
- 六、defaultTestLoader 测试多个文件
- 七、defaultTestLoader与TestSuite区别
- 八、unittest 中用于 skip 跳过 test method, test class,的相关装饰器
- 九、断言
- 十、生成测试报告HTML格式
- 十一、完整的接口测试用例
- 十二、用例组织及运行
- 十三、生成测试报告
- 1、生成文本报告
- 2、生成HTML报告
- 十四、总结
1、UintTest是python内置的单元测试框架,具备编写用例、组织用例、执行用例、输出报告等自动化框架的条件
2、UintTest单元测试框架不仅适用于单元测试,还可以适用WEB自动化测试、接口自动化测试的开发与执行。用处还是比较广的
UintTest框架重要的概念 1、使用UintTest前需要了解该框架的四个概念,即Test Case、Test Suite、Test Fixture、Test Runner
二、简单运用-
概念:UnitTest框架是专门用来进行执行代码测试的框架
-
使用UnitTest框架原因: 1、能够组织多个用例去执行 2、提供丰富的断言方法 3、提供丰富的日志与测试结果
-
核心要素 1、TestCase 测试用例 2、TestSuite 测试组(多个测试用例合到一起) 3、TextTestRunner文本执行 4、Fixture 测试用例加头尾
# TestCase
import unittest
def add(x, y):
return x + y
# 错误显示
# return x / y
class Testcase_01(unittest.TestCase):
"""测试用例"""
def test_01(self): # 测试方法必须以test开头
print(add(1,1))
# 错误显示
# print(add(1,0))
# def test_02(self):
# ...
# def test_03(self):
# ...
if __name__ == '__main__':
unittest.main()
# 正确结果:
.
2
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
# 错误结果:
E
======================================================================
ERROR: test_01 (__main__.Testcase_01)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:/Users/x1c/Desktop/untitled/mocktest.py", line 8, in test_01
print(add(1,0))
File "C:/Users/x1c/Desktop/untitled/mocktest.py", line 4, in add
return x / y
ZeroDivisionError: division by zero
----------------------------------------------------------------------
Ran 1 test in 0.000s
FAILED (errors=1)
四、TestSuite多条测试用例集合在一起
import unittest
# 导包
import unittest
def add(a, b):
return a + b
# 继承unittest.TestCase类
class TestCase01(unittest.TestCase):
# 在每条用例执行前执行
def setUp(self):
print("setUp")
# 在每条用例执行后执行
def tearDown(self):
print("tearDown")
# 方法名必须以test开头
def testcase_01(self):
print("testcase_01")
print("1 + 1 = ", add(1, 1))
# self.assertEqual(2, add(1, 2))
def testcase_02(self):
print("testcase_02")
print("2 + 2 = ", add(2, 2))
def testcase_03(self):
print("testcase_03")
print("3 + 3 = ", add(3, 3))
class TestCase02(unittest.TestCase):
# 方法名必须以test开头
def testcase_01(self):
print("TestCase02_testcase_01")
def testcase_02(self):
print("TestCase02_testcase_02")
def testcase_03(self):
print("TestCase02_testcase_03")
# 实例化TestSuite类
suite = unittest.TestSuite()
# 以测试用例类里的每一个方法为单位添加
# suite.addTest(TestCase01("testcase_01"))
# suite.addTest(TestCase01("testcase_02"))
# suite.addTest(TestCase02("testcase_02"))
# 以测试用例类为单位添加
suite.addTest(unittest.makeSuite(TestCase01))
suite.addTest(unittest.makeSuite(TestCase02))
runner = unittest.TextTestRunner()
runner.run(suite)
五、夹具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
1、案例# 导包
import unittest
def add(a, b):
return a + b
# 继承unittest.TestCase类
class TestCase01(unittest.TestCase):
# 在每条用例执行前执行
def setUp(self):
print("setUp")
# 在每条用例执行后执行
def tearDown(self):
print("tearDown")
# 方法名必须以test开头
def testcase_01(self):
print("testcase_01")
print("1 + 1 = ", add(1, 1))
# self.assertEqual(2, add(1, 2))
def testcase_02(self):
print("testcase_02")
print("2 + 2 = ", add(2, 2))
def testcase_03(self):
print("testcase_03")
print("3 + 3 = ", add(3, 3))
class TestCase02(unittest.TestCase):
# 方法名必须以test开头
def testcase_01(self):
print("TestCase02_testcase_01")
def testcase_02(self):
print("TestCase02_testcase_02")
def testcase_03(self):
print("TestCase02_testcase_03")
if __name__ == '__main__':
unittest.main()
结果:
......
setUp
----------------------------------------------------------------------
testcase_01
Ran 6 tests in 0.001s
1 + 1 = 2
tearDown
OK
setUp
testcase_02
2 + 2 = 4
tearDown
setUp
testcase_03
3 + 3 = 6
tearDown
TestCase02_testcase_01
TestCase02_testcase_02
TestCase02_testcase_03
六、defaultTestLoader 测试多个文件
# 某个目录下存在多个测试文件,命名规范,如test1.py test2.py 可以写成test*.py
suite = unittest.defaultTestLoader.discover('测试用例.py路径', pattern='*.py')
# 创建测试运行环境
runner = unittest.TextTestRunner()
# 运行测试
runner.run(suite)
七、defaultTestLoader与TestSuite区别
TestSuite可以添加TestCase中所有test开头的方法和添加指定的test开头方法; defaultTestLoader搜索指定目录下指定开头.py文件,并添加TestCase内所有test开头的方法,不能指定添加方法;
提示:defaultTestLoader属于TestSuite另一种实现方式;
八、unittest 中用于 skip 跳过 test method, test class,的相关装饰器可以使用unitest.skip装饰器族跳过test method或者test class,这些装饰器包括: ① @unittest.skip(reason):无条件跳过测试,reason描述为什么跳过测试 ② @unittest.skipif(conditition,reason):condititon为true时跳过测试 ③ @unittest.skipunless(condition,reason):condition不是true时跳过测试
class MyTestCase(unittest.TestCase):
@unittest.skip("demonstrating skipping")
def test_nothing(self):
self.fail("shouldn't happen")
# 判断条件, 条件成立不执行,4
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?