【问题标题】:Test framework for testing embedded systems in Python用 Python 测试嵌入式系统的测试框架
【发布时间】:2016-03-15 08:10:45
【问题描述】:

我想测试嵌入式设备的功能。为了简化,我可以说它是一个由 PC 通过 C/C++ API 远程控制的人形机器人。

我对使用nosetests 非常感兴趣,因为它采用了非样板方法。但是,我的情况有点复杂。实际测试在 C# 程序上运行,大约需要 24 小时才能完成。通过切换到 Python,我可能会节省大量开发新测试的时间。但是,在这样做之前,我正在寻找一些答案。

古老的测试套件的第一个问题是所有测试都按照预定义的顺序执行,如果出现任何错误,整个测试就会停止。我想构建不依赖于其他测试结果的独立测试套件。例如,与机器人手臂相关的测试与其中一条腿无关。但是,步行测试都需要成功。

在晚上执行所有测试套件。如果一个失败,则执行下一个,依此类推。这样做的好处是,在星期一早上你回来工作时,你可以获得比在星期五晚上你离开 10 分钟后整个测试都失败的情况更有用的结果。

所以我在寻找一个允许:

  • 在测试套件中拆分测试。
  • 尝试每个测试套件,无论前一个测试套件是否失败。
  • 提供有关某些测试的依赖关系的信息。

我查看了Proboscis,它允许依赖固定装置,但该项目看起来已经死了。

我想知道定制鼻子需要做多少工作才能获得这些功能。也许值得尝试另一个测试框架。我不知道,我需要一些线索...

所以,为了让事情尽可能简单,我是这样看待我的测试的:

#!/usr/bin/python

def testArms():
   ...
   pass

def testLegs():
   ...
   pass

@depend(testArms, testLegs)
def testWalk():
   ...
   pass

test_suite1 = [testLegs, testArms, testWalk]

...

【问题讨论】:

    标签: python unit-testing testing


    【解决方案1】:

    很久没有问这个问题了。

    嵌入式系统具有实现验收测试自动化的特殊特征(其中最重要的一点是,“被测设备”很可能与执行测试用例的设备不同;因此具有相同类型的交互界面是必须的)。在对网页或 PC 应用程序进行测试自动化时,甚至在运行嵌入式软件的单元测试(也可以在设备外部执行)时,情况并非“特别”。 基于这个假设,我认为为进行单元测试而开发的框架并不是开发用于执行验收测试的嵌入式系统测试台的最佳工具。

    目前,我们面临着类似的情况,试图选择一个开发环境来实现嵌入式设备的自动化测试。 我们正在调查:

    • Robot Framework,这是一个基于关键字驱动测试方法的通用验收测试自动化框架。

    • FitNesse (http://www.fitnesse.org)

    • Pycopia

    还有其他不使用 Python 的工具。例如this thread (MxVDev) 中描述的那些

    【讨论】:

      【解决方案2】:

      我认为Robot Framework 是适合您的工具。您可以将测试拆分为测试套件,如果一个测试失败,则将运行下一个测试。

      【讨论】:

        【解决方案3】:

        我们使用htf 进行硬件在环测试。它提供了许多功能来自动化嵌入式系统测试、漂亮的报告、仪表板、夹具、数据驱动测试、标记、Docker 集成,并且是专业开发的。

        还有一个demo 有一些视频可以快速浏览。

        它还支持具有交互模式的手动测试。

        二进制数据抽象可以用oser实现。

        htf 可以免费使用。

        【讨论】:

          【解决方案4】:

          再一次,很久没有有人问过这个问题,但我想我可以做出贡献。

          我们目前正在构建一个完整的测试解决方案,专门用于测试嵌入式设备以进行验证和确认。我们的旗舰实现基于 Google 的 OpenHTF:https://github.com/google/openhtf

          这是 hello world 示例:

          import openhtf as htf
          
          from openhtf.output.callbacks import json_factory
          
          from openhtf.plugs import user_input
          
          @htf.measures(htf.Measurement('hello_world_measurement'))
          def hello_world(test):
            """A hello world test phase."""
            test.logger.info('Hello World!')
            test.measurements.hello_world_measurement = 'Hello Again!'
          
          
          if __name__ == '__main__':
            test = htf.Test(hello_world)
            test.add_output_callbacks(
                json_factory.OutputToJSON('./{dut_id}.hello_world.json', indent=2))
          
            test.execute(test_start=user_input.prompt_for_test_start())
          

          您可以使用不同的模块扩展 OpenHTF:

          • “插头”,它们是与外部设备或被测设备的接口。 IE。一个 COM 端口插头。
          • “回调”,即自定义导出接口。

          OpenHTF 带有自己的 GUI,绝对可以为开发生产测试测试平台或设计验证/验证测试提供巨大的先机,就像这个问题一样。

          我很乐意帮助任何需要指导的人。

          【讨论】:

            【解决方案5】:

            我也开始关注 openhtf。我有两种情况:

            1. 测试应在第一次失败时退出。这可能吗?
            2. 测试应在失败时继续下一次测试。这可能吗? 是否有人在 git-hub 等共享网站上发布了 openhtf 的具体用法示例

            【讨论】:

            • 这是问题的答案吗?还是您在问问题?
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-06-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多