旗帜

基于测试或子项目/团队类型的小组覆盖报告。

标记允许您对项目中不同测试和功能的覆盖率报告进行隔离和分类。这在以下情况下尤其有用:

  1. 您有多种类型的测试(例如,单元、集成、前端、后端等)

和/或

  1. 您使用的是单回购设置,希望独立封装每个项目的测试覆盖率。
1846

公关评论中的旗帜覆盖率

标志示例

📘

视频演练

要查看实际的“标志”功能,您还可以看一下本视频教程:https://about.codecov.io/product/feature/flags网站/

作为一个最小的示例,考虑一个名为单回购X具有以下文件夹结构的:

单回购X/前端/后端/移动的

我们回头再看看这个单回购X文档中的示例。

步骤1:在上传器中创建标志

要应用标志,您必须使用-F标志名包含在upload命令中。(注意:请记住,Codecov始终建议CI中的上载程序)

重要的是要注意,为了标记工作,必须在mono repo中为每个项目上传和标记单独的覆盖报告。例如,在CI运行中单回购X项目示例,假设moduleA的覆盖范围写入

测试/前端/输出/覆盖.xml

然后该报告将上传如下:

./codecov-t<token>-f tests/fendor/output/coverage.xml-f模块A

现在,您的旗帜级别覆盖范围正在上传到Codecov。

#与上传匹配的标志的理想示例#您的Codecov Uploader方法#更多信息请访问https://docs.codecov.com/docs/codecov-uploader#仅运行unittest的示例py.test--冠状病毒=./-k个测试/单元测试/./codecov-c-F单元测试#仅运行集成测试的示例py.test--覆盖=./-k测试/集成/./codecov-c-F集成#仅运行ui测试的示例npm测试./codecov-c-F用户界面

标记与上传的一对一关系

为单个报告上载指定多个标志可能会导致错误覆盖,除非该报告的内容完全包含每个标志。

例如,一份包含模块a和模块B覆盖信息的报告可以有效但技术上不正确的方式上传:

#要上传的多对一标记不是理想的示例./codecov-t<标记>-f coverage.xml-f前端-f后端-f移动

这会将报告的整个覆盖范围应用于这两个标志,导致覆盖范围不正确。具体来说前端,后端可移动的flags将显示整个上传报告的覆盖范围,而不仅仅是恰好覆盖其权限下文件的报告子集。

🚧

标志只能由字母数字字符“_”、“-”或“”组成且不超过45个字符

将根据以下正则表达式验证标志名称。^[\w\.\-]{1,45}$

第二步:YAML中的旗帜管理

一旦完成上传步骤(如上),标志级别的覆盖范围将发送到Codecov,但要解锁Codecov的完整功能集,您还需要将标志管理添加到存储库级别的YAML。

这里只是通过向YAML添加Flag定义来解锁的一些功能。

  1. 中的标志公关评论状态检查在Github、Gitlab、Bitbucket实例中
  2. 覆盖UI中的源代码覆盖率按标志
  3. 结转旗对于部分测试运行
    等。

旗帜管理的两种方法

1828

建议:自动标记管理

Codecov推荐的Flags方法基于下的YAML设置标记管理(_M):

A.依赖一套默认规则(_R):自动接收上传的标志,并持续管理标志

B.如果你的旗帜不适合默认规则(_R):,通用标志设置允许使用自定义任何标志个性化标志规则:

下面是一个示例默认规则(_R):在YAML中

标记管理(_M):default_rules:#添加的任何标志通常都要遵循的规则结转:正确状态:-类型:项目目标:自动阈值:1%-类型:修补程序目标:90%individual_flags:#上述默认规则的例外,逐个标志声明-name:feature_1#填写您自己的国旗名称路径:-src/feature_1#填写您自己的路径。注意,接受globs,而不是regex结转:正确状态:-类型:项目目标:20%-类型:修补程序目标:100%-name:feature_2#填写您自己的旗帜名称路径:-src/feature_2#填写您自己的路径。注意,接受glob,而不是regex结转:正确状态:-类型:项目目标:20%-类型:修补程序目标:100%

改变你的YAML?提醒您在部署之前始终进行验证https://api.codecov.io/validate网站

高级:定制旗帜管理

如果您要使用定制旗帜管理,您必须将每个旗帜单独添加到您的YAML中,这可能相当手动。

要在单回购中为每个项目生成标志和单个覆盖门编解码器.yml可以按以下方式构造:

#设置每个标志的覆盖目标新闻报道:状态:项目:违约:目标:90%项目/回购总覆盖率前端:目标:60%旗帜:-前端后端:目标:100%旗帜:-后端移动电话:目标:80%旗帜:-移动的#将标志添加到“布局”配置中以显示在PR注释中注释:布局:“diff,flags,files”行为:默认require_changes:错误require_base:是require_head:是分支:null#新根YAML节=`flags:`#在这里,您可以定义#上传器,并在添加新标志时更新旗帜:前端:路径:#注意,接受全局变量,而不是正则表达式-src/前端/code.js结转:假后端:路径:#注意,接受全局变量,而不是正则表达式-src/后端/api_code.py结转:正确移动电话:路径:#注意,接受全局变量,而不是正则表达式-src/new/mobile/app_code.java结转:正确

此yaml配置将失败拉取请求,如果。。。

•。。。整个Monorepo项目的覆盖率低于90%(这是违约上述山药规格)
•。。。前端覆盖率低于60%
•。。。后端(API)覆盖率低于100%
•。。。手机覆盖率低于80%

这个前端通过将每个报告标记为前端。这些报告将被合并,并有助于项目的总覆盖范围和根据前端标志。

📘

上传后删除旧报告(可选)

应用-c(c)参数,以便在运行下一组测试之前清除工作区中所有覆盖率报告。

随时间变化的跟踪标志覆盖率

主回购导航栏的“标记”选项卡将允许您可视化历史标记数据。此功能不仅允许您标记代码库的某些部分,还可以使用该标记来跟踪覆盖率是如何随着时间的推移而提高的。

3148

已配置标志但尚未启用分析时的标志选项卡

当您第一次单击选项卡时,您需要“启用标记分析”,这让我们知道您希望我们回填您的历史数据。此过程有时可能需要一段时间,具体取决于您拥有的标志数量和提交的频率。

3132

如果在当前回购中未配置任何标志,您将看到以下内容

一旦标记数据被回填,您将能够按标记名称排序,并过滤到您想要查看的数据的日期范围。即将推出的功能将是搜索和选择要查看的特定标志以及其他功能,使其成为您的旗帜覆盖范围的一个易于参考的仪表板。如果您对这个新功能有反馈,请告诉我们,我们很想听听您的想法这个Github问题.

按标志筛选覆盖范围

在Codecov中的任何文件列表上,您可以从下拉列表中选择一个标志,以按标志过滤覆盖范围。当您选择标志时,下表将更新,仅显示与该标志相关的覆盖范围。它将筛选出与该标志关联的覆盖范围未涉及的任何文件,并允许您在该标志的上下文中评估覆盖范围。这将使您能够更容易地看到标志中可能缺少的覆盖范围,并快速深入查看哪些地方可能需要进行新测试。

您还可以在单个文件级别上按标志进行筛选,这与文件列表上方的其他标志选择器的操作略有不同。在单个文件中,标记选择器将允许您查看不同的标记如何影响特定文件中的覆盖率。它将调整高亮显示的行,以显示仅与所选标志相关的行。

在这两种情况下,您可以选择任意多个标志,文件列表和文件将相应更新。

其他标志用例

结转旗

完整文档

如果您没有在每次提交时测试所有回购代码,Codecov将使用一种称为Carryforward Flags的功能来帮助仅更新已运行测试的覆盖率。Carryforward Flags建立在基本旗帜之上。当使用结转初始设置覆盖范围时,我们使用(并且需要)所有标志的完整上传。

🚧

结转标志用法

确实如此高度地建议阅读完整文档在项目中使用前,请在结转标记上进行标记。

通过将YAML附加到结转:正确:

旗帜:用户界面:路径:#note,接受globs,不接受regex-ui_1.py(单位:人)-用户界面2.py结转:正确单位:路径:-单位_1.py-单位2.py结转:正确企业:路径:-条目1.py-条目2.py结转:假#如果YAML中未指定Carryfoward标志,则#默认配置为false。

创建自定义通知

标记可用于创建发送给存储库提供程序的自定义通知。这使得在pull请求旁边很容易看到per-flag覆盖信息。

您可以在Codecov Yaml中指定状态和所有通知的标志。请注意,标记必须在状态:部分以关联自定义通知。

新闻报道:状态:项目:默认:禁用前端:旗帜:-前端后端:目标:50%旗帜:-后端应用程序编程接口:目标:89%旗帜:-应用程序接口旗帜:#根据该标志筛选要测量的文件夹后端:#仅包括后端文件夹中的文件路径:#注意,接受全局变量,而不是正则表达式-应用程序/后端/前端:路径:-应用程序/前端/应用程序编程接口:路径:-应用程序/api/测试:路径:-测试/
1408

自定义状态仅报告特定标志。

为标志生成After_n_build

查看我们的公关评论有关配置基于标志的通知的更多信息,请参见第页。

隐藏构建(例如,夜间构建)

Codecov提供了一种策略,可以将特定构建与主报告隔离开来,同时保持报告的完整性。当报告未连接在主报告中,它们将被忽略以进行比较,尽管它们仍可以用于源代码覆盖、API、徽章和绘图。

夜间构建就是此功能的一个示例。下面是夜间构建的Yaml配置。

旗帜:每晚:已连接:false

现在我们已经配置了标志每晚为了不加入主报表,我们上传一个标记为每晚.

#您的Codecov Uploader方法#更多信息请访问https://docs.codecov.com/docs/codecov-uploader./codecov-F夜间

通过添加-F夜间我们将此构建的所有覆盖率报告数据标记为每晚覆盖率数据。

管理过时标志

如果你看到覆盖率报告中有你不认识的标志,那么它们很可能已经过时了。

标记在以下情况下可能会过时

  • 它们已更新(名称或标志对应的路径已更改,或两者都已更改)
  • 它们已被删除(我们进行软删除以保留旧报道的历史背景)

如果这些标志确实过时了,那么您不需要做其他任何事情。。自更改/删除以来的所有后续覆盖率报告都应遵循新的标志更改。您可以安全地忽略针对旧标志的任何覆盖信息。

如果这是错误的,只需取消更改,随后的覆盖率报告应再次显示(旧)标志的覆盖率。您可以安全地忽略针对旧标志的任何覆盖信息。