【问题标题】:Should pytest be used for integration testing an embedded system?pytest 是否应该用于集成测试嵌入式系统?
【发布时间】: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 的优势似乎是:

  1. 能够利用 pytest 的自动化测试用例发现功能,这样我就可以轻松地运行我的所有测试功能,而不必为此创建自定义代码。

  2. 能够使用“断言”语法,该语法将为每个测试自动生成通过/失败语句,而不必为每个测试用例手动实现通过/失败打印语句

【问题讨论】:

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

标签: python pytest


【解决方案1】:

我也遇到过类似的情况,根据我收集到的信息,单元测试框架不适合在嵌入式系统上进行集成测试。这里问了一个类似的问题: Test framework for testing embedded systems in Python

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

查看:https://github.com/google/openhtf

我们使用 Python 自动化高级测试设备,例如射频开关和频谱分析仪,以测试和校准我们的射频单元,这些单元在 >500 MHz 范围内工作。

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

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

【讨论】:

    猜你喜欢
    • 2014-01-17
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多