[PATCH] test/py: support pytest 6

Heinrich Schuchardt xypron.glpk at gmx.de
Sun Jan 31 00:06:05 CET 2021


On 1/30/21 11:19 PM, Heinrich Schuchardt wrote:
> Am 30. Januar 2021 22:05:44 MEZ schrieb Stephen Warren <swarren at wwwdotorg.org>:
>> Two changes are needed to support pytest 6:
>>
>> 1) The main entry point no longer allows command-line arguments to be
>> supplied. Instead, we must modify sys.argv before calling the entry
>> point. pytest 5.1.2 (from the current requirements.txt) supports either
>> modifying sys.argv, or passing arguments, so is compatible with this
>> change.
>>
>> 2) The implementation of pytest_runtest_protocol() must call
>> pytest_runtest_logstart() and pytest_runtest_logfinish(). This appears
>> to
>> be necessary even in pytest 5.1.2 judging by the default version of
>> pytest_runtest_protocol(), but evidently some form of code
>> reorganization in pytest only made this have a practical effect in the
>> newer version. I'd previously been under the impression that 100% of
>> the
>> required work of pytest_runtest_protocol() was handled by the fact it
>> called runtestprotocol() as its implementation. However, it appears
>> that
>> custom implementations do need to do a little more than this.
>>
>> Reported-by: Heinrich Schuchardt <xypron.glpk at gmx.de> (point 2)
>> Signed-off-by: Stephen Warren <swarren at wwwdotorg.org>
>> ---
>> test/py/conftest.py | 5 ++++-
>> test/py/test.py     | 4 ++--
>> 2 files changed, 6 insertions(+), 3 deletions(-)
>>
>> diff --git a/test/py/conftest.py b/test/py/conftest.py
>> index dc92c0be32ee..7cacfcec26ef 100644
>> --- a/test/py/conftest.py
>> +++ b/test/py/conftest.py
>> @@ -554,7 +554,10 @@ def pytest_runtest_protocol(item, nextitem):
>>      """
>>
>>      log.get_and_reset_warning()
>> +    ihook = item.ihook
>> +    ihook.pytest_runtest_logstart(nodeid=item.nodeid,
>> location=item.location)
>>      reports = runtestprotocol(item, nextitem=nextitem)
>> +    ihook.pytest_runtest_logfinish(nodeid=item.nodeid,
>> location=item.location)
>>      was_warning = log.get_and_reset_warning()
>>
>> # In pytest 3, runtestprotocol() may not call pytest_runtest_setup() if
>> @@ -623,4 +626,4 @@ def pytest_runtest_protocol(item, nextitem):
>>      if failure_cleanup:
>>          console.cleanup_spawn()
>>
>> -    return reports
>> +    return True # reports
>> diff --git a/test/py/test.py b/test/py/test.py
>> index bee88d96bc26..d5bea127ab47 100755
>> --- a/test/py/test.py
>> +++ b/test/py/test.py
>> @@ -14,7 +14,7 @@ from pkg_resources import load_entry_point
>>
>> # argv; py.test test_directory_name user-supplied-arguments
>> args = [os.path.dirname(__file__) + '/tests']
>> -args.extend(sys.argv)
>> +sys.argv[1:1] = args
>>
>> if __name__ == '__main__':
>> -    sys.exit(load_entry_point('pytest', 'console_scripts',
>> 'pytest')(args))
>> +    sys.exit(load_entry_point('pytest', 'console_scripts',
>> 'pytest')())
>
> Your patch is not based on origin master. This line was already corrected. We should not use console_scripts. Cf.
>
> https://github.com/trini/u-boot/blob/master/test/py/test.py#L20
>

I tested with only the changes to test/py/conftest.py from your patch
applied and this fixes the problem on Pytest 6.

Thanks for you swift response.

Best regards

Heinrich


More information about the U-Boot mailing list