用于在Python中测试嵌入式系统的测试框架

时间:2015-12-09 21:20:48

标签: python unit-testing testing

我想测试嵌入式设备的功能。为了简化,我可以说它是一个由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]

...

5 个答案:

答案 0 :(得分:3)

问这个问题已经很久了。

嵌入式系统提供了特殊的特性来实现验收测试自动化(其中最重要的一点是,#34;被测设备"与执行测试用例的设备不同;因此需要相同类型的交互界面)。这不是"兴奋地"在进行网页或PC应用程序的测试自动化时,甚至在运行嵌入式软件的单元测试时(也可以在设备外部执行)的情况。 基于这个假设,我认为为进行单元测试而开发的框架并不是开发Emedded System Test Bench进行验收测试的最佳工具。

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

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

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

  • Pycopia

还有其他工具不使用Python。例如this thread(MxVDev)

中描述的那些

答案 1 :(得分:2)

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

答案 2 :(得分:2)

我们在循环测试中将htf用于硬件。它提供了许多功能来自动化嵌入式系统的测试,漂亮的报告,仪表板,固定装置,数据驱动的测试,标记,Docker集成,并且它是专业开发的。

还有一个demo,其中包含一些视频,以使您快速获得概述。

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

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

htf可以免费使用。

答案 3 :(得分:0)

同样,很长时间以来一直有人问我,但是我认为我可以做出贡献。

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

这是您好世界的示例:

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:

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

OpenHTF带有自己的GUI,无疑可以为生产测试测试平台或设计验证/验证测试的开发提供巨大的开端。

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

答案 4 :(得分:0)

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

  1. 在第一次失败时应该退出测试。这可能吗?
  2. 测试应在失败后继续进行下一次测试。这可能吗? 有人在git-hub之类的共享网站上发布了openhtf的 example 用法。