[U-Boot] [PATCH] test/py: Provide custom IDs when parametrizing tests

Simon Glass sjg at chromium.org
Wed Jan 27 00:08:54 CET 2016


Hi Stephen,

On 26 January 2016 at 15:26, Stephen Warren <swarren at wwwdotorg.org> wrote:
> From: Stephen Warren <swarren at nvidia.com>
>
> When pytest generates the name for parametrized tests, simple parameter
> values (ints, strings) get used directly, but more complex values such
> as dicts are not handled. This yields test names such as:
>
>     dfu[env__usb_dev_port0-env__dfu_config0]
>     dfu[env__usb_dev_port0-env__dfu_config1]
>
> Add some code to extract a custom fixture ID from the fixture values, so
> that we end up with meaningful names such as:
>
>     dfu[micro_b-emmc]
>     dfu[devport2-ram]
>
> If the boardenv file doesn't define custom names, the code falls back to
> the old algorithm.
>
> Signed-off-by: Stephen Warren <swarren at nvidia.com>
> ---
>  test/py/conftest.py       | 8 +++++++-
>  test/py/tests/test_dfu.py | 3 +++
>  test/py/tests/test_ums.py | 3 +++
>  3 files changed, 13 insertions(+), 1 deletion(-)

Reviewed-by: Simon Glass <sjg at chromium.org>

>
> diff --git a/test/py/conftest.py b/test/py/conftest.py
> index a4e54c66ceda..9c9426aebe10 100644
> --- a/test/py/conftest.py
> +++ b/test/py/conftest.py
> @@ -225,7 +225,13 @@ def pytest_generate_tests(metafunc):
>              # ... otherwise, see if there's a key that contains a list of
>              # values to use instead.

Is this function comment still accurate?

>              vals = subconfig.get(fn + 's', [])
> -        metafunc.parametrize(fn, vals)
> +        def fixture_id(index, val):
> +            try:
> +                return val["fixture_id"]
> +            except:
> +                return fn + str(index)
> +        ids = [fixture_id(index, val) for (index, val) in enumerate(vals)]
> +        metafunc.parametrize(fn, vals, ids=ids)
>
>  @pytest.fixture(scope='function')
>  def u_boot_console(request):
> diff --git a/test/py/tests/test_dfu.py b/test/py/tests/test_dfu.py
> index c09b90278dca..bb70008af300 100644
> --- a/test/py/tests/test_dfu.py
> +++ b/test/py/tests/test_dfu.py
> @@ -21,6 +21,7 @@ For example:
>
>  env__usb_dev_ports = (
>      {
> +        "fixture_id": "micro_b",
>          "tgt_usb_ctlr": "0",
>          "host_usb_dev_node": "/dev/usbdev-p2371-2180",
>          # This parameter is optional /if/ you only have a single board
> @@ -32,10 +33,12 @@ env__usb_dev_ports = (
>  env__dfu_configs = (
>      # eMMC, partition 1
>      {
> +        "fixture_id": "emmc",
>          "alt_info": "/dfu_test.bin ext4 0 1;/dfu_dummy.bin ext4 0 1",
>          "cmd_params": "mmc 0",
>      },
>  )
> +
>  b) udev rules to set permissions on devices nodes, so that sudo is not
>  required. For example:
>
> diff --git a/test/py/tests/test_ums.py b/test/py/tests/test_ums.py
> index 21d40a972581..8c3ee2b053c4 100644
> --- a/test/py/tests/test_ums.py
> +++ b/test/py/tests/test_ums.py
> @@ -29,6 +29,7 @@ env__mount_points = (
>
>  env__usb_dev_ports = (
>      {
> +        "fixture_id": "micro_b",
>          "tgt_usb_ctlr": "0",
>          "host_ums_dev_node": "/dev/disk/by-path/pci-0000:00:14.0-usb-0:13:1.0-scsi-0:0:0:0",
>      },
> @@ -37,6 +38,7 @@ env__usb_dev_ports = (
>  env__block_devs = (
>      # eMMC; always present
>      {
> +        "fixture_id": "emmc",
>          "type": "mmc",
>          "id": "0",
>          # The following two properties are optional.
> @@ -48,6 +50,7 @@ env__block_devs = (
>      },
>      # SD card; present since I plugged one in
>      {
> +        "fixture_id": "sd",
>          "type": "mmc",
>          "id": "1"
>      },
> --
> 2.7.0
>

Regards,
Simon


More information about the U-Boot mailing list