Python pytest是否应该用于嵌入式系统的集成测试?

Python pytest是否应该用于嵌入式系统的集成测试?,python,pytest,Python,Pytest,我正在努力建立我的团队新的单元测试和集成测试基础设施,并希望通过选择正确的测试框架来确保我的起步。我是一名嵌入式开发人员,在VxWorks操作系统上测试代码,使用C/C++生产代码库 我们需要一个能够直接测试C/C++的框架来进行单元测试,所以对于我们的单元测试,我选择Googletest作为我们的框架 然而,对于集成测试,我们通常使用Python脚本(没有测试框架)进行测试。Python脚本通过网络连接到嵌入式系统,并通过发送命令和接收遥测来测试用例 使用pytest作为测试框架是否有利于我们

我正在努力建立我的团队新的单元测试和集成测试基础设施,并希望通过选择正确的测试框架来确保我的起步。我是一名嵌入式开发人员,在VxWorks操作系统上测试代码,使用C/C++生产代码库

我们需要一个能够直接测试C/C++的框架来进行单元测试,所以对于我们的单元测试,我选择Googletest作为我们的框架

然而,对于集成测试,我们通常使用Python脚本(没有测试框架)进行测试。Python脚本通过网络连接到嵌入式系统,并通过发送命令和接收遥测来测试用例

使用pytest作为测试框架是否有利于我们目前使用Python对嵌入式系统进行集成测试的方式?我看到的大多数示例都以更单元测试的方式使用pytest,在Python生产代码库中为单个函数创建断言

编辑: 根据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的自动测试用例发现,这样我就可以轻松地运行所有的测试函数,而不必创建自定义代码

  • 能够利用“assert”语法为每个测试自动生成pass/fail语句,而不必为每个测试用例手动实现pass/fail打印语句


  • 我也遇到过类似的情况,从我收集的信息来看,单元测试框架不适合在嵌入式系统上进行集成测试。这里提出了一个类似的问题:

    我们个人使用Google的OpenHTF来自动化集成测试(如您的案例)和生产验证测试,其中包括组装、校准和总体验证

    请查看:

    我们在Python中自动化高级测试设备,如RF开关和频谱分析仪,以便测试和校准在>500 MHz范围内工作的RF单元

    使用OpenHTF,您可以非常快速地创建带有测量的完整测试。它为您提供了内置的web GUI,并允许您编写自定义导出“回调”


    我们目前正在为硬件测试构建一个完整的测试解决方案。如果需要的话,我很乐意为OpenHTF提供帮助,因为我们的旗舰实现是基于OpenHTF的。

    pytest
    高度可定制,可以很好地用于集成测试。至于这个问题,它在国际海事组织范围太广,取决于你们的要求;也许重新制定?或者给出一个您当前正在编写的测试脚本的示例,并询问使用
    pytest
    等重写时它的外观。感谢您的回复@hoefling。请看编辑后的问题。很好,投了赞成票!添加我的2美分-IMO的主要功能是通过夹具重用资源设置/拆卸的代码,无循环的测试参数化,例如,对多个设备运行相同的测试是一个线性测试,并行化测试执行(包括多台机器上的分区测试)其余的是小而简洁的功能,如多功能测试选择执行(例如,仅运行上次运行失败的测试、仅运行“新”测试、打印找到的测试而不运行测试等)、受控执行(例如,在第一次失败或最大
    n
    失败后停止、跳过测试、将测试标记为“预期失败”这不会使测试套件失败)、可定制的报告等。此外,还有各种各样的插件。