当前位置: 首页 > 知识库问答 >
问题:

如何为基于http的集成测试生成覆盖率报告?

柴琦
2023-03-14

我正在为一个项目编写集成测试,在这个项目中,我正在进行HTTP调用,并测试它们是否成功。

因为我没有导入任何模块,也没有直接调用函数coverage.py报告为0%。

我想知道如何为此类集成HTTP请求测试生成覆盖率报告?

共有2个答案

柳俊逸
2023-03-14

覆盖范围5.1,基于覆盖范围的“测量子过程”部分。py docs,您可以设置COVERAGE\u进程\u STARTenv变量,调用COVERAGE。在代码中的某个地方处理\u startup()。如果在中设置parallel=True。coveragerc

>

import coverage
coverage.process_startup()

这可以在sitecustomize中完成。py是全局的,但在我的例子中,很容易将它添加到我的应用程序\uuuu init\uuu中。py,其中我添加了:

import os
if 'COVERAGE_PROCESS_START' in os.environ:
    import coverage
    coverage.process_startup()

为了安全起见,我在这个if语句中添加了一个额外的检查(检查是否也设置了MYAPP\u COVERAGE\u子流程

在测试用例中,将COVERAGE_PROCESS_START设置为. coveragerc文件的路径(如果不需要此配置,则为空字符串),例如:

import os
import subprocess

env = os.environ.copy()
env['COVERAGE_PROCESS_START'] = '.coveragerc'

cmd = [sys.executable, 'run_my_app.py']

p  = subprocess.Popen(cmd, env=env)
p.communicate()
assert p.returncode == 0 # ..etc

最后,创建。封面C包含:

[run]
parallel = True
source = myapp # Which module to collect coverage for

这确保了安全性。每个进程创建的覆盖率文件都会转到一个唯一的文件,pytest cov会自动合并该文件(或者可以使用coverage cover手动合并)。它还描述了为哪些模块收集数据(cov=myapparg不会传递给子进程)

要运行测试,只需调用pytest--cov=

酆高翰
2023-03-14

配方大致如下:

  1. 确保后端以代码覆盖模式启动
  2. 运行测试
  3. 确保将后端覆盖率写入文件
  4. 从文件中读取覆盖率并将其附加到测试运行覆盖率

例子:

假设您有一个虚拟后端服务器,在GET请求上响应“Hello World”页面:

# backend.py
from http.server import BaseHTTPRequestHandler, HTTPServer


class DummyHandler(BaseHTTPRequestHandler):

    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-Type', 'text/html')
        self.end_headers()
        self.wfile.write('<html><body><h1>Hello World</h1></body></html>'.encode())


if __name__ == '__main__':
    HTTPServer(('127.0.0.1', 8000), DummyHandler).serve_forever()

发出HTTP请求并验证响应的简单测试包含“Hello World”:

# tests/test_server.py
import requests


def test_GET():
    resp = requests.get('http://127.0.0.1:8000')
    resp.raise_for_status()
    assert 'Hello World' in resp.text
# tests/conftest.py
import os
import signal
import subprocess
import time
import coverage.data
import pytest



@pytest.fixture(autouse=True)
def run_backend(cov):
    # 1.
    env = os.environ.copy()
    env['COVERAGE_FILE'] = '.coverage.backend'
    serverproc = subprocess.Popen(['coverage', 'run', 'backend.py'], env=env,
                                  stdout=subprocess.PIPE,
                                  stderr=subprocess.PIPE,
                                  preexec_fn=os.setsid)
    time.sleep(3)
    yield  # 2.
    # 3.
    serverproc.send_signal(signal.SIGINT)
    time.sleep(1)
    # 4.
    backendcov = coverage.data.CoverageData()
    with open('.coverage.backend') as fp:
        backendcov.read_fileobj(fp)
    cov.data.update(backendcov)

cov是pytest-cov(docs)提供的夹具。

运行测试会增加后端的覆盖率。py覆盖整个覆盖范围,尽管只选择了测试

$ pytest --cov=tests --cov-report term -vs
=============================== test session starts ===============================
platform linux -- Python 3.6.5, pytest-3.4.1, py-1.5.3, pluggy-0.6.0 -- 
/data/gentoo64/usr/bin/python3.6
cachedir: .pytest_cache
rootdir: /data/gentoo64/home/u0_a82/projects/stackoverflow/so-50689940, inifile:
plugins: mock-1.6.3, cov-2.5.1
collected 1 item

tests/test_server.py::test_GET PASSED

----------- coverage: platform linux, python 3.6.5-final-0 -----------
Name                   Stmts   Miss  Cover
------------------------------------------
backend.py                12      0   100%
tests/conftest.py         18      0   100%
tests/test_server.py       5      0   100%
------------------------------------------
TOTAL                     35      0   100%


============================ 1 passed in 5.09 seconds =============================
 类似资料:
  • 我已经看了一段时间关于stackoverflow的不同文章和答案,但我还没有找到适合我的情况的有效解决方案。我对jacoco、maven和sonar如何一起创建报告的理解肯定有问题,所以我要寻求帮助。 我有一个多模块maven项目,其结构如下(稍微简化了一下): 请允许我扩展一下。父模块只是一个带有整个依赖项及其版本的pom。这个pom被用作level1的每一个其他模块的父模块(直接位于根下面)。

  • 问题内容: 我试图用来衡量我正在构建的服务的测试覆盖率。这是一个REST API,我通过旋转,测试HTTP请求和查看HTTP响应来对其进行测试。这些测试不是服务包的一部分,并且返回0%的测试覆盖率。有没有办法获得实际的测试覆盖率?我希望在给定的端点上进行最理想的方案测试,至少可以覆盖特定端点处理程序的代码的30-50%,并且可以通过添加更多针对常见错误的测试来进一步改善此情况。 问题答案: 有人向

  • 我需要在azure build pipeline中生成Asp.net单元测试的代码覆盖率报告的指导。我的项目是基于。Net框架4.6。 我能够使用“visual studio test”任务运行所有单元测试。 我尝试了"报告生成器"任务,但它需要cobertura或Jacoco etc xml文件,这些文件无法在构建管道中生成。 期望 -我想获得已运行单元测试的代码覆盖率报告,该报告将显示完整的信

  • 我一直在尝试在JBoss服务器中实现JaCoCo离线代码覆盖,使用仪表化的EAR进行部署和jacococagent.jar,以便跟踪针对所述JBoss运行的外部集成测试的代码覆盖。 我一直在关注这样的指南: http://www.eclemma.org/jacoco/trunk/doc/offline.html http://automationrhapsody.com/code-coverage

  • 我在IntelliJ IDEA上设置了一个Java应用程序。我有几个测试,我需要为每个测试单独生成覆盖报告。 IntelliJ IDEA 覆盖率运行器一次运行所有测试,并生成显示整体覆盖率的单个报告。如何在分级脚本中使用智能IDEA IDEA覆盖运行器或Jaco插件来生成单独的测试报告?

  • 问题内容: 我们已经构建了一个REST API,该API公开了许多业务服务-业务服务可以调用其他平台/实用程序服务来执行数据库读取和写入,执行服务授权等。 我们已经将这些服务作为WAR文件部署在Tomcat中。 我们想使用集成测试套件来测试整个设置,我们也希望将其视为回归测试套件。 在此以及任何可以加速套件开发的工具上执行集成测试的最佳方法是什么?以下是我们认为需要解决的一些要求: 能够定义适用于