首页 > 编程语言 >提升质量:利用Coverage分析Python Web项目的测试覆盖

提升质量:利用Coverage分析Python Web项目的测试覆盖

时间:2024-10-15 16:24:27浏览次数:6  
标签:__ Web Coverage 文件 Python Django 覆盖率 coverage import

提升质量:利用Coverage分析Python Web项目的测试覆盖

鉴于不同框架的运行机制各有差异,当利用Coverage工具对Python Web项目的测试覆盖率进行分析时,必须采取针对性的方法来确保获取精确的测试覆盖率数据。以下是我针对Django框架与Flask框架在使用Coverage方面的详尽总结。

Django框架

首先,我们需要在manage.py文件中添加coverage模块的相关代码,以实现测试覆盖率的统计。具体步骤如下:

#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
import coverage
import uuid


def main():
    """Run administrative tasks."""
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'atcap.settings')
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc
    execute_from_command_line(sys.argv)



if __name__ == '__main__':
    # 初始化coverage对象,自定义生成的结果文件
    cov = coverage.Coverage(data_file=f'.coverage.{str(uuid.uuid4())}')

    # 开始统计覆盖率
    cov.start()

    # 执行测试代码
    main()

    # 停止统计覆盖率
    cov.stop()

    # 生成覆盖率报告
    cov.report()

接下来,我们可以运行Django项目,并访问相关的接口以触发测试覆盖率的统计:

python manage.py runserver 0.0.0.0:8000

image

image

在访问完所需的接口后,使用Ctrl + C停止Django项目。请注意,由于coverage模块在实现上使用了atexit模块注册回调函数,在Python进程正常退出或以SIGINT(信号2)退出时,才会将内存中的覆盖率结果写入文件。因此,确保使用Ctrl + Ckill -2命令来停止项目,以避免覆盖率结果的丢失。

项目停止运行后,将在根目录下生成.coverage.*格式的结果文件。

image

为了生成统一的覆盖率报告,我们需要将这些结果文件合并为一个.coverage文件:

coverage combine

image

image

然后,使用以下命令在根目录下生成HTML格式的覆盖率报告:

coverage html

image

image

最后,通过访问htmlcov目录下的index.html文件,我们可以直观地查看项目的测试覆盖情况,并根据报告中的信息进行针对性的优化。

image

Flask框架

首先,写一段基本的flask代码,如下:

from flask import Flask, request, jsonify


app = Flask(__name__)


@app.route('/hello', methods=['GET'])
def hello():
    res = {
        "meg": "hello",
        "code": 20000
    }
    return jsonify(res)

@app.route('/goodbye', methods=['GET'])
def goodbye():
    res = {
        "meg": "goodbye",
        "code": 20000
    }
    return jsonify(res)


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)

接下来,我们可以使用coverage命令运行flask框架,并访问相关的接口以触发测试覆盖率的统计:

coverage run --parallel-mode cov_falsk.py

image

image

在访问完所需的接口后,使用Ctrl + C停止Django项目。请注意,由于coverage模块在实现上使用了atexit模块注册回调函数,在Python进程正常退出或以SIGINT(信号2)退出时,才会将内存中的覆盖率结果写入文件。因此,确保使用Ctrl + Ckill -2命令来停止项目,以避免覆盖率结果的丢失。

项目停止运行后,将在根目录下生成.coverage.*格式的结果文件。

image

为了生成统一的覆盖率报告,我们需要将这些结果文件合并为一个.coverage文件:

coverage combine

image

image

然后,使用以下命令在根目录下生成HTML格式的覆盖率报告:

coverage html

image

image

最后,通过访问htmlcov目录下的index.html文件,我们可以直观地查看项目的测试覆盖情况,并根据报告中的信息进行针对性的优化。

image

标签:__,Web,Coverage,文件,Python,Django,覆盖率,coverage,import
From: https://www.cnblogs.com/test-gang/p/18467398

相关文章

  • python根据时间字符串获取时间,判断是否非法定节假日时间
    fromdatetimeimportdatetimefromchinese_calendarimportis_workday,is_holiday,is_in_lieu,get_holiday_detail#定义两个时间字符串time_str1="2024-10-1218:41:02"time_str2="2024-10-1217:30:00"#将时间字符串转换为datetime对象time1=datetime.......
  • 详解Python中的Requests会话管理
    在Python的网络编程中,requests库因其简洁的API和强大的功能而广受欢迎。它简化了HTTP请求的过程,使得开发者可以轻松地发送请求并处理响应。然而,requests库的真正强大之处在于其会话管理功能。通过会话管理,我们可以维护一个会话,在这个会话中发送多个请求,这样可以提高性能并......
  • uniapp小程序web-view与小程序界面通信
    前言简单分享下最近的小程序需求的内容uniapp--->H5webUrl为域名+?拼接的信息,然后H5通过域名接收这些内容例如https://hao123.com.cn?token=1212<web-view:src="webUrl"@message="onMessage"></web-view>//在下方创建接收message事件的信息onMessage(event){......
  • MQTTnet.Server同时支持mqtt及websocket协议
    Net6后写法 Net6前写法Program.csusingMicrosoft.AspNetCore.Hosting;usingMicrosoft.Extensions.Configuration;usingMicrosoft.Extensions.Hosting;usingMQTTnet.AspNetCore;usingSystem;usingSystem.IO;namespaceMQTTnet.Server{publicclassProgra......
  • python使用http代理:实用的实践指南
    在Python中使用HTTP代理的实用指南在网络编程中,HTTP代理是一个非常有用的工具,能够帮助我们隐藏真实IP以及提高网络请求的灵活性。Python作为一门强大的编程语言,提供了多种方式来使用HTTP代理。接下来,我们将详细介绍如何在Python中使用HTTP代理,包括基本的设置和实际应用。什么......
  • Chromium 中HTML5 WebSocket收发消息分析c++(一)
    一、WebSocket前端接口定义:WebSocket 对象提供了用于创建和管理 WebSocket 连接,以及可以通过该连接发送和接收数据的API。使用 WebSocket() 构造函数来构造一个 WebSocket。构造函数WebSocket(url[,protocols])返回一个 WebSocket 对象。常量ConstantValueWeb......
  • Chromium 中HTML5 WebSocket收发消息分析c++(二)
    看下websocket调用过程:基本定义参考上一篇:Chromium中HTML5WebSocket收发消息分析c++(一)-CSDN博客一、前端测试用例 参考:HTML5WebSocket|菜鸟教程(runoob.com) websocket.html文件如下:<!DOCTYPEHTML><html><head><metacharset="utf-8"><title>Web......
  • Python私房菜——筑基篇(已完结)
    1Python私房菜【一】——(前置基础)1.1编码就是把人类语言(文字)通过编码的形式(如a-->1100001)一一映射成计算机认识的语言(0101…),即将人类语言通过某种形式转换成计算机认识的二进制数。这种编码形式是人为定义的,因此就有多种不同的编码方式。1.1.1ASCII码是早期的......
  • web应用私网公网访问题
    问题描述一台主机有一个私网地址以及一个公网地址,部署一个web应用,通过内网地址可以访问、通过公网地址访问返回403报错,通过telnet测试公网地址的端口是可以连通的。问题原因需要在web应用server配置上加一个判断。if($http_host!~*^(localhost|127.0.0.1|192.66.0.162|172.......
  • WebServer构建响应 && 发送响应
    1.构建响应构建响应流程如下确认方法根据不同方法,以不同方法提参确认访问资源如果用户的URL没有指明要访问的某种资源(路径),虽然浏览器默认会添加/,但是依旧没有告知服务器,要访问什么资源此时,默认返回对应服务的首页这里的/不是Linux服务器的根目录,通常是http服务器设......