单元测试工具Google Benchmark、Catch2、PyTestReport、xlsunit介绍

以下为你介绍的单元测试工具都可用在Linux系统上:Google Benchmark(用来对代码片段进行基准测试的库)、Catch2(C++ 原生多范式测试框架)、PyTestReport(Python 单元测试框架)、xlsunit(面向数据库应用的单元测试框架)。

1、Google Benchmark(用来对代码片段进行基准测试的库)

单元测试工具Google Benchmark、Catch2、PyTestReport、xlsunit介绍

Benchmark 是 Google 一个用来对代码片段进行基准测试的库,类似单元测试,例如:

#include <benchmark/benchmark.h>

static void BM_SomeFunction(benchmark::State& state) {

// Perform setup here

for (auto _ : state) {

// This code gets timed

SomeFunction();

}

}

// Register the function as a benchmark

BENCHMARK(BM_SomeFunction);

// Run the benchmark

BENCHMARK_MAIN();

要求:

该库可与C++03一起使用,但是,它需要C++11才能构建,包括编译器和标准库支持。

构建库需要以下最低版本:

GCC 4.8

Clang 3.4

Visual Studio 14 2015

Intel 2015 Update 1

基本用法:

定义一个函数,该函数执行要测量的代码,使用BENCHMARK宏将其注册为基准函数,并确保适当的主函数可用:

#include <benchmark/benchmark.h>

static void BM_StringCreation(benchmark::State& state) {

for (auto _ : state)

std::string empty_string;

}

// Register the function as a benchmark

BENCHMARK(BM_StringCreation);

// Define another benchmark

static void BM_StringCopy(benchmark::State& state) {

std::string x = "hello";

for (auto _ : state)

std::string copy(x);

}

BENCHMARK(BM_StringCopy);

BENCHMARK_MAIN();

要运行基准,请针对基准库(libbenchmark.a/.so)进行编译和链接。如果您按照项目主页的构建步骤进行操作,则该库将位于您创建的构建目录下。

# Example on linux after running the build steps above. Assumes the

# `benchmark` and `build` directories are under the current directory.

$ g++ mybenchmark.cc -std=c++11 -isystem benchmark/include \

 -Lbenchmark/build/src -lbenchmark -lpthread -o mybenchmark

或者,链接到Benchmark_main库并删除BENCHMARK_MAIN();,上面得到相同的行为。

默认情况下,编译后的可执行文件将运行所有基准测试。传递--help参数以获取选项信息。

下载地址:https://github.com/google/benchmark

2、Catch2(C++ 原生多范式测试框架)

单元测试工具Google Benchmark、Catch2、PyTestReport、xlsunit介绍

Catch2 是一个现代的 C++ 原生多范式测试框架,可用于单元测试、TDD 和 BDD,它主要以单个 header 形式分发,支持 C++11、C++14、C++17 和更高版本,同时也支持 Objective-C(可能支持 C)。

下载地址:https://github.com/catchorg/Catch2

3、PyTestReport(Python 单元测试框架)

一个由HTMLTestRunner项目为灵感,并基于HTMLTestRunner进行二次开发的一个项目。主要在API调用、报告样式、扩展性等方面进行了增强。

HTMLTestRunner是基于Python单元测试官方实现的TextTestResult为参考,实现了对应的HTMLTestResult版本。

通过pip安装:

pip install PyTestRepor

通过源码安装(最新版本):

pip install git+https://github.com/five3/PyTestReport.git

或者:

git clone https://github.com/five3/PyTestReport.git

cd PyTestReport

python setup.py build

python setup.py install

单元测试样例(unittest):

import unittest

import pytestreport

class MyTest(unittest.TestCase):

def testTrue(self):

self.assertTrue(True)     

if __name__ == '__main__':

pytestreport.main(verbosity=2)

单元测试样例(pytest):

对于pytest框架,收集其测试结果信息是通过pytest插件形式实现的。使用之前只要确保正常安装了PyTestReport即可。具体使用方式如下:

import pytest

def testTrue():

assert True

def testFalse():

assert False

def testError():

1 / 0

@pytest.mark.skip(reason="misunderstood the API")

def testSkip():

assert 1 == 1

@pytest.mark.xfail(reason="Xpass")

def testXPass():

assert True

@pytest.mark.xfail(reason="Xfail")

def testXFail():

assert False

if __name__ == '__main__':

pytest.main(["-s", "pytest_Demo.py", "--pytest_report", "Pytest_Report.html"])

模板展示:

单元测试工具Google Benchmark、Catch2、PyTestReport、xlsunit介绍

下载地址:https://github.com/five3/PyTestReport

4、xlsunit(面向数据库应用的单元测试框架)

xlsunit 辅助junit,用于辅助基于 Spring、SpringBoot 企业信息系统单元测试,这种企业信息系统都会有大量的数据库操作,使用 xlsunit 来初始化测试前的数据库,以及使用 xlsunit 来比较业务调用后的数据库数据,能减少单元测试工作量,增强单元测试可维护性。

xlsunit 用 excel 来模拟数据库表数据,适合那种一次业务操作,多个表数据变化的应用系统。

XLSParser workflowParser = null;

//

@Autowrired WorkflowService workflowService;

//

@MockBean

private ThirdPatyUserService userService;

@Autowired

protected SQLManager sqlManager;

@Before

public void init() {

super.init();

//XLSUnit BeetlSql

DBAccess dbAccess = new BeetlSqlDBAccess(sqlManager);

// Excel 

XLSFileLoader loader = new XLSFileLoader("root");

//

workflowParser = new XLSParser(loader, "user.xlsx", dbAccess,

 new 

RowHolderFacotoy.RowBeetlSQLHolderFactory());

}

public void testUser1() {

//执行某个测试场景的初始化工作,初始化user表

VariableTable vars = new VariableTable();

userParser.init(vars);

//开始测试,从excel中获取userId和password

userParser.prepare("场景1", vars);    

Integer id = (Integer) vars.find("id");

String newPassword = vars.findString("test.password");

//调用业务代码,修改用户密码

userSerivce2.modifyUserInfo(id, newPassword);

//比较数据库里的数据跟场景1的数据是否一致

userParser.test("场景1", vars);

}

可以将测试数据写在 excel 里,或者通过数据库客户端工具粘贴到 excel 里完成数据的输入。可以用拥有任意多个 excel 文件,每个文件概念上都可以包含一个初始化数据的多种测试场景,excel 文件有三部分组成。

第一个工作表,这个工作表用来介绍当前 excel 文件所测试的业务,以及包含一个目录,快捷指向每个场景测试。

第二个表示 数据库初始化数据,可以包含多个表的初始化数据,也可以在初始化数据定义前,定义一些变量,这些变量可以用在初始化数据,JUnit 代码里,以及随后的场景测试里。

第三个表以后的每个工作表都是场景测试表,对应了单元测试完毕后,期望的数据库的样子。通常用红色背景标注在表的列名上,这样表示只让 xlsunit 比较关心的列。同时,也能提醒阅读者,编写期望值。

xlsunit 基于 Beetl,完成 Excel 里计算表达式实现。

下载地址:https://gitee.com/xiandafu/xlsunit

注明

以上就是单元测试工具Google Benchmark、Catch2、PyTestReport、xlsunit的介绍内容,这些单元测试工具都能使用在Linux操作系统中。

栏目相关文章