VectorCAST/QA与Bazel集成配置方法
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的相对路径,也可以是绝对路径。示例如下:
图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的相对路径,也可以是绝对路径。
示例如下:
图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=
目前可支持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
图5:配置Bazel构建指令
注意:对于Bazel 7.1.2及更低版本,需要额外添加配置:--spawn_strategy=local
02构建项目
完成前述配置后,即可开始构建项目。以下是示例项目的完整构建脚本,包含构建目标可执行程序、模拟手动执行用例、以及加载测试数据等所有操作。
图6:完整构建脚本
进入项目目录,直接执行project_build.sh,等待构建完成。
图7:构建示例项目
构建完成后,会打印最终生成的HTML报告完整路径信息,如下图所示。
图8:测试报告路径
使用浏览器打开management_report.htm测试报告,内容如下:
图9:测试报告示例
互动专区
欢迎在留言区提出您的意见和建议,参与即有机会获得精美礼品。
包括但不限于:
>期望未来VectorCAST产品支持哪些新特性。
>期望以何种方式(图文或视频)更深入了解VectorCAST产品的哪些特性。
我们将从参与互动的用户中随机抽取 5 位,送出一份精美定制礼品,期待您的建议!







