为对象打标签 (Pro)

标签非常适合以可筛选的方式对对象进行分组,将其拆分为更小、更易于理解的片段。它们可用于标注状态,也可用于在整个数据模型中创建产品类型、产品、测试活动或发现项的自定义集合。

在 DefectDojo 中,标签是一等公民,被视为数据模型每个层级中组织管理的推动者。

以下示例展示了一个具有两个标签的产品,以及四个各带一个标签的发现项:

标签用法的高层示例

标签格式

标签可以采用以下任意一种格式:

  • StringWithNoSpaces(无空格字符串)
  • string-with-hyphens(带连字符的字符串)
  • string_with_underscores(带下划线的字符串)
  • colons:acceptable(可包含冒号)

标签管理(Pro 界面)

添加和移除

标签可以通过以下方式进行管理:

  1. 创建或编辑新对象

    当通过界面或 API 创建或编辑新对象时,会有一个字段用于指定要为该对象设置的标签。

    标签

  2. 在导入/重新导入发现项时

导入/重新导入表单(无论是在界面中还是通过 API)都提供标签字段。提交该表单后,测试将被标记为 [tag] 和 [daily-import]。如果选中了“将标签应用于发现项”或“将标签应用于端点”,这些对象也会被打上标签。标签为附加自动化运行详情和工具信息提供了机会,而这些信息可能不会被直接记录在测试或发现项对象中。

标签

  1. 通过批量编辑

当从表格中选中多个发现项时,您可以使用批量编辑菜单同时更改多个发现项关联的标签。请注意,这会将所有发现项级别的标签替换为指定的标签;现有的发现项标签将被覆盖。

批量编辑发现项

标签管理(经典界面 / 开源版)

添加和移除

标签可以通过以下方式进行管理:

  1. 创建或编辑新对象

    当通过界面或 API 创建或编辑新对象时,会有一个字段用于指定要为该对象设置的标签。该字段是一个多选字段,还具备自动补全功能,使搜索和添加现有标签变得轻而易举。以下是上一节截图中产品上该字段的样子:

    对象上的标签管理

  2. 导入和重新导入

    标签也可以在导入或重新导入时应用于给定测试。当通过自动化方式经由 API 导入时,这是一个非常实用的场景,因为它提供了附加自动化运行详情和工具信息的机会,而这些信息可能不会被直接记录在测试或发现项对象中。

    该字段的外观和行为与对象上的字段完全相同

  3. 批量编辑菜单(仅限发现项)

    当需要为多个发现项更新同一组标签时,可以使用批量编辑菜单来减轻工作量。

    在以下示例中,假设我想将两个带有标签“tag-group-alpha”的发现项的标签更新为新的标签列表 [“tag-group-charlie”, “tag-group-delta”]。 首先,我会选择要更新的标签:

    选择要批量编辑标签的发现项

    选中某个发现项后,会出现一个名为“批量编辑”的新按钮。点击该按钮会弹出一个包含多个选项的下拉菜单,但目前只关注标签。将该字段更新为所需的标签列表,如下所示,然后点击提交

    应用批量编辑标签更新的更改

    所选发现项上的标签将被更新为批量编辑菜单中标签字段所指定的内容

    完成的批量编辑标签更新

标签继承

Pro 界面说明:虽然可以通过 Pro 界面配置标签继承,但目前继承的标签只能通过经典界面或 API 进行访问和筛选。

当启用标签继承后,应用于某个产品的标签将自动应用于产品层级结构中该产品下的所有对象。

配置

标签继承可以在以下范围级别启用:

  • 全局范围
    • 系统范围内的每个产品都将开始把标签应用于其所有子对象(测试活动、测试和发现项)
    • 该设置位于系统设置中
  • 产品范围
    • 只有所选产品会开始把标签应用于其所有子对象(测试活动、测试和发现项)
    • 该设置位于产品创建/编辑页面

行为

启用标签继承后,标准标签仍可以按照常规方式添加到对象或从对象中移除。 但是,继承的标签如果不从父对象中移除,就无法从子对象中移除。 请参见以下示例:向测试对象添加标签“test_only_tag”,向测试活动添加标签“engagement_only_tag”。

继承标签示例

当对产品上的标签列表进行更新时,产品内的所有对象都会异步进行相同的更改。此任务耗时的长短与发现项中包含的对象数量直接相关。

开源版: 如果在合理的时间内没有观察到标签变更,请查阅 celery worker 日志以确定可能出现问题的位置。

按标签筛选(经典界面)

可以通过界面和 API 以多种方式筛选标签。例如,以下是发现项筛选器的一个片段:

发现项筛选器片段

有十个与标签相关的字段:

  • 标签(Tags):筛选附加在给定发现项上的任意标签
    • 示例:
      • 将返回该发现项
        • 发现项标签: [“A”, “B”, “C”]
        • 筛选查询: “B”
      • 不会返回该发现项
        • 发现项标签: [“A”, “B”, “C”]
        • 筛选查询: “F”
  • 排除标签(Not Tags):筛选未附加在给定发现项上的任意标签
    • 示例:
      • 将返回该发现项
        • 发现项标签: [“A”, “B”, “C”]
        • 筛选查询: “F”
      • 不会返回该发现项
        • 发现项标签: [“A”, “B”, “C”]
        • 筛选查询: “B”
  • 标签名称包含(Tag Name Contains):筛选在给定发现项中标签名称包含部分或全部查询内容的标签
    • 示例:
      • 将返回该发现项
        • 发现项标签: [“Alpha”, “Beta”, “Charlie”]
        • 筛选查询: “et”(“Beta”的一部分)
      • 不会返回该发现项
        • 发现项标签: [“Alpha”, “Beta”, “Charlie”]
        • 筛选查询: “meg”(“Omega”的一部分)
  • 排除标签(Not Tags):筛选在给定发现项中标签名称不包含部分或全部查询内容的标签
    • 示例:
      • 将返回该发现项
        • 发现项标签: [“Alpha”, “Beta”, “Charlie”]
        • 筛选查询: “meg”(“Omega”的一部分)
      • 不会返回该发现项
        • 发现项标签: [“Alpha”, “Beta”, “Charlie”]
        • 筛选查询: “et”(“Beta”的一部分)

对于其余六个标签筛选器,它们遵循与上述“标签”和“排除标签”相同的规则,只是作用于数据模型中的不同层级:

  • 标签(测试):筛选附加在给定发现项所属测试上的任意标签
  • 排除标签(测试):筛选未附加在给定发现项所属测试上的任意标签
  • 标签(测试活动):筛选附加在给定发现项所属测试活动上的任意标签
  • 排除标签(测试活动):筛选未附加在给定发现项所属测试活动上的任意标签
  • 标签(产品):筛选附加在给定发现项所属产品上的任意标签
  • 排除标签(产品):筛选未附加在给定发现项所属产品上的任意标签