python - web.py 应用程序上的 Pytests 未覆盖方法代码

标签 python python-3.x pytest web.py pytest-cov

首先,抱歉,如果术语不是 100% 正确,或者某些内容没有 100% 有意义,我对 Web 应用程序开发和在堆栈溢出上发布的文章还很陌生。

我有一个 web.py 应用程序,需要使用 pytest 测试其功能,并使用 pytest-cov 生成代码覆盖率报告。我让测试正常工作并对响应进行断言,但是当我生成代码报告时,方法内的所有代码行都被暴露,因此测试覆盖率非常低 (23%)

我已通过 cmd 在我的存储库中成功运行 pytest --cov 并在其中获取覆盖率结果。但后来我尝试使用覆盖率运行 -m pytest test_Server.py 并运行覆盖率报告来获取更多详细信息。

在这份报告中,我可以看到我丢失了哪些代码行,并且除了每个方法/类的定义之外,我丢失了所有代码行。

我尝试的另一件事是pytest --cov=Server.py,然后它给了我错误

Coverage.py warning: Module Server.py was never imported. (module-not-imported)
Coverage.py warning: No data was collected. (no-data-collected)
WARNING: Failed to generate report: No data to report.

服务器.py

import os

import web


URLS = ("/", "Index")

APP = web.application(URLS, globals())


class Index:
    """
    Just a test echo server.
    """

    def POST(self):
        web.header("Access-Control-Allow-Origin", "*")
        data = web.data()

        return data

test_Server.py


from paste.fixture import TestApp
import pytest
import os
import sys

sys.path.insert(1,(os.path.join(sys.path[0],'..'))) #adding parent path to import server script
import Server as lm
from Server import APP as app, Index

host = "localHost:9999"


class TestRig():
    def test_server_setup(self):
        middleware = []
        testApp = TestApp(app.wsgifunc(*middleware))
        try:
            r = testApp.post("http://%s/" %host)
            print ("request:", r.status)
            assert r.status ==  200

        except TypeError:
            print ("Request failed. Status:"+ r.status)
            raise

这是我当前正在运行的一个非常简化的版本,我设法以某种方式使测试正常工作并正确断言响应。

我期望测试覆盖方法内的代码,但实际输出告诉我只覆盖了方法的定义,没有其他内容。

最佳答案

感谢@hoefling,我发现了两件事:

  1. 使用Web.py时,需要使用paste.fixture库来测试代码,requests库WON'即使您可以断言并使用 get/post 方法,也不能覆盖您的代码(这就是为什么我一开始代码覆盖率如此糟糕的原因)。

  2. 使用 pytest-cov(或coverage.py)时,请按如下方式进行调用:pytest --cov=name_of_your_script_to_cover --cov-report=term-missing --cov-report=html 以避免出现 无法生成报告:没有要报告的数据。 错误(另外还可以获得一个漂亮的 HTML 报告来查看代码覆盖率)。

关于python - web.py 应用程序上的 Pytests 未覆盖方法代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56293883/

相关文章:

python - 使用 Selenium 从没有 ID 或类的列表中抓取文本

python - 来自两个向量的3D转换矩阵

python - 删除这些元组列表中重复的列表组合的元组

python - Pytest:使用没有副作用的函数设置模拟

python - 强制 Django 测试将模型写入数据库

python - 如何在 Python 中求 1000 以下的所有 3 或 5 的倍数之和?

Python Flask 日志记录问题

python - 如何从Python扩展模块的C代码调用内置函数(或方法)?

python - Cv2 :problem recieving full data from socket

python - 如何让pytest重写非测试模块中的assert