标记允许您对项目中不同测试和功能的覆盖率报告进行隔离和分类。这在以下情况下尤其有用:
- 您有多种类型的测试(例如,单元、集成、前端、后端等)
和/或
- 您使用的是单回购设置,希望独立封装每个项目的测试覆盖率。
![谷歌Chrome_2021-02-0511-41-02@2x.png 1846](https://files.readme.io/55cb482-Google_Chrome_2021-02-05_11-41-022x.png)
公关评论中的旗帜覆盖率
📘
视频演练
要查看实际的“标志”功能,您还可以看一下本视频教程:https://about.codecov.io/product/feature/flags网站/
作为一个最小的示例,考虑一个名为单回购X
具有以下文件夹结构的:
我们回头再看看这个单回购X
文档中的示例。
要应用标志,您必须使用-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}$
一旦完成上传步骤(如上),标志级别的覆盖范围将发送到Codecov,但要解锁Codecov的完整功能集,您还需要将标志管理添加到存储库级别的YAML。
这里只是通过向YAML添加Flag定义来解锁的一些功能。
- 中的标志公关评论和状态检查在Github、Gitlab、Bitbucket实例中
- 覆盖UI中的源代码覆盖率按标志
- 结转旗对于部分测试运行
等。
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)
参数,以便在运行下一组测试之前清除工作区中所有覆盖率报告。
主回购导航栏的“标记”选项卡将允许您可视化历史标记数据。此功能不仅允许您标记代码库的某些部分,还可以使用该标记来跟踪覆盖率是如何随着时间的推移而提高的。
![上午10:32.26分截图2023-01-20 3148](https://files.readme.io/21b39e0-Screen_Shot_2023-01-20_at_10.32.26_AM.png)
已配置标志但尚未启用分析时的标志选项卡
当您第一次单击选项卡时,您需要“启用标记分析”,这让我们知道您希望我们回填您的历史数据。此过程有时可能需要一段时间,具体取决于您拥有的标志数量和提交的频率。
![上午11.10.43分截图2023-01-20 3132](https://files.readme.io/c53a80e-Screen_Shot_2023-01-20_at_11.10.43_AM.png)
如果在当前回购中未配置任何标志,您将看到以下内容
一旦标记数据被回填,您将能够按标记名称排序,并过滤到您想要查看的数据的日期范围。即将推出的功能将是搜索和选择要查看的特定标志以及其他功能,使其成为您的旗帜覆盖范围的一个易于参考的仪表板。如果您对这个新功能有反馈,请告诉我们,我们很想听听您的想法这个Github问题.
![屏幕截图2023-01-20上午10:31.13](https://files.readme.io/c368112-Screen_Shot_2023-01-20_at_10.31.13_AM.png)
在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/测试:路径:-测试/
![2016-08-17下午3.54.13分截屏.png 1408](https://files.readme.io/f89ab42-Screen_Shot_2016-08-17_at_3.54.13_PM.png)
自定义状态仅报告特定标志。
查看我们的公关评论有关配置基于标志的通知的更多信息,请参见第页。
Codecov提供了一种策略,可以将特定构建与主报告隔离开来,同时保持报告的完整性。当报告未连接在主报告中,它们将被忽略以进行比较,尽管它们仍可以用于源代码覆盖、API、徽章和绘图。
夜间构建就是此功能的一个示例。下面是夜间构建的Yaml配置。
现在我们已经配置了标志每晚
为了不加入主报表,我们上传一个标记为每晚
.
#您的Codecov Uploader方法#更多信息请访问https://docs.codecov.com/docs/codecov-uploader./codecov-F夜间
通过添加-F夜间
我们将此构建的所有覆盖率报告数据标记为每晚
覆盖率数据。
如果你看到覆盖率报告中有你不认识的标志,那么它们很可能已经过时了。
标记在以下情况下可能会过时
- 它们已更新(名称或标志对应的路径已更改,或两者都已更改)
- 它们已被删除(我们进行软删除以保留旧报道的历史背景)
如果这些标志确实过时了,那么您不需要做其他任何事情。。自更改/删除以来的所有后续覆盖率报告都应遵循新的标志更改。您可以安全地忽略针对旧标志的任何覆盖信息。
如果这是错误的,只需取消更改,随后的覆盖率报告应再次显示(旧)标志的覆盖率。您可以安全地忽略针对旧标志的任何覆盖信息。