unittest讲解

unittest核心要素

  • TestCase
  • TestSuite
  • TextTestRunner
  • defaultTestLoader
  • Fixture

TestCase

说明:(翻译:测试用例)一个TestCase就是一条测试用例;

使用:
    1. 导包:import unittest             --> 导入unitest框架
    2. 继承:unittest.TestCase             --> 新建测试类继承unittest.TestCase

提示:
    1). 测试用例:在自动化测试中,一条用例就是一个完整的测试流程;                
    2). 测试方法名称命名必须以test开头;
       (原因:unittest.TestCase类批量运行的方法是搜索执行test开头的方法)

TestSuite

说明:(翻译:测试套件)多条测试用例集合在一起,就是一个TestSuite
返回的suite套件原理:suite = unittest.TestSuite(map(UserCase,['testAddUser','testDelUser']))

使用:
    1. 实例化:     suite=unittest.TestSuite()                    
                 (suite:为TestSuite实例化的名称)
    2. 添加用例:suite.addTest(ClassName('MethodName'))    # 参数可以是tcase.TestCase实例 或者 TestSuite实例
                 (ClassName:为类名;MethodName:为方法名)
                suite.addTests([ClassName('MethodName1'),ClassName('MethodName1')])  

    3. 添加扩展:suite.addTest(unittest.makeSuite(ClassName)) # 其本质还是TestLoader
                 (搜索指定ClassName内test开头的方法并添加到测试套件中)

TextTestRunner

说明:(翻译:测试执行)是用来执行测试用例套件(执行上面的测试套件)

使用:
    1. 实例化: runner=unittest.TextTestRunner()
                (runner:TextTestRunner实例化名称)
    2. 执行:    runner.run(suite)  返回unittest.TestResult 对象,可以查看成功次数,失败次数等
                (suite:为测试套件名称)```
    unittest.TextTestRunner(stream=open("./tex.text",'w'),descriptions=True, verbosity=1)
    stream : 写入的文件对象
    descriptions : 描述信息
    verbosity: 写入文件的详细程度(0,1,2)

HTMLTestRunner(生成测试报告)

生成html测试报告

from HTMLTestRunner import HTMLTestRunner

with open(r'test_report.html', 'b') as f:  # => 必须以w的方式打开
    runner = HTMLTestRunner(
        stream=f,  # => 可写的文件对象
        title='add函数测试报告',  # => 测试报告标题
        description='win 10, python 3.8', # => 对本次测试的描述
    )
    runner.run(tests)  # => tests是通过discover查找并构建的测试套件

运行报告如下:

Beautiful Report

生成测试报告

from BeautifulReport import BeautifulReport

runner = BeautifulReport(tests)  # => tests是通过discover查找并构建的测试套件
runner.report(
    description='add函数测试报告',  # => 报告描述
    filename='bf.html',  # => 生成的报告文件名
    log_path='.'  # => 报告路径
)


实例验证
## test_bb.py
import unittest
class TestCase(unittest.TestCase):
    def test_01(self):
        print(f'运行用例{self.id()}')

    def test_02(self):
        print(f'运行用例{self.id()}')

    def test_03(self):
        print(f'运行用例{self.id()}')

if __name__ == '__main__':
    print(dir(TestCase))
## test_login.py
import unittest
class TestLogin(unittest.TestCase):
      def test_login1(self):
        print(f'运行用例{self.id()}')
        pass
    def test_login2(self):
        print(f'运行用例{self.id()}')
        pass
    def test_login3(self):
        print(f'运行用例{self.id()}')
        pass
    def test_login4(self):
        print(f'运行用例{self.id()}')
        pass
## mian.py
from test_bb import TestCase
from test_login import TestLogin
suite = unittest.TestSuite()
suite.addTest(TestCase('test_01'))
suite.addTests([TestCase('test_02'),TestCase('test_03')])
suite.addTest(unittest.makeSuite(TestLogin))
runner = unittest.TextTestRunner()
runner.run(suite)

defaultTestLoader

说明: 本质就是利用TestLoader类的相关方法找到testcase或者suite,并将查找到的测试用例组装到测试套件

  • discover方法

用法:
    test_dir = './'
    disconver = unittest.defaultTestLoader.discover(test_dir, pattern='iweb_*.py')
    (test_dir为要指定的目录 ./为当前目录;pattern:为查找的.py文件的格式 )
运行:
    runner=unittest.()
    runner.run(disconver)
  • loadTestsFromTestCase(testCaseClass)
用法:
 testCaseClass必须是TestCase的子类(或孙类也行)
运行:
    suite = unittest.defaultTestLoader.loadTestsFromTestCase(testCaseClass)
    runner=unittest.TextTestRunner()
    runner.run(suite)
  • loadTestsFromModule(module, pattern=None)
用法:
name是一个string,string需要是是这种格式的“module.class.method”
运行:
    suite = unittest.defaultTestLoader.loadTestsFromModule(module, pattern=None)
    runner=unittest.TextTestRunner()
    runner.run(suite)
  • loadTestsFromNames(name, module=None)
用法:
names是一个list,用法与上同
运行:
    suite = unittest.defaultTestLoader.loadTestsFromNames(module, pattern=None)
    runner=unittest.TextTestRunner()
    runner.run(suite)
  • loadTestsFromModule(self, module, *args, pattern=None, **kws)
用法:
module是一个module对象不是字符串
运行:
    suite = unittest.defaultTestLoader.loadTestsFromNames(module, pattern=None)
    runner=unittest.TextTestRunner()
    runner.run(suite)
posted @ 2022-07-04 00:48  我是小菜鸡丫丫  阅读(687)  评论(0编辑  收藏  举报