unittest 模块使用
About
unittest是Python内置的单元测试框架(模块),不仅可以完成单元测试,也适用于web自动化测试中。
unittest提供了丰富的断言方法,判断测试用例是否通过,然后生成测试结果报告。
在每个用例执行时,setUp和tearDown都会执行。
注意:
Test类名可以自定义,但是必须继承unittest.TestCase。
示例中的setUp和tearDown方法名是固定的,但如果,我们测试用例时,没有初始化和收尾的工作,setUp和tearDown方法可以省略不写。
执行多个用例(半自动) --TestSuite
import unittest
# 半自动添加多个用例
class Testing(unittest.TestCase):
def test_01(self):
self.assertTrue("foo".islower())
def test_02(self):
self.assertTrue("Foo".islower())
if __name__ == '__main__':
obj = map(Testing,['test_01','test_02'])
#创建用例集
suite = unittest.TestSuite()
#创建一个suite 容器
suite.addTests(obj)
#把用例集 添加到容器里
unittest.TextTestRunner(verbosity=2).run(suite)
#运行用例
执行个用例(全自动) -- makeSuite
import unittest
from HTMLTestRunner import HTMLTestRunner
class Testing(unittest.TestCase):
def test_01(self):
self.assertTrue("foo".islower())
def test_02(self):
self.assertTrue("foo".isupper())
if __name__ == '__main__':
#testCaseClass 指定用例集 的 类
#prefix 指定以什么开头的函数 这里是以'test'开头
# 把Testing这个类下 以 'test'开头的用例收集到一个容器中
suite = unittest.makeSuite(testCaseClass=Testing,prefix='test')
f = open("a.html","wb")
# HTMLTestRunner 是将生成的报告 导出到一个html文件 网页打开浏览
HTMLTestRunner(stream=f,verbosity=2,title="标题",description="描述").run(suite)
makeSuite - 不同开头用例集
prefix 只能写一个 参数 所以出现不同开头用例集 需要在添加到容器中 ,实例如下
import unittest
class myUnitTest(unittest.TestCase):
def my_sub_test(self):
self.assertEqual(2, 2) # AssertionError: 5 != 2
def test_div(self):
self.assertEqual(2, 2)
if __name__ == '__main__':
suite_obj = unittest.makeSuite(myUnitTest, prefix='my')
suite_obj.addTests(map(myUnitTest, ['test_mul', 'test_div']))
runner = unittest.TextTestRunner()
runner.run(suite_obj)
断言

unittest.TestLoader
unittest.TestLoader 用来执行某一文件下的所有以test 开头的用例集
discover 中有三个参数
start_dir, 表示开始的目录
pattern='test*.py', 表示已什么开头的文件
top_level_dir=None 表示顶级目录 (start_dir 只能小于等于 top_level_dir)

setUp && tearDown / setUpClass && tearDownClass
setUp 用例之前执行(多用来在用例前 从数据中读取用例的一些参数 传给用例使用)
tearDown 用例之后执行(多用来做断言)
setUpClass 类中用例 在之前执行 ,只执行一次
tearDownClass 类中用例 在之后执行 ,只执行一次
import unittest
class Testing(unittest.TestCase):
def setUp(self):
print("用例之前")
def tearDown(self):
print("用例之后")
@classmethod
def setUpClass(cls):
print("所有用例之前")
@classmethod
def tearDownClass(cls):
print("所有用例之后")
def test_01(self):
self.assertTrue("foo".islower())
def test_02(self):
self.assertTrue("Foo".islower())
if __name__ == '__main__':
suite = unittest.makeSuite(testCaseClass=Testing,prefix='test')
unittest.TextTestRunner(verbosity=2).run(suite)
来看看执行结果

常用参数
verbosity
0,静默模式,对于测试结果给予简单提示。
1,默认模式,与静默模式类似,只是在每个成功的用例前面有个.每个失败的用例前面有个F,跳过的用例有个S。
2,详细模式,测试结果会显示每个用例的所有相关的信息。
跳过测试用例:skip
从Python3.1版本开始,unittest支持跳过单个测试方法甚至整个测试类。
也就是说,某些情况下,我们需要跳过指定的用例。使用方法就是在用例上面套上装饰器
@unittest.skip(reason) 无条件地跳过装饰测试用例。 理由应该描述为什么跳过测试用例。
@unittest.skipIf(condition, reason) 如果条件为True,则跳过修饰的测试用例。
@unittest.skipUnless(condition, reason) 条件为Fales,跳过修饰的测试用例。
@unittest.expectedFailure() 将测试标记为预期的失败。如果测试失败,将被视为成功。如果测试用例通过,则认为是失败。

浙公网安备 33010602011771号