python unittest以及coverage report

本文介绍了如何使用Python的unittest和pytest进行单元测试,包括设置覆盖率报告、排除不需要测试的文件,以及如何使用Mock模拟模块和方法。通过示例展示了如何用patch装饰器模拟方法和装饰器,最后提供了一个基于Flask应用的测试用例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境

  • 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
.coveragerc
[run]
omit = 
        services/db_handle.py

Mock

1. mock import

mock掉文件开头import的方法

import sys
from unittest.mock import patch, Mock

sys.modules["your_path.your_module"] = Mock()
2. mock 方法

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

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

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

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

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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuhengshi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值