VectorCAST/QA与Bazel集成配置方法

2026-03-12 85697阅读

VectorCAST/QA是VectorCAST产品族中用于统计系统测试过程中代码覆盖度的软件工具。为降低配置难度,传统的VectorCAST/QA系统测试项目通常使用手动操作方式完成以下步骤:

>创建系统测试环境

>添加待插装源码

>设置覆盖度类型并插装

>导入或查看覆盖度数据

对于使用Bazel构建的大型项目,当需要统计覆盖度的源码量大时,手动添加被测源码需要了解项目组织结构。更快捷的方法是在Bazel构建的过程中,由VectorCAST/QA自动完成创建测试环境,根据构建目标自动添加插装的源码列表,并完成插装、测试结果加载,以及生成测试报告的工作。

VectorCAST的JIT(Just In Time)功能可以实现上述目标。VectorCAST JIT功能提供一系列VectorCAST工具的API接口,可用于在项目构建时完成上述步骤。下面将具体介绍在Ubuntu发行版本中,如何实现VectorCAST/QA与Bazel构建工具的集成方法。

01配置集成

下载VectorCAST/QA的Bazel规则集

VectorCAST/QA的Bazel规则集是将VectorCAST/QA的JIT API基于Bazel构建工具进行更高层次的封装,以便在Bazel build或Bazel test构建过程中更便捷的调用JIT API。因此,需要将此规则集下载到测试机中。

导入VectorCAST规则集

打开项目对应的.bazelrc文件,导入VectorCAST/QA的Bazel规则集:

import{absolute_or_local_path/to/rules_vectorcast}/vectorcast.rc

上述语句中,斜体部分应改为插件文件vectorcast.rc的实际路径,可以是相对于当前.bazelrc的相对路径,也可以是绝对路径。示例如下:

7a03e51a-1c37-11f1-90a1-92fbcf53809c.png

图1:bazelrc导入vectorcast.rc规则集

配置Bazel项目

为了使用VectorCAST/QA的JIT功能,需要对项目进行配置。

有两种配置方法:

方法一:配置WORKSPACE文件,添加对VectorCAST/QA JIT的支持;

方法二:当项目开启Bzlmod时,配置MODULE.bazel来添加对VectorCAST/QA JIT的支持。

配置WORKSPACE

打开项目的根目录中的WORKSPACE文件,添加如下配置:

local_repository(

name = "rules_vectorcast",

path ="{absolute_or_local_path/to/rules_ vectorcast}"

)

load("@rules_vectorcast//:deps.bzl", "rules_vectorcast_dependencies")

rules_vectorcast_dependencies()

load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace")

bazel_skylib_workspace()

load("@rules_vectorcast//:workspace.bzl", "vectorcast_tools")

vectorcast_tools(

name = "vectorcast_tools",

)

以上配置中,斜体部分应改为插件文件vectorcast.rc的实际路径,可以是相对于当前WORKSPACE的相对路径,也可以是绝对路径。

示例如下:

图2:配置WORKSPACE

配置MODULE.bazel

打开项目的根目录中的MODULE.bazel文件,添加如下配置:

bazel_dep(name = "rules_vectorcast")

local_path_override(

module_name = "rules_vectorcast",

path = "{absolute_or_local_path/to/rules_ vectorcast}"

)

vectorcast_tools_extension=use_extension("@rules_vectorcast//:extensions.bzl", "vectorcast_tools_extension")

vectorcast_tools_extension.tools()

use_repo(vectorcast_tools_extension, "vectorcast_tools")

以上配置中,斜体部分应改为插件文件vectorcast.rc的实际路径,可以是相对于当前MODULE.bazel的相对路径,也可以是绝对路径。

示例如下:

7ac99594-1c37-11f1-90a1-92fbcf53809c.png

图3:配置MODULE.bazel

配置构建规则

配置完Bazel项目和Bazel工具本身使用VectorCAST规则集后,还需要在构建目标对应的BUILD.bazel文件中加载该规则集。具体的方法如下:

找到Bazel build构建目标,或者build test目标所在的BUILD.bazel文件

编辑BUILD.bazel文件,首行添加load语句加载指定规则。

配置如下:

load("@rules_vectorcast//:def.bzl", "vectorcast_binary")

在文件末尾添加vectorcast_binary配置,用于生成包含覆盖度插装代码的可执行程序。其中,

target_to_instrument指原始构建目标的名称;

name为新生成的包含插装代码的新可执行程序的名称:

vectorcast_binary(

name = "manager_driver_instrumented",

target_to_instrument = ":manager_driver"

)

在下图示例中:

构建目标是可执行程序:manager_driver

首行使用load加载bazel规则

末尾配置插装生成新可执行程序的名称

图4 配置目标的构建规则

配置构建指令

使用VectorCAST/QA JIT功能还需要在最终的Bazel构建指令中开启VectorCAST JIT功能。

只需要在最终的Bazel build或者Bazel test指令中添加以下选项:

--config=vectorcast:开启VectorCAST JIT

--vectorcast_compiler_tag= :编译链模板Tag,VectorCAST会根据这个tag自动加载相应的编译选项来插装被测代码。

目前可支持Bazel集成的编译链Tag列表如下:

GNU_CPP_X

GNU_CPP98_X

GNU_CPP03_X

GNU_CPP11_X

GNU_CPP14_X

GNU_CPP17_X

GNU_CPP20_X

CLANG_CPP_X

CLANG_CPP98_X

CLANG_CPP03_X

CLANG_CPP11_X

CLANG_CPP14_X

CLANG_CPP17_X

CLANG_CPP20_X

--vectorcast_coverage_type=

STATEMENT+BRANCH:覆盖度类型,可选类型有:

STATEMENT+MC/DC

STATEMENT+BRANCH

STATEMENT

FUNCTION

MC/DC

BRANCH

FUNCTION+FUNCTION_CALL

下图为示例项目中生成可执行程序的脚本。在Bazel build指令中添加了如下配置,以开启VectorCAST JIT插装,使用编译链为GNU C++编译链;插装覆盖度类型为语句和分支:

--config=vectorcast--vectorcast_compiler_tag=GNU_CPP_X--vectorcast_coverage_type=STATEMENT+BRANCH

7b7a6338-1c37-11f1-90a1-92fbcf53809c.png

图5:配置Bazel构建指令

注意:对于Bazel 7.1.2及更低版本,需要额外添加配置:--spawn_strategy=local

02构建项目

完成前述配置后,即可开始构建项目。以下是示例项目的完整构建脚本,包含构建目标可执行程序、模拟手动执行用例、以及加载测试数据等所有操作。

7bd219c0-1c37-11f1-90a1-92fbcf53809c.png

图6:完整构建脚本

进入项目目录,直接执行project_build.sh,等待构建完成。

7c28d990-1c37-11f1-90a1-92fbcf53809c.png

图7:构建示例项目

构建完成后,会打印最终生成的HTML报告完整路径信息,如下图所示。

7c865110-1c37-11f1-90a1-92fbcf53809c.png

图8:测试报告路径

使用浏览器打开management_report.htm测试报告,内容如下:

7cdc854e-1c37-11f1-90a1-92fbcf53809c.png

图9:测试报告示例

互动专区

欢迎在留言区提出您的意见和建议,参与即有机会获得精美礼品。

包括但不限于:

>期望未来VectorCAST产品支持哪些新特性。

>期望以何种方式(图文或视频)更深入了解VectorCAST产品的哪些特性。

我们将从参与互动的用户中随机抽取 5 位,送出一份精美定制礼品,期待您的建议!