来自不同容器的“覆盖合并”结果如何?

时间:2018-08-15 03:51:02

标签: docker coverage.py

要复制:

  1. 使用两个服务创建一个项目。
  2. 使用docker-compose run --rm --entrypoint='pipenv run coverage run […]' [service-name]在其自己的容器中测试每个服务。
  3. 在容器外部使用coverage combine first-service/.coverage second-service/.coverage组合结果。
  4. 运行coverage report,或更糟糕的是运行coverage html

这些最后的命令找不到源文件,因为.coverage文件与每个容器内源文件的绝对路径一起保存,与主机不匹配。

在这种情况下,有没有办法使覆盖率报告起作用?如果可能,以下任何一种方法都将很有用:

  1. 在.coverage中记录相对路径,并在合并的.coverage文件中的路径前面加上包含原始.coverage文件的目录。
  2. 将源文件包括在.coverage文件中。如果在文件更改后进行报告,则特别有用。
  3. 在报告时间以启发式方式检测.coverage中每个文件的最接近路径。
  4. 类似paths的设置,它可以将/ src / app从一个.coverage映射到service1目录,将/ src / app从另一个.coverage映射到service2。

非解决方案:

  • 不使用Docker。
  • 在同一个容器中运行两个测试套件。
  • 编写脚本以修改组合的.coverage文件。

1 个答案:

答案 0 :(得分:0)

诀窍是每个服务使用单独的paths声明:

.coveragerc-service1:

[paths]
source =
    service1
    /src/app

.coveragerc-service2:

[paths]
source =
    service2
    /src/app

这需要两个coverage combine调用:

coverage combine --append --rcfile=.coveragerc-service1 service1/.coverage
coverage combine --append --rcfile=.coveragerc-service2 service2/.coverage

({rm .coverage首先启用重新运行。)