轻量级框架,用于设置端到端测试
项目描述
b2btest - 轻量级框架,用于设置端到端测试脚本
本软件包有助于准备和管理端到端测试,以控制尚未进行适当测试的软件。
一方面,它包括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模块以及libxml2和libxslt库已安装
在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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 93dbbca5ed223c3a4ca663205208c6b51280ade15e2006679b631b03f63a1f3a |
|
MD5 | 7ca01e45088cbb2daf42d741231e0f08 |
|
BLAKE2b-256 | ed81b6d9d600604b0c31857b42884c3927ae1ab0d7526b2a3da77a7603a2d133 |
b2btest-1.4.0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e842e0a39986e21869236611929e69287987b5e55988bd2c1c53ab0a4acdd505 |
|
MD5 | 1da66cb1095e318b9021c24a2d3160a7 |
|
BLAKE2b-256 | 72c05b66f2da48a8d2052b4cc8afa3a8672278740f9ea38650ddfea85e186397 |