跳转到主要内容

轻量级框架,用于设置端到端测试

项目描述

b2btest - 轻量级框架,用于设置端到端测试脚本

CI Coverage Status PyPI - Downloads PyPI - Version

B2BLogo

本软件包有助于准备和管理端到端测试,以控制尚未进行适当测试的软件。

一方面,它包括back2back,这是一个命令行工具,可以对任何可以通过命令行调用并生成一些输出文件的软件执行端到端测试,当它们不同时发出警告。您可以在一个简单的YAML文件中定义要监视的命令集和输出。

另一方面,它包括比较函数和Python单元测试中的断言,您可以在执行类似工作流程的测试套件中使用,将参考输出保存在一个文件夹中,并按测试名称命名。

命令行工具和Python库都可通过插件进行扩展,以获取有关多种文件格式(如音频、xml、文本、pdf等)的diff信息。

为什么进行端到端测试

端到端测试是一种黑盒测试,它只比较在给定输入的情况下,您是否总是得到相同的输出。单元测试和测试驱动开发是测试软件的一种相当受欢迎的策略。但通常我们需要更改未经适当测试开发的软件。快速控制它的方法是为它设置一组端到端测试,然后以比没有任何测试更大的信心进行重构。

警告提示:不要因为有了back2back测试就过于自信。它是一种黑盒测试,因此很难确保全面覆盖。你可能会更改b2b测试未执行的某个行为,而没有注意到。

b2btest简化工作流程

当b2b测试难以运行和维护时,它们会变得过时和无用。此脚本自动化了大多数繁琐的back2back相关任务,如设置、验证结果、接受更改、清除数据...

功能

  • 你可以将以下内容放入back2back测试中:
    • 任何shell命令行(带管道等)的输出(文件),或者
    • unittest.TestCase方法中的任何可序列化数据
  • 它是自动检查的,就像大多数Xunit框架一样
  • 它自动管理期望数据
  • 在失败时,它生成方便的数据以评估更改,提供差异并保留失败和期望数据以供参考。
  • 提供了一个方便的命令行来接受失败的结果作为正确的结果。
  • 当测试变成绿色或接受所有失败数据时,所有相关失败数据都会被清除。
  • 可以添加比较器和差异生成器来处理您自己的文件类型。
  • 可以为相同的测试设置架构相关的输出。

如何安装

只需使用

$ pip install b2btest

为了正确比较音频文件,您应该考虑安装音频扩展

$ pip install b2btest_audio

依赖项

对于xml文件,它需要lxml模块以及libxml2libxslt库已安装

在unittest中执行Back2Back测试

import unittest
import b2btest # Not used but load a new assertion method for TestCase
import datetime

class MyTest(unittest.TestCase):
	def test_this(self):
		self.assertB2BEqual("data")

	def test_that_willallwaysfail(self):
		self.assertB2BEqual(str(datetime.datetime.now()))

if __name__ == '__main__':
	# acceptMode attribute makes the assert accept the results
	# expectation as new
	if '--accept' in sys.argv:
		sys.argv.remove('--accept')
		unittest.TestCase.acceptMode = True

	unittest.main()

CLI程序的Back2Back测试

当你测试命令行的输出时,你可以定义一个yaml文件,如下所示(命名为b2bcases.yaml)。

#!/usr/bin/env back2back 

datapath: "b2bdata" # Point it to the directory containing your reference data
testcases:

  HelloWorld:
    command: echo Hello World > output.txt
    outputs:
    - output.txt

  AlwaysChanging:
    command: date > output.txt
    outputs:
    - output.txt

  Generate1KHzSine: # Requires the b2btest_audio package
    command: sox -n /tmp/sine.wav synth 1.0 sine  1000.0
    outputs:
    - /tmp/sine.wav

列出可用的测试用例

back2back b2bcases.yaml --list

运行它们

back2back b2bcases.yaml

第一次运行测试用例时,它将失败,因为没有期望值,你必须检查它是有效的并接受它。连续的失败意味着行为已经改变。如果你期望行为发生变化,你可以接受新的结果。

接受一个具体的案例

back2back b2bcases.yaml --accept HelloWorld

接受所有失败的测试

back2back b2bcases.yaml --acceptall

如果某些输出依赖于计算机架构或平台(Windows、Mac...),请在接受时使用--arch--platform选项。将为这样的架构或平台生成独立的期望文件。

back2back b2bcases.yaml --accept HelloWorld --arch

旧接口

如果你想要以编程方式生成测试用例,你仍然可以使用旧的Python接口。而不是yaml文件,你可以编写像这样的Python脚本

就像在这个b2b脚本中做的那样

	#!/usr/bin/python
	import sys
	from b2btest import runBack2BackProgram

	data_path="path/to/b2bdata"
	back2BackTests = [
		("myprogram_with_option",
				"./myprogram --option input1.wav input2.wav output.wav otheroutput.wav ",
				[
					"output.wav",
					"otheroutput.wav",
		]),
		("myprogram_with_other_option",
				"./myprogram --other-option input1.wav input2.wav output.wav ignoredoutput.wav ",
				[
					"output.wav",
				]),
		]
	runBack2BackProgram(data_path, sys.argv, back2BackTests)

将此文件保存为back2back.py,例如,并使其可执行。

使用相同的命令行直接使用Python脚本,但无需yaml文件。

额外建议

使用持续集成

将您的测试放在持续集成系统中,例如

  • Travis-CI
  • BuildBot
  • TestFarm
  • CDash

你可能会对通过测试感到懒惰,但机器人不会。将您的机器人连接到您的VCS,以便它们为每次提交进行测试。

保持期望数据最新

如果一个b2b测试变成红色,不要让它持续很长时间,要么接受它,要么回滚您的代码。b2b检测更改,但如果你在更改中,你将不会注意到是否发生了第二个更改。如果你的期望数据由版本控制系统支持,请在修复它之前勇敢地接受错误的数据。但不要忘记。

变更日志

1.4.0

  • 音频插件已从代码库中分离出来,作为b2btest_audio

1.3.3

  • 简化了对lxml的依赖

1.3.2

  • diffaudio作为控制台脚本
  • diffxml作为控制台脚本
  • 修复:xml和音频插件的入口点
  • 仅用markdown README

1.3.1

  • 更新README

1.3

  • 通过仅说明生成的失败结果文件来避免大差异
  • 修复特定Python版本中的Unicode问题
  • 为Python<3.5使用较旧的lxml版本

1.2

  • CLI:修复:实际上只检查了第一个输出
  • 基于插件的类型敏感差异
  • 针对XML的特定差异
  • XML和音频差异现在作为附加功能提供
  • 在yaml测试用例中,'extensions'键用于将自定义文件扩展名关联到差异插件

1.1

  • 使用单元测试样式的用法,测试Python代码而不是命令行程序
  • 新的命令行工具back2back,它接受包含测试用例定义的yaml文件

1.0

  • 第一个GitHub版本
  • (之前有未公开的版本)

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

b2btest-1.4.0.tar.gz (14.1 kB 查看哈希值)

上传时间

构建分布

b2btest-1.4.0-py3-none-any.whl (12.3 kB 查看哈希值)

上传时间 Python 3

由以下提供支持