• python unittest以及coverage report


    环境

    • python==3.7
    • pytest==7.1.0
    • pytest-cov==3.0.0

    unittest 执行命令

    cd 进去项目路径,ut 运行test开头的文件夹,.coverager配置文件可配置需要排除的文件。执行完成会生成html覆盖率报告。

    python -m pytest --cov-config=.coveragerc --cov=./ --cov-report=html  --cov-report=term
    
    • 1
    .coveragerc
    [run]
    omit = 
            services/db_handle.py
    
    • 1
    • 2
    • 3

    Mock

    1. mock import

    mock掉文件开头import的方法

    import sys
    from unittest.mock import patch, Mock
    
    sys.modules["your_path.your_module"] = Mock()
    
    • 1
    • 2
    • 3
    • 4
    2. mock 方法

    用patch装饰器,路径写到需要mock的方法名

    @patch("app.uploader.Uploader.main", return_value="testMd5")
    
    • 1
    3. mock 掉某个装饰器

    mock某个装饰器,需要在导入前

    # mock flask认证jwt装饰器
    patch("flask_jwt_extended.jwt_required", mock_decorate).start()
    
    • 1
    • 2

    Demo

    以某个flask应用为例

    import unittest
    from flask import Flask
    from unittest.mock import patch
    
    
    class TestDemo(unittest.TestCase):
    	def setUp(self):
    		# mock import
    		sys.modules["services.upload"] = Mock()
            # mock_decorate为空的装饰器 替换jwt_required装饰器
            patch("flask_jwt_extended.jwt_required", mock_decorate).start()
            self.app = Flask(__name__)
            self.app.config.update({"TESTING": True})
            # 只导入要测的一个路由
            from app import downloader, api
            self.app.register_blueprint(api)
    
        def tearDown(self):
            # print("tearDown")
            pass
        
        def test_demo(self):
        	with self.app.test_client() as c:
        		response = c.post("api/download", data=data)
                self.assertEqual(response.status_code, 200)
    
    
    if __name__ == '__main__':
        unittest.main()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
  • 相关阅读:
    Python实现mysql基于配置文件的全自动增量数据备份
    c#将int转为中文数字
    阶段性工作总结
    江苏 服务器性能监控包含哪些方面?
    Java实战:JSON文件到Excel文件的转换
    vc websocket简单测试
    VPN都容易受到泄露流量的TunnelCrack攻击
    GDB之源码与汇编映射对应关系(十五)
    ubuntu18.04服务搭建yolov5开发环境
    Java——JDBC(Java DataBase Connectivity)数据库连接技术
  • 原文地址:https://blog.csdn.net/yuhengshi/article/details/125536515