15.测试套件的支持

本系列文章均翻译自Automake官方文档:Automake Manual,github同步项目:question

测试套件由一系列的测试用例组成。

Automake可以生成代码来处理两种测试套件。

  1. 基于和dejagnu框架集成。
  2. 基于通用测试脚本,通过定义特殊变量TESTS激活。好像不支持通配符。

第二种允许并发执行测试脚本,使用已有的测试协议(例如TAP),以及自定义测试驱动程序和测试运行程序。

在任何情况下,通过make check调用测试套件。

一些说明:

跳过测试(skipped):测试没有意义,测试条件不满足。

硬错误(hard error):测试场景不对,一些意外情况。

预期失败expected failure (xfail),未预计的通过unexpected pass (xpass)

15.2 简单测试

15.2.1 基于脚本的测试套件

如果TESTS变量被定义了,其值是执行测试的程序或脚本列表。

测试脚本可以并行或串行执行,默认的是并行测试套件。
默认的测试结果是测试脚本的退出结果。

Automake也支持更多的协议:standard (see Using the TAP test protocol) 和 custom (see Custom Test Drivers)。

note:不能在串行中使用这些协议。

不使用测试协议的时候,测试脚本的退出码的意义如下:

  • 0 - 成功
  • 77 - 跳过该测试
  • 99 - 硬错误
  • 其它 - 失败

可以使用XFAIL_TESTS变量列出xfail的测试,它是TESTS的子集。定义DISABLE_HARD_ERRORS变量为非空值来项普通的错误一样对待硬错误。

note:使用测试协议的时候,这两个变量不会起作用。

PASS: foo.sh
PASS: zardoz.tap 1 - Daemon started
PASS: zardoz.tap 2 - Daemon responding
SKIP: zardoz.tap 3 - Daemon uses /proc # SKIP /proc is not mounted
PASS: zardoz.tap 4 - Daemon stopped
SKIP: bar.sh
PASS: mu.tap 1
XFAIL: mu.tap 2 # TODO frobnication not yet implemented

AM_COLOR_TESTS=always,彩色输出。

AM_TESTS_ENVIRONMENTTESTS_ENVIRONMENT变量用于给测试脚本运行初始化代码和设置环境变量。前者是开发人员保留的,后者是用户保留的(可扩展并且覆盖前者的设置)。非空的AM_TESTS_ENVIRONMENT必须以分号结束,且不支持串行测试。

Automake会保证每个在TEST中列出的文件在运行之前被构建。

check_primary中列出的测试程序之在make check的时候构建,而不是在make all期间。

15.2.2 串行测试

强烈不推荐使用。

通过Automake选项serial-tests实现串行测试

15.2.3 并行测试

make -j执行并行测试。

make -j3 check

标准错误与标准输出重定向到每个测试的.log文件,结果在.trs文件。失败的测试收集在test-suite.log文件中。

自定义测试程序;没有注册的扩展名的测试,会使用变量LOG_COMPILER, AM_LOG_FLAGS, and LOG_FLAGS

TESTS = foo.pl bar.py baz
TEST_EXTENSIONS = .pl .py
PL_LOG_COMPILER = $(PERL)
AM_PL_LOG_FLAGS = -w
PY_LOG_COMPILER = $(PYTHON)
AM_PY_LOG_FLAGS = -v
LOG_COMPILER = ./wrapper-script
AM_LOG_FLAGS = -d

可以使用:来保证测试的依赖关系

TESTS = foo-compile.test foo-execute.test
foo-execute.log: foo-compile.log

note:只保证顺序,不保证结果。即无论foo-compile.test是否成功,都会继续执行foo-execute.log。

15.3 自定义测试驱动程序

15.3.1 概述

自定义的测试程序的预期是:正确地运行传递给它的测试程序(包括命令行传递给测试程序的参数),分析它们的执行和结果,创建相关的.log.trs文件,在控制台显示测试结果。

如何确定和分析测试脚本结果的确切细节由各个驱动程序决定。

即使使用自定义的测试驱动程序,并行测试的大部分功能仍然要实现;包括以下几点:

  • TESTS中定义测试脚本,并在运行时可通过TESTSTEST_LOGS覆盖。
  • 通过使用make的选项-jN,并发执行。
  • 每个测试的.log.trs文件,还有摘要的.log文件。
  • recheck目标,RECHECK_LOGS变量,测试懒重新运行。
  • 测试间的依赖关系。
  • check_*变量的支持(check_PROGRAMS, check_LIBRARIES, …)。
  • 使用VERBOSE环境变量获取测试套件失败的详细输出。
  • 定义TESTS_ENVIRONMENT, AM_TESTS_ENVIRONMENT and AM_TESTS_FD_REDIRECT变量。
  • 通用定义和扩展定义LOG_COMPILERLOG_FLAGS变量。

15.3.2 声明驱动

通过定义make变量LOG_DRIVERext_LOG_DRIVERext必须在TEST_EXTENSIONS中声明)来声明自定义的测试套件驱动。

开发者保留变量AM_DRIVER_FLAGS和用户保留变量LOG_DRIVER_FLAGS可被用于定义flags,会被传给每个LOG_DRIVER调用。类似的,对于每个在TEST_EXTENSIONS中声明的扩展ext,在AM_ext_LOG_DRIVER_FLAGSext_LOG_DRIVER_FLAGS中列出的flags会被传递给ext_LOG_DRIVER

15.3.3 定制测试驱动的 API

pass

15.4 TAP 测试协议

15.4.1 介绍

TAP, the Test Anything Protocol,是一个简单的基于文本的在测试模块(或程序)与测试工具之间的接口。
The tests (TAP producers) 向标准输出中以一种简单的格式写入测试结果; a test harness (TAP consumer)会解析和解释这些结果,正确地呈现给用户,并且/或者为稍后的分析注册结果。

15.4.2 结合Automake测试工具使用

目前Automake附带的TAP驱动程序需要一些手动配置。必须从Automake的发行版中获取tap-driver.sh脚本,复制到源码目录,然后使用Automake支持的第三方测试驱动来指导工具俩使用该脚本和AM_INIT_AUTOMAKE发现的awk程序来运行自己的TAP-producing测试。

除了通用的Automake测试驱动选项,tap-driver.sh还支持以下选项:

  • –ignore-exit 忽视测试脚本的退出状态;默认情况下,如果脚本以非零状态退出,驱动会报告一个错误。
  • –comments 指示测试驱动程序在测试套件的输出也显示TAP注释(即以#开头的行)。默认情况下,注释只会复制到.log文件。
  • –no-comments
  • –merge 指示测试驱动合并测试脚本的标准错误到他们的标准输出。如果你想保证测试脚本中的注释与测试结果一起显示,该选项是必须的。
  • –no-merge
  • –diagnostic-string=STRING 改变注释的符号:#->STRING。非TAP官方标准。

猜你喜欢

转载自blog.csdn.net/SHRINKSHR/article/details/85839033