【unittest】unittest基础01
一、什么是unittest
unittest是Python单元测试框架,类似于JUnit框架。
unittest中有4个重要的概念:test fixture、 test case、 test suite,、test runner
Testcase:一个TestCase的实例就是一个测试用例(包括测试前准备环境的搭建(setUp),执行测试代码 (run),以及测试后环境的还原(tearDown)。
Test suite:多个测试用例集合在一起,就是TestSuite,而且TestSuite也可以嵌套TestSuite。
Test runner:其中的run(test)会执行TestSuite/TestCase中的run(result)方法。
Test fixture:对一个测试用例环境的搭建和销毁,是一个fixture,通过覆盖 TestCase的setUp()和tearDown()方法来实现
TestLoader:是用来加载TestCase到TestSuite中的,其中有几个loadTestsFrom__()方法,就是从各个地方寻找TestCase,创建它们的实例,然后add到TestSuite中,再返回一个TestSuite实例。
二、简单用法
unittest是python自带的一个单元测试框架,类似于java的junit,基本结构是类似的。基本用法如下:
1.用import unittest导入unittest模块 2.定义一个继承自unittest.TestCase的测试用例类,如class xxx(unittest.TestCase): 3.定义setUp和tearDown,这两个方法与junit相同,即如果定义了则会在每个测试case执行前先执行setUp方法,执行完毕后执行tearDown方法。 4.定义测试用例,名字以test开头,unittest会自动将test开头的方法放入测试用例集中。 5.一个测试用例应该只测试一个方面,测试目的和测试内容应很明确。主要是调用assertEqual、assertRaises等断言方法判断程序执行结果和预期值是否相符。 6.调用unittest.main()启动测试
三、unittest模块的常用方法
assertEqual(a, b) a == b assertNotEqual(a, b) a != b assertTrue(x) bool(x) is True assertFalse(x) bool(x) is False
实例展示01:
import unittest
class TestSample(unittest.TestCase):
#类共享的fixture,在整个测试类开头执行一次
@classmethod
def setUpClass(cls):
print('整个测试类只执行一次 --start')
#测试用例fixture
def setUp(self):
print('每给测试开始前执行一次')
#测试用例默认以test开头
def test_equal(self):
self.assertEqual(1,1)
def test_not_equal(self):
self.assertNotEqual(1,0)
#测试用例fixture
def tearDown(self):
print('每个测试结束后执行一次')
#整个测试列结束执行一次
@classmethod
def tearDownClass(cls):
print('整个测试类只执行一次 --End')
if __name__ == '__main__':
unittest.main()
实战参考代码:
新建lagouTest项目:

itesting_test代码:
import unittest
class ITestingTest(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
print("整个测试类支持一次 --start")
def setUp(self) -> None:
print('整个测试开始前执行一次')
# 测试用例默认以test开头
def test_equal(self):
self.assertEqual(1, 1)
def test_not_equal(self):
self.assertNotEqual(1, 0)
# 测试用例fixture
def tearDown(self):
print('每个测试结束后执行一次')
# 整个测试列结束执行一次
@classmethod
def tearDownClass(cls):
print('整个测试类只执行一次 --End')
test_to_run代码参考:
import unittest
class TestToRun(unittest.TestCase):
def setUp(self) -> None:
#setUp()方法,通常打开浏览器,初始化API请求或者准备测试数据
pass
def testAssertNotEqual(self):
#这里具体的测试方法,此处只是演示
self.assertEqual(1,2)
def testAssertEqual(self):
self.assertEqual(1,1)
def tearDown(self) -> None:
#定义测试后的清理动作
pass
main.py文件:
解析tests文件夹,手动查找并加载测试用例到测试套件
import os
import unittest
import importlib.util
#解析tests文件夹并且返回module的字符列表
def get_module_name_string(file_dir):
return_list=[]
for root,dirs,file in os.walk(file_dir):
#root 所指的是当前正在遍历的这个文件夹的本身的地址
#dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
#file 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
for i in file:
if not (i.endswith('__init__.py') or i.endswith('.pyc')) and i.startswith('test'):
f=os.path.join(root,i)
mod ='tests.' + f.split('\\tests\\')[1].replace('.py','')
return_list.append(mod)
return return_list
if __name__ == '__main__':
#定义suite测试套件
suites=unittest.TestSuite()
#使用package.mod方式获取所有模块的string
#os.path.join(os.path.dirname(__file__) 获取当前目录
mod_sting_list=get_module_name_string(os.path.join(os.path.dirname(__file__),'tests'))
print(mod_sting_list)
#遍历每一个mod string 先导入再把他加入测试用例
for mod_string in mod_sting_list:
print(mod_string)
#m为对应的test用例文件目录
m =importlib.import_module(mod_string)
#测试加载器TestLoader
test_case =unittest.TestLoader().loadTestsFromModule(m)
#添加测试用例到测试套件
suites.addTest(test_case)
#runner测试运行器,指定runner为TextTestRunner
runner=unittest.TextTestRunner(verbosity=2)
#运行suite
runner.run(suites)
动态加载文件
if __name__ == '__main__':
#动态查找测试用例文件
loader =unittest.defaultTestLoader
#生成测试suite
#os.path.join(os.path.dirname(__file__) 起始文件位置,top_level_dir必须指定
suite=loader.discover(os.path.join(os.path.dirname(__file__),'tests'),pattern='test*.py',top_level_dir=None)
#runner测试运行器,指定runner为TextTestRunner
runner=unittest.TextTestRunner(verbosity=2)
runner.run(suite)
执行结果展示(两种方式结果一样):

本文来自博客园,作者:橘子偏爱橙子,转载请注明原文链接:https://www.cnblogs.com/xfbk/p/15962388.html

浙公网安备 33010602011771号