【发布时间】:2019-11-08 22:38:13
【问题描述】:
我正在为我的团队设置新的单元测试和集成测试基础架构,并希望确保从选择正确的测试框架开始。我是一名嵌入式开发人员,测试在具有 C/C++ 生产代码库的 VxWorks 操作系统上运行的代码。
我们需要一个能够直接测试 C/C++ 进行单元测试的框架,所以对于我们的单元测试,我选择了 Googletest 作为我们的框架。
但是,对于集成测试,我们通常使用 Python 脚本进行测试(没有测试框架)。 Python 脚本通过网络连接到嵌入式系统,并通过发送命令和接收遥测数据来测试用例。
使用 pytest 作为测试框架是否有利于我们目前使用 Python 进行嵌入式系统集成测试的方式?我见过的大多数示例通过在 Python 生产代码库中为单个函数创建断言,以更单元测试的方式使用 pytest。
编辑: 根据 hoefling 的评论,我将提供我们现有 Python 集成测试用例之一的(非常简化的)示例,以及我认为其对应的 Pytest 实现将是什么。
#Current example
def test_command_counter():
preTestCmdCount = getCmdCountFromSystem()
sendCommandToSystem()
postTestCmdCount = getCmdCountFromSystem()
if (postTestCmdCount != (preTestCmdCount + 1)):
print("FAIL: Command count did not increment!")
else:
print("PASS")
#Using Pytest?
def test_command_counter():
preTestCmdCount = getCmdCountFromSystem()
sendCommandToSystem()
postTestCmdCount = getCmdCountFromSystem()
assert postTestCmdCount == (preTestCmdCount + 1)
所以,如果我错了,请纠正我,但对于这个简化的案例,使用 Pytest 优于普通 Python 的优势似乎是:
能够利用 pytest 的自动化测试用例发现功能,这样我就可以轻松地运行我的所有测试功能,而不必为此创建自定义代码。
能够使用“断言”语法,该语法将为每个测试自动生成通过/失败语句,而不必为每个测试用例手动实现通过/失败打印语句
【问题讨论】:
-
pytest是高度可定制的,可以很好地用于集成测试。至于问题,IMO太宽泛了,取决于您的要求;也许重新制定?或者举一个你当前正在编写的测试脚本的例子,并询问使用pytest等重写时它会是什么样子。 -
感谢您的回复@hoefling。请查看已编辑的问题。
-
不错,点赞!添加我的 2 美分 - IMO 的主要功能是重用代码以通过夹具进行资源设置/拆卸,在没有循环的情况下测试参数化,例如对多台设备运行相同的测试是单行和并行测试执行(包括在多台机器上进行分区测试)。
-
其余的都是小而简洁的功能,例如用于执行的通用测试选择(例如,仅运行上次运行失败的测试,仅运行“新”测试,打印找到的测试而不运行它们等),受控执行(例如,在第一次失败或最大
n失败后停止、跳过测试、将测试标记为不会使测试套件失败的“预期失败”)、可定制的报告等。此外,还有各种插件。