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() 将测试标记为预期的失败。如果测试失败,将被视为成功。如果测试用例通过,则认为是失败。

posted @ 2020-02-18 10:22  pzybk  阅读(205)  评论(0)    收藏  举报