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 公司的商标。所有其他商标均为各自所有者的财产。