第5章:编写基准测试
本章演示如何使用Qt测试编写基准测试。
编写基准测试
要创建基准测试,我们使用QBENCHMARK宏扩展测试函数。然后,基准测试函数通常由设置代码和一个包含要测量的代码的QBENCHMARK宏组成。这个测试函数对QString::localeAwareCompare().进行基准测试。
void TestBenchmark::simple() { QString str1 = QLatin1String("This is a test string"); QString str2 = QLatin1String("This is a test string"); QCOMPARE(str1.localeAwareCompare(str2), 0); QBENCHMARK { str1.localeAwareCompare(str2); } }
设置可以在函数开始时完成。此时,时钟没有运行。将测量QBENCHMARK宏内的代码,并可能重复多次以获得准确的度量。
有几个后端可供选择,并且可以在命令行上选择。
数据函数
数据函数对于创建比较多个数据输入的基准测试很有用,例如与标准比较相比的区域感知比较。
void TestBenchmark::multiple_data() { QTest::addColumn<bool>("useLocaleCompare"); QTest::newRow("locale-aware-compare") << true; QTest::newRow("standard-compare") << false; }
然后,测试函数使用这些数据来确定要基准测试的内容。
void TestBenchmark::multiple() { QFETCH(bool, useLocaleCompare); QString str1 = QLatin1String("This is a test string"); QString str2 = QLatin1String("This is a test string"); int result; if (useLocaleCompare) { QBENCHMARK { result = str1.localeAwareCompare(str2); } } else { QBENCHMARK { result = (str1 == str2); } } Q_UNUSED(result); }
if (useLocaleCompare)
开关放置在QBENCHMARK宏之外,以避免测量其开销。每个基准测试函数可以有一个活动的QBENCHMARK宏。
构建可执行文件
您可以分别使用CMake或qmake构建测试案例的可执行文件。
使用CMake构建
在您的CMakeLists.txt文件中配置您的构建设置
# Copyright (C) 2022 The Qt Company Ltd. # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause cmake_minimum_required(VERSION 3.16) project(tutorial5 LANGUAGES CXX) find_package(Qt6 REQUIRED COMPONENTS Core Gui Test Widgets) qt_standard_project_setup() qt_add_executable(tutorial5 benchmarking.cpp ) set_target_properties(tutorial5 PROPERTIES WIN32_EXECUTABLE TRUE MACOSX_BUNDLE TRUE ) target_link_libraries(tutorial5 PRIVATE Qt6::Core Qt6::Gui Qt6::Test Qt6::Widgets ) install(TARGETS tutorial5 BUNDLE DESTINATION . RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ) qt_generate_deploy_app_script( TARGET tutorial5 OUTPUT_SCRIPT deploy_script NO_UNSUPPORTED_PLATFORM_ERROR ) install(SCRIPT ${deploy_script})
接下来,从命令行运行cmake
或使用位于Qt-prefix/<version>/<platform>/bin/qt-cmake
的便利脚本qt-cmake
<Qt-prefix>/<version>/<platform>/bin/qt-cmake <source-dir> <build-dir> -G Ninja
然后,运行您首选的生成器工具来构建可执行文件。这里,我们使用Ninja
ninja
使用qmake构建
在您的.pro
文件中配置您的构建设置
QT += widgets testlib SOURCES = benchmarking.cpp # install target.path = $$[QT_INSTALL_EXAMPLES]/qtestlib/tutorial5 INSTALLS += target
接下来,运行qmake
,最后,运行make
以构建您的可执行文件
qmake make
运行可执行文件
运行生成可执行文件应该为您提供以下输出
********* Start testing of TestBenchmark ********* Config: Using QtTest library %VERSION%, Qt %VERSION% PASS : TestBenchmark::initTestCase() PASS : TestBenchmark::simple() RESULT : TestBenchmark::simple(): 0.00030 msecs per iteration (total: 79, iterations: 262144) PASS : TestBenchmark::multiple(locale-aware-compare) RESULT : TestBenchmark::multiple():"locale-aware-compare": 0.00029 msecs per iteration (total: 78, iterations: 262144) ..... PASS : TestBenchmark::series(locale-aware-compare:8001) RESULT : TestBenchmark::series():"locale-aware-compare:8001": 0.039 msecs per iteration (total: 81, iterations: 2048) Totals: 15 passed, 0 failed, 0 skipped, 0 blacklisted, 3971ms ********* Finished testing of TestBenchmark *********
© 2024 Qt公司有限公司。本文件中包含的文档贡献是相应所有者的版权。本文件提供的文档是根据自由软件基金会发布、版本1.3的GNU自由文档许可协议许可的。Qt及其相应标志是芬兰和/或其他国家的The Qt Company Ltd.的商标。所有其他商标均为其相应所有者的财产。