unittest

文章目录

    • 1、关于unittest的4个重要概念
    • 2、关于 TestCase
    • 3、重写TestCase几个特殊的方法
    • 4、构建测试集 TestSuite
        • 4.1
        • 4.2
        • 4.3
        • 4.4
    • 5、运行自动化测试
        • 5.1 单个文件的测试用例
        • 5.2 构造测试集,然后执行
            • 5.2.1 TextTestRunner
            • 5.2.2 HTMLTestRunner

1、关于unittest的4个重要概念

(1)test fixture 测试固件:执行前的准备、执行后的清理

(2)test case 测试用例:完整的测试流程,通过继承unittest的TestCase类,创建新的测试用例

(3)test suite 测试套件:测试用例的集合,将测试用例集合在一起,然后一次性执行集合中的所有测试用例

(4)test runner 测试运行器:执行测试用例,生成测试结果

2、关于 TestCase

TestCase 作为基类,自定义的子类中实现测试用例的方法,方法名需要以 testxxx 命名

3、重写TestCase几个特殊的方法

setUp()     每个测试方法运行前执行,测试前的初始化工作

tearDown()  每个测试方法运行结束后执行,测试后的清理工作

@classMethod
setUpClass()    单元测试的前期准备,在setUp之前执行,并且整个测试只运行一次

@classMethod
tearDownClass()     所有测试方法运行结束后执行,只运行一次
def testxxx1():
    .......

def testxxx2():
    .......

可以用装饰器忽略某些测试方法

4、构建测试集 TestSuite

构建测试集,有多种方法

4.1

方法1:suite = unittest.TestSuite(列表)

if __name__ == '__main__':
    suite1 = unittest.TestLoader().loadTestsFromTestCase(AClass)
    suite2 = unittest.TestLoader().loadTestsFromTestCase(BClass)
    suite = unittest.TestSuite([suite1,suite2])

4.2

方法2:suite.addTest(类(‘方法’))

TestSuite 实例调用 suite.addTest(…)

优点:通过这种方式,可以指定测试用例的执行顺序

缺点:需要手动指定的太多

suite.addTest(…) 传入的参数是方法

if __name__ == "__main__":
    suite = unittest.TestSuite()
    suite.addTest(MyTest('test_mul'))
    suite.addTest(MyTest('test_add'))
    #.....

4.3

方法3:suite.addTest(unittest.makeSuite(类,‘方法开头字符串’))

用到 makeSuite 来筛选方法,筛选什么类、以什么开头的方法,然后将筛选出来的方法,传入suite.addTest(…)中

if __name__ == '__main__':
    suite = unittest.TestSuite()
    for n in range(1,6):
        suite.addTest(unittest.makeSuite(AClass,'aaa'))
        
    # 这样增加了AClass中,5个以aaa开头的方法
    # 而且,不需要以 test 开头

4.4

方法4:批量执行测试模块(称为“测试发现”)

要求:其他定义了测试用例的 .py 文件,以test开头命名

#加载当前目录下所有有效的测试模块,"."表示当前目录

suite = unittest.TestLoader().discover(".")

5、运行自动化测试

5.1 单个文件的测试用例

这个文件继承了TestCase,写了很多 testxxx() 方法,并且想要执行其中的全部 testxxx() 方法

if __name__ == '__main__':
    unittest.main()

5.2 构造测试集,然后执行

suite = .....
runner = ...
runner.run(suite)
5.2.1 TextTestRunner
runner = unittest.TextTestRunner(verbosity=2)
5.2.2 HTMLTestRunner
filename = "C:\\Test.html"
fp = file(filename,"wb")

runner = HTMLTestRunner.HTMLTestRunner(
            stream = fp,
            title = "Report_title",
            description = "Report_description")

runner.run(suite)
fp.close()

或者,指定到当前目录下

fp = file("./result.html",'w')
runner = HTMLTestRunner(fp,title=u'自动化测试报告')
runner.run(suite)
fp.close()

你可能感兴趣的:(自动化测试)