代码之家  ›  专栏  ›  技术社区  ›  The Illusive Man

如何防止这个回路断开?

  •  0
  • The Illusive Man  · 技术社区  · 7 年前

    在我的一个测试函数中,我有以下代码:

    for key, expected_value in tools.config['expected_values']['devices']['specs'][device_spec].items():
        if expected_value > 0:
            try:
                value = data[device_spec][key]
                assert expected_value == value, pytest.fail('ERROR: Missing device using {}: {}.\nDetected: {}. Expected: {}\nEndpoint: {}'.format(device_spec, key, value, expected_value, endpoint), pytrace=False)
            except KeyError:
                pytest.fail('ERROR: There are no clients using {}: {}\nExpected: {}\nEndpoint: {}'.format(device_spec, key, expected_value, endpoint), pytrace=False)
                raise SystemExit(1)
    

    它可能会因为两个不同的原因而失败:

    1. 因为没有使用某些预期规格的预期设备数量(例如,检测到4个Linux,但预期为7个)。
    2. 因为根本没有使用特定规格的设备(例如,没有Windows设备)。

    问题是,在测试运行时,这两个条件都可能满足。例如,配置可能是:

    expected_values:
      devices:
        specs:
          operating_systems:
            LINUX: 1
            MACOS: 2
            WINDOWS: 0
            ANDROID: 1
            IOS: 1
    

    假设只有1台MacOS设备,而没有Android设备。输出应为:

    ERROR: Missing device using operating_system: MACOS.
    Detected: 1. Expected: 2
    Endpoint: example.com/api/operating_system
    
    ERROR: There are no clients using operating_system: Android. 
    Expected: 1. 
    Endpoint: example.com/api/operating_system
    

    实际上,如果我添加 print(key) ,我可以确认显示Linux,显示MacOS,然后代码停止。它没有读其他钥匙。

    但是,只显示第一个,我猜是 pytest.fail 正在破坏 for .那么,我怎样才能避免这种情况呢?

    2 回复  |  直到 7 年前
        1
  •  0
  •   Malik Faiq    7 年前
      except KeyError:
                pytest.fail('ERROR: There are no clients using {}: {}\nExpected: {}\nEndpoint: {}'.format(device_spec, key, expected_value, endpoint), pytrace=False)
                raise SystemExit(1)
    

    系统退出(1)是导致程序强制终止的循环中断的主要原因。只需从代码中删除它就可以了。

        2
  •  0
  •   The Illusive Man    7 年前

    pytest.fail 我怀疑。什么时候? 调用时,整个测试都失败,因此之后不会执行任何代码。

    pytest.失败 for 循环,就是这样 pytest.失败