CocoQML 设置

关于 CocoQML

QML 是一种用户界面标记语言,用于 Qt 框架。Coco 有一个支持 QML 代码覆盖率的附加组件。

该附加组件作为单独的软件包提供。它由两部分组成,一个用于调试 QML 代码的程序和一个在运行时需要的 QML 插件。

调试程序称为 cocoqmlscanner,并将代码插入程序的 QML 源代码中。插件实现了一个在运行时收集覆盖率数据并将其写入文件的 QML 对象。该插件以源代码的形式提供,并由客户自行编译。

设置

CocoQML 软件包是一个 ZIP 归档。解压缩后,它将生成一个目录,其中包含两个子目录:

  • bin:包含 cocoqmlscanner 可执行文件和所需的一些库的目录。
  • trackerplugin:跟踪插件源代码。

这两个目录彼此独立,可以将它们复制到测试安装中的不同位置。

插件的编译

该插件是一个 qmake 项目。必须为要衡量覆盖率的应用程序相同的 Qt 版本进行编译。我们建议将其作为您项目的一部分,并将其包含在仓库中,以便自动正确编译。

UNIX® 下的编译如下所示:

$ /Qt/5.11.3/gcc_64/bin/qmake ../trackerplugin
Info: creating stash file /home/user/trackerplugin-build/.qmake.stash
$ make
g++ -c -pipe -O2 -std=gnu++11 -D_REENTRANT -Wall -W -fPIC -DQT_NO_DEBUG -DQT_PLUGIN -DQT_GUI_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I../trackerplugin -I. -I/Qt/5.11.3/gcc_64/include -I/Qt/5.11.3/gcc_64/include/QtGui -I/Qt/5.11.3/gcc_64/include/QtQml -I/Qt/5.11.3/gcc_64/include/QtNetwork -I/Qt/5.11.3/gcc_64/include/QtCore -I. -isystem /usr/include/libdrm -I/Qt/5.11.3/gcc_64/mkspecs/linux-g++ -o csexeapi.o ../trackerplugin/csexeapi.cpp
[...]
mv -f libcocoqmltracker.so QmlJsCoverage/libcocoqmltracker.so
cp -f /home/user/trackerplugin/qmldir QmlJsCoverage

以这种方式编译后,构建目录包含一个名为 QmlJsCoverage 的子目录,其中包含插件。

$ ls QmlJsCoverage/
libcocoqmltracker.so  qmldir

Microsoft® Windows 的构建类似。插件目录包含一个 DLL 文件而不是 .so 文件。

CocoQML 的使用

调试

为了衡量软件项目中的 QML 覆盖率,其 QML 文件必须被调试。这通过 cocoqmlscanner 命令完成,形式如下:

$ cocoqmlscanner <项目目录>

<项目目录> 子目录中的所有 QML 文件随后(可逆地)被插入检测工具,并生成程序数据库(或 .csmes 文件)。默认情况下,程序数据库文件名为 cocoqmlscanner_result.csmes

QML 文件被插入检测后,建议重新编译项目。在以下两种情况下,这尤为重要:

  • QML 文件是程序的资源(即,在 .qrc 文件中指定)。
  • 使用了 QML 编译器。(这是使用 Qt Creator 编译的发布构建的默认值)。

在这两种情况下,编译都使得插入了检测工具的文件成为可执行文件的一部分。

测量覆盖率

插入检测后,应用程序需要追踪器插件才能运行。要找到该插件,它使用 Qt 5 的 QML2_IMPORT_PATH 或 Qt 6 的 QML_IMPORT_PATH 环境变量。相应的变量必须设置,其值必须包含 QmlJsCoverage/ 的父目录。(这意味着字符串 QmlJsCoverage 不出现在 QML_IMPORT_PATH 路径的末尾。)

如果此变量设置正确,则插入检测的可执行程序可以运行。

调试

如果出现问题,将变量 COCOQML_VERBOSE 设置为 1 有用,这允许插件记录其活动。

Coco v7.2.0©2024 Qt 公司有限公司。
Qt 和相应的标志是芬兰和/或其他国家的 Qt 公司的商标。所有其他商标均为各自所有者的财产。