我的项目是一个 python CLI 应用程序,我使用 Travis 作为 CI。我使用脚本在本地测试它
script:
- pytest pacco/cli/tests.py --cov=pacco --cov-config=.coveragerc
- pytest --doctest-modules --cov=pacco --cov-append --cov-config=.coveragerc --cov-report xml
- coverage report -m
它给了我结果
Name Stmts Miss Cover Missing
----------------------------------------------------------------------------
pacco/__init__.py 1 0 100%
pacco/cli/__init__.py 0 0 100%
pacco/cli/commands/__init__.py 0 0 100%
pacco/cli/commands/binary.py 85 3 96% 16, 30, 53
pacco/cli/commands/pacco.py 13 0 100%
pacco/cli/commands/registry.py 65 1 98% 27
pacco/cli/commands/remote.py 37 6 84% 29-34
pacco/cli/commands/utils/__init__.py 0 0 100%
pacco/cli/commands/utils/command_abstract.py 57 27 53% 21-22, 27-39, 51-63, 67-74
pacco/cli/commands/utils/output_stream.py 17 2 88% 16, 24
pacco/cli/entry_point.py 4 0 100%
pacco/cli/test_utils.py 54 0 100%
pacco/cli/tests.py 115 1 99% 195
pacco/manager/__init__.py 0 0 100%
pacco/manager/file_based/__init__.py 0 0 100%
pacco/manager/file_based/package_binary.py 30 1 97% 40
pacco/manager/file_based/package_manager.py 28 2 93% 37, 58
pacco/manager/file_based/package_registry.py 130 9 93% 65, 71, 100, 108, 145, 159, 217, 224, 226
pacco/manager/file_based/remote.py 44 10 77% 17, 20, 48, 52-57, 60
pacco/manager/interfaces/__init__.py 0 0 100%
pacco/manager/interfaces/package_binary.py 8 2 75% 21, 30
pacco/manager/interfaces/package_manager.py 13 4 69% 22, 31, 43, 56
pacco/manager/interfaces/package_registry.py 22 8 64% 23, 37, 46, 60, 66, 79, 91, 105
pacco/manager/interfaces/remote.py 14 3 79% 14, 18, 21
pacco/manager/remote_factory.py 7 3 57% 7-10
pacco/manager/remote_manager.py 66 4 94% 93, 127, 140, 163
pacco/manager/utils/__init__.py 0 0 100%
pacco/manager/utils/cache.py 28 0 100%
pacco/manager/utils/clients.py 130 70 46% 28, 38, 47, 58, 68, 78, 117, 131-146, 150-151, 154-160, 163, 166, 169-170, 173-175, 178, 181, 184-196, 199-217, 220-222
----------------------------------------------------------------------------
TOTAL 968 156 84%
但是,当它在 Travis 中运行时,结果只有
Name Stmts Miss Cover Missing
----------------------------------------------------------------------------
pacco/__init__.py 1 0 100%
pacco/cli/__init__.py 0 0 100%
pacco/cli/commands/__init__.py 0 0 100%
pacco/cli/commands/binary.py 85 69 19% 15-17, 20-34, 37-56, 59-69, 75-85, 88-107
pacco/cli/commands/pacco.py 13 4 69% 9, 12, 15, 19
pacco/cli/commands/registry.py 65 55 15% 11-15, 21-29, 35-40, 46-63, 69-76, 82-91, 97-105
pacco/cli/commands/remote.py 37 29 22% 10-13, 19-34, 45-48, 54-57, 63-66
pacco/cli/commands/utils/__init__.py 0 0 100%
pacco/cli/commands/utils/command_abstract.py 57 45 21% 10-14, 20-41, 44-48, 51-63, 67-74, 77
pacco/cli/commands/utils/output_stream.py 17 10 41% 6-7, 10, 13-18, 21, 24
pacco/cli/entry_point.py 4 1 75% 10
pacco/cli/test_utils.py 54 0 100%
pacco/cli/tests.py 115 1 99% 195
pacco/manager/__init__.py 0 0 100%
pacco/manager/file_based/__init__.py 0 0 100%
pacco/manager/file_based/package_binary.py 30 6 80% 40, 56-60
pacco/manager/file_based/package_manager.py 28 2 93% 37, 58
pacco/manager/file_based/package_registry.py 130 12 91% 65, 71, 100, 108, 145, 159, 182, 186, 196, 217, 224, 226
pacco/manager/file_based/remote.py 44 10 77% 17, 20, 48, 52-57, 60
pacco/manager/interfaces/__init__.py 0 0 100%
pacco/manager/interfaces/package_binary.py 8 2 75% 21, 30
pacco/manager/interfaces/package_manager.py 13 4 69% 22, 31, 43, 56
pacco/manager/interfaces/package_registry.py 22 8 64% 23, 37, 46, 60, 66, 79, 91, 105
pacco/manager/interfaces/remote.py 14 3 79% 14, 18, 21
pacco/manager/remote_factory.py 7 3 57% 7-10
pacco/manager/remote_manager.py 66 4 94% 93, 127, 140, 163
pacco/manager/utils/__init__.py 0 0 100%
pacco/manager/utils/cache.py 28 5 82% 26, 34-37
pacco/manager/utils/clients.py 130 70 46% 28, 38, 47, 58, 68, 78, 117, 131-146, 150-151, 154-160, 163, 166, 169-170, 173-175, 178, 181, 184-196, 199-217, 220-222
----------------------------------------------------------------------------
TOTAL 968 343 65%
您可以在travis中看到完整的日志。
我相信问题的根源在于,因为它是一个 CLI 应用程序,所以我使用它进行测试subprocess.run(CLI_COMMAND)
,使得 pytest-cov 无法检测到来自子进程的跟踪。但它适用于我的本地机器。
当我检查 travis 覆盖结果中缺少的行时,看起来函数的主体都被忽略了。
我怀疑这可能是因为不同的 Python 环境(与sys.settrace
行为有关)。