如何对连接到Rpi的组件进行单元测试?

时间:2018-03-14 03:24:27

标签: python-3.x raspberry-pi3

我完成了我的覆盆子pi项目,我发现它有效。我必须测试我的组件和代码。我已经通过pytest但我不确定它将如何帮助我在我的情况下。是否有任何自动化工具对我或其他测试python附带的模块有用?

1 个答案:

答案 0 :(得分:0)

我想您可以尝试使用pytest,但如果您要测试异步组件,可能需要添加循环延迟或任何其他类型的等待。

例如,如果您有一些使用引脚操作并且想要在按下按钮时验证高电压电平的类,您可以使用以下内容:

def test_reading_pin_value():
    # let's pretend you have some class to control pins
    with InOutController() as ctrl:
        ctrl.setup_pin('button', 26, mode=pi.IN, pull_down=True)
        while True:
            value = ctrl['button']
            if value == 1:
                break
            time.sleep(0.2)

请注意,您可以设置一些合理的时间限制而不是while True,并在某些情况下调用assert,如果达到超时则调用pytest.fail

import pytest
from time import time

def test_something_asynchronous():
    # your external components controller
    controller = Controller()
    start = time()
    wait, timeout = 10.0, False

    while not timeout:
        value = controller.wait_response()
        if value:
            assert value == 1, "Invalid response!"
            break
        elapsed = time() - start
        if elapsed >= wait:
            timeout = True

    assert not timeout, "Timeout!"

如果您的组件具有一些额外的随机性,您可以尝试"概率断言"像:

def probabilistic_assert(condition, trials=100):
    n, ok = 0, False
    while n < trials and not ok:
        ok = condition()
        n += 1
    assert ok, "Condition has been failed during %d trials" % trials

此外,如果您想知道引脚上的电压电平,您可以调用gpio命令并解析其输出。

无论如何,我想你可能需要&#34;手册&#34;干预测试以激活外部组件,或者如果组件被某些外部条件激活,则定期等待满足测试期望。