Python之unittest框架使用

一、unittest框架简介

   是Python自带的单元测试框架,用来组织执行测试用例。

二、unittest框架4大核心类

1、TestCase: 写测试用例
2、TestSuite: 收集测试用例
3、TestRunner: 执行测试用例
4、TestFixture: 测试脚手架,前置条件,后置清理

三、unittest工作流程

1、使用TestCase按照规则写测试用例,每一个函数为一个测试用例
2、TestSuite:创建一个测试套件:收集测试用例到测试套件
3、TestRunner:统一执行测试套件里面的用例
4、生成测试报告

四、测试用例编写

    1、导入模块unittest
	2、创建一个测试类,继承unittest.TestCase
	   测试用例必须写在测试类里面
	3、测试用例以Test开头
	4、执行入口:unittest.main()
	5、测试用例包含哪些东西
	   (1)前置条件:[token、session]
	    (2)测试步骤:ddt+接口请求+提取全局变量
	   (3)测试断言:利用unittest框架自带的断言
	   (4)日志收集:还原整个测试过程
	   (5)后置清理:是否要清理掉测试数据,删除测试,关闭各种文件的连接,关闭数据库连接。
	6、测试用例的执行顺序
   (1)按照测试用例名称的Ascii码大小执行
        chr():Ascii ---- 字符
        ord():字符----Ascii
    (2)执行顺序
       类级别前置---函数级别前置--测试用例--函数级别后置---类级别后置

五、代码实例

import unittest
import time


class TestDemo(unittest.TestCase):
    def setUp(self) -> None:
        print("setUp", "每一个测试用例执行之前会自动执行")
        time.sleep(2)

    def tearDown(self) -> None:
        print("tearDown", "每一个测试用例执行之后都会执行")
        time.sleep(2)

    @classmethod
    def setUpClass(cls) -> None:
        print("setUpClass", "测试类执行开始的时候执行,只执行一次")
        time.sleep(2)

    @classmethod
    def tearDownClass(cls) -> None:
        print("tearDownClass", "测试类执行完成后执行,只执行一次")
        time.sleep(2)

    def test_01(self):
        print("test01")
        time.sleep(2)

    def test_03(self):
        print("test03")
        time.sleep(2)

    def test_02(self):
        print("test02")
        time.sleep(2)

    # 错误的用例,没有以test开头,框架不识别
    # def demo01(self):
    #     print("demo01")


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

执行结果:
Testing started at 5:24 下午 ...
Launching unittests with arguments python -m unittest /Users/wangchuangyan/Desktop/py42/Summary/TestUnitest.py in /Users/wangchuangyan/Desktop/py42/Summary

setUpClass 测试类执行开始的时候执行,只执行一次
tearDownClass 测试类执行完成后执行,只执行一次


Ran 3 tests in 22.052s

OK

Process finished with exit code 0
setUp 每一个测试用例执行之前会自动执行
test01
tearDown 每一个测试用例执行之后都会执行
setUp 每一个测试用例执行之前会自动执行
test02
tearDown 每一个测试用例执行之后都会执行
setUp 每一个测试用例执行之前会自动执行
test03
tearDown 每一个测试用例执行之后都会执行

六、测试用例收集与执行
1、另起一个页面对用例收集与执行

import unittest
from Summary.TestUnitest import TestDemo

# 创建测试套件
suite = unittest.TestSuite()
# 添加测试用例到测试套件,  添加一条
suite.addTest(TestDemo('test_01'))
# 运行测试用例
runner = unittest.TextTestRunner()
runner.run(suite)

运行结果:
setUpClass 测试类执行开始的时候执行,只执行一次
setUp 每一个测试用例执行之前会自动执行
test01
tearDown 每一个测试用例执行之后都会执行
tearDownClass 测试类执行完成后执行,只执行一次

2、用例收集的几种方式

测试用例为维度:
1、收集一条用例
suite.addTest(TestDemo('test_01'))  收集一条   
2、收集多条
case_list= [TestDemo("test_01"),TestDemo("test_03")]
suite.addTests(tests=case_list)      
测试类为维度:
3、添加整个测试类
suite.addTest(unittest.makeSuite(TestDemo))    
4、 使用unittest.TestLoader                                        
suite = unittest.TestLoader().loadTestsFromTestCase(TestDemo)  
测试文件为维度:      
5、指定收集某个目录下的某个测试用例文件的测试用例  (以test开头的py文件)   【常用的】                                   
dir_path = os.path.dirname(__file__)                            
print(dir_path)                                                 
suite = unittest.defaultTestLoader.discover(start_dir=dir_path)          

3、运行测试用例

runner = unittest.TextTestRunner()
runner.run(suite)

七、生成测试报告

1、TextTestRunner()自带的测试报告,不好看,无法识别
2、HTMLTestRunner:不好看
3、BeautifulReport:第三方库,还可以,推荐使用  pip install BeautifulReport
4、unittestreport:  第三方库,musen

1、使用BeautifulReport 生成测试报告

from Summary import test_case                
from Summary.test_case import TestDemo       
from BeautifulReport import BeautifulReport  
# 创建测试套件                      
suite = unittest.TestSuite()  
dir_path = os.path.dirname(__file__)                                      
suite = unittest.defaultTestLoader.discover(start_dir=dir_path)           
report = BeautifulReport(suites=suite)                                    
report.report(description="测试报告", filename="test_report.html")  # html报告  

会在与case的同一级目录下,生成一个test_report.html的报告,打开
Python之unittest框架使用_第1张图片
2、使用unittestreport生成测试报告代码示例

from Summary import test_case                
from Summary.test_case import TestDemo       
from unittestreport import TestRunner    
                                         
# 创建测试套件                      
suite = unittest.TestSuite()  
# unittestreport  生成测试报告                                                      
dir_path = os.path.dirname(__file__)                                          
suite = unittest.defaultTestLoader.discover(start_dir=dir_path)               
runner = TestRunner(suite=suite,                                              
                    filename="musengReport.html",                             
                    title="测试报告",                                             
                    tester="yan",                                             
                    desc="测试项目生成的报告",                                         
                    templates=1)                                              
runner.run()                                                                  
                                                                              

查看报告
Python之unittest框架使用_第2张图片
Python之unittest框架使用_第3张图片

你可能感兴趣的:(接口自动化,测试,自动化,unittest)