Diff of the two buildlogs: -- --- b1/build.log 2024-01-22 23:37:48.733132251 +0000 +++ b2/build.log 2024-01-22 23:38:28.851554665 +0000 @@ -1,6 +1,6 @@ I: pbuilder: network access will be disabled during build -I: Current time: Mon Jan 22 11:36:57 -12 2024 -I: pbuilder-time-stamp: 1705966617 +I: Current time: Mon Feb 24 20:00:49 +14 2025 +I: pbuilder-time-stamp: 1740376849 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/bookworm-reproducible-base.tgz] I: copying local configuration @@ -26,51 +26,83 @@ dpkg-source: info: unpacking pytest-repeat_0.9.1-3.debian.tar.xz I: Not using root during the build. I: Installing the build-deps -I: user script /srv/workspace/pbuilder/19427/tmp/hooks/D02_print_environment starting +I: user script /srv/workspace/pbuilder/4934/tmp/hooks/D01_modify_environment starting +debug: Running on ionos16-i386. +I: Changing host+domainname to test build reproducibility +I: Adding a custom variable just for the fun of it... +I: Changing /bin/sh to bash +'/bin/sh' -> '/bin/bash' +lrwxrwxrwx 1 root root 9 Feb 24 06:01 /bin/sh -> /bin/bash +I: Setting pbuilder2's login shell to /bin/bash +I: Setting pbuilder2's GECOS to second user,second room,second work-phone,second home-phone,second other +I: user script /srv/workspace/pbuilder/4934/tmp/hooks/D01_modify_environment finished +I: user script /srv/workspace/pbuilder/4934/tmp/hooks/D02_print_environment starting I: set - BUILDDIR='/build/reproducible-path' - BUILDUSERGECOS='first user,first room,first work-phone,first home-phone,first other' - BUILDUSERNAME='pbuilder1' - BUILD_ARCH='i386' - DEBIAN_FRONTEND='noninteractive' - DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=8 ' - DISTRIBUTION='bookworm' - HOME='/root' - HOST_ARCH='i386' + BASH=/bin/sh + BASHOPTS=checkwinsize:cmdhist:complete_fullquote:extquote:force_fignore:globasciiranges:globskipdots:hostcomplete:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath + BASH_ALIASES=() + BASH_ARGC=() + BASH_ARGV=() + BASH_CMDS=() + BASH_LINENO=([0]="12" [1]="0") + BASH_LOADABLES_PATH=/usr/local/lib/bash:/usr/lib/bash:/opt/local/lib/bash:/usr/pkg/lib/bash:/opt/pkg/lib/bash:. + BASH_SOURCE=([0]="/tmp/hooks/D02_print_environment" [1]="/tmp/hooks/D02_print_environment") + BASH_VERSINFO=([0]="5" [1]="2" [2]="15" [3]="1" [4]="release" [5]="i686-pc-linux-gnu") + BASH_VERSION='5.2.15(1)-release' + BUILDDIR=/build/reproducible-path + BUILDUSERGECOS='second user,second room,second work-phone,second home-phone,second other' + BUILDUSERNAME=pbuilder2 + BUILD_ARCH=i386 + DEBIAN_FRONTEND=noninteractive + DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=15 ' + DIRSTACK=() + DISTRIBUTION=bookworm + EUID=0 + FUNCNAME=([0]="Echo" [1]="main") + GROUPS=() + HOME=/root + HOSTNAME=i-capture-the-hostname + HOSTTYPE=i686 + HOST_ARCH=i386 IFS=' ' - INVOCATION_ID='a7cdc75cfdd94a8caa5368d6ca7ec64c' - LANG='C' - LANGUAGE='en_US:en' - LC_ALL='C' - LD_LIBRARY_PATH='/usr/lib/libeatmydata' - LD_PRELOAD='libeatmydata.so' - MAIL='/var/mail/root' - OPTIND='1' - PATH='/usr/sbin:/usr/bin:/sbin:/bin:/usr/games' - PBCURRENTCOMMANDLINEOPERATION='build' - PBUILDER_OPERATION='build' - PBUILDER_PKGDATADIR='/usr/share/pbuilder' - PBUILDER_PKGLIBDIR='/usr/lib/pbuilder' - PBUILDER_SYSCONFDIR='/etc' - PPID='19427' - PS1='# ' - PS2='> ' + INVOCATION_ID=b09a2bcde0b7421f9078907fe66c73cb + LANG=C + LANGUAGE=de_CH:de + LC_ALL=C + LD_LIBRARY_PATH=/usr/lib/libeatmydata + LD_PRELOAD=libeatmydata.so + MACHTYPE=i686-pc-linux-gnu + MAIL=/var/mail/root + OPTERR=1 + OPTIND=1 + OSTYPE=linux-gnu + PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path + PBCURRENTCOMMANDLINEOPERATION=build + PBUILDER_OPERATION=build + PBUILDER_PKGDATADIR=/usr/share/pbuilder + PBUILDER_PKGLIBDIR=/usr/lib/pbuilder + PBUILDER_SYSCONFDIR=/etc + PIPESTATUS=([0]="0") + POSIXLY_CORRECT=y + PPID=4934 PS4='+ ' - PWD='/' - SHELL='/bin/bash' - SHLVL='2' - SUDO_COMMAND='/usr/bin/timeout -k 18.1h 18h /usr/bin/ionice -c 3 /usr/bin/nice /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.Ea8jUfDc/pbuilderrc_DWuT --distribution bookworm --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/bookworm-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.Ea8jUfDc/b1 --logfile b1/build.log pytest-repeat_0.9.1-3.dsc' - SUDO_GID='112' - SUDO_UID='107' - SUDO_USER='jenkins' - TERM='unknown' - TZ='/usr/share/zoneinfo/Etc/GMT+12' - USER='root' - _='/usr/bin/systemd-run' - http_proxy='http://78.137.99.97:3128' + PWD=/ + SHELL=/bin/bash + SHELLOPTS=braceexpand:errexit:hashall:interactive-comments:posix + SHLVL=3 + SUDO_COMMAND='/usr/bin/timeout -k 24.1h 24h /usr/bin/ionice -c 3 /usr/bin/nice -n 11 /usr/bin/unshare --uts -- /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.Ea8jUfDc/pbuilderrc_1R7G --distribution bookworm --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/bookworm-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.Ea8jUfDc/b2 --logfile b2/build.log pytest-repeat_0.9.1-3.dsc' + SUDO_GID=112 + SUDO_UID=107 + SUDO_USER=jenkins + TERM=unknown + TZ=/usr/share/zoneinfo/Etc/GMT-14 + UID=0 + USER=root + _='I: set' + http_proxy=http://85.184.249.68:3128 I: uname -a - Linux ionos12-i386 6.1.0-17-686-pae #1 SMP PREEMPT_DYNAMIC Debian 6.1.69-1 (2023-12-30) i686 GNU/Linux + Linux i-capture-the-hostname 6.1.0-17-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.69-1 (2023-12-30) x86_64 GNU/Linux I: ls -l /bin total 6036 -rwxr-xr-x 1 root root 1408088 Apr 23 2023 bash @@ -128,15 +160,15 @@ -rwxr-xr-x 1 root root 51080 Sep 20 2022 readlink -rwxr-xr-x 1 root root 75720 Sep 20 2022 rm -rwxr-xr-x 1 root root 51080 Sep 20 2022 rmdir - -rwxr-xr-x 1 root root 22308 Jul 28 23:46 run-parts + -rwxr-xr-x 1 root root 22308 Jul 28 2023 run-parts -rwxr-xr-x 1 root root 133224 Jan 5 2023 sed - lrwxrwxrwx 1 root root 4 Jan 5 2023 sh -> dash + lrwxrwxrwx 1 root root 9 Feb 24 06:01 sh -> /bin/bash -rwxr-xr-x 1 root root 38760 Sep 20 2022 sleep -rwxr-xr-x 1 root root 87976 Sep 20 2022 stty -rwsr-xr-x 1 root root 83492 Mar 23 2023 su -rwxr-xr-x 1 root root 38792 Sep 20 2022 sync -rwxr-xr-x 1 root root 598456 Apr 6 2023 tar - -rwxr-xr-x 1 root root 13860 Jul 28 23:46 tempfile + -rwxr-xr-x 1 root root 13860 Jul 28 2023 tempfile -rwxr-xr-x 1 root root 120776 Sep 20 2022 touch -rwxr-xr-x 1 root root 34664 Sep 20 2022 true -rwxr-xr-x 1 root root 17892 Mar 23 2023 ulockmgr_server @@ -156,7 +188,7 @@ -rwxr-xr-x 1 root root 2206 Apr 10 2022 zless -rwxr-xr-x 1 root root 1842 Apr 10 2022 zmore -rwxr-xr-x 1 root root 4577 Apr 10 2022 znew -I: user script /srv/workspace/pbuilder/19427/tmp/hooks/D02_print_environment finished +I: user script /srv/workspace/pbuilder/4934/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy @@ -258,7 +290,7 @@ Get: 54 http://deb.debian.org/debian bookworm/main i386 python3-setuptools all 66.1.1-1 [521 kB] Get: 55 http://deb.debian.org/debian bookworm/main i386 python3-typing-extensions all 4.4.0-1 [45.2 kB] Get: 56 http://deb.debian.org/debian bookworm/main i386 python3-setuptools-scm all 7.1.0-3 [42.6 kB] -Fetched 26.5 MB in 12s (2150 kB/s) +Fetched 26.5 MB in 1s (28.1 MB/s) debconf: delaying package configuration, since apt-utils is not installed Selecting previously unselected package libpython3.11-minimal:i386. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 18156 files and directories currently installed.) @@ -499,7 +531,11 @@ Building tag database... -> Finished parsing the build-deps I: Building the package -I: Running cd /build/reproducible-path/pytest-repeat-0.9.1/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-genchanges -S > ../pytest-repeat_0.9.1-3_source.changes +I: user script /srv/workspace/pbuilder/4934/tmp/hooks/A99_set_merged_usr starting +Not re-configuring usrmerge for bookworm +I: user script /srv/workspace/pbuilder/4934/tmp/hooks/A99_set_merged_usr finished +hostname: Name or service not known +I: Running cd /build/reproducible-path/pytest-repeat-0.9.1/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-genchanges -S > ../pytest-repeat_0.9.1-3_source.changes dpkg-buildpackage: info: source package pytest-repeat dpkg-buildpackage: info: source version 0.9.1-3 dpkg-buildpackage: info: source distribution unstable @@ -534,76 +570,847 @@ ============================= test session starts ============================== platform linux -- Python 3.11.2, pytest-7.2.1, pluggy-1.0.0+repack rootdir: /build/reproducible-path/pytest-repeat-0.9.1 -plugins: None-None collected 16 items -test_repeat.py ................ [100%] +test_repeat.py FFFFFFFF.FFFFFF. [100%] -============================== 16 passed in 1.13s ============================== - create-stamp debian/debhelper-build-stamp - dh_testroot -O--buildsystem=pybuild - dh_prep -O--buildsystem=pybuild - dh_auto_install --destdir=debian/python3-pytest-repeat/ -O--buildsystem=pybuild -I: pybuild base:240: /usr/bin/python3 setup.py install --root /build/reproducible-path/pytest-repeat-0.9.1/debian/python3-pytest-repeat -running install -/usr/lib/python3/dist-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools. - warnings.warn( -running build -running build_py -running install_lib -creating /build/reproducible-path/pytest-repeat-0.9.1/debian/python3-pytest-repeat/usr -creating /build/reproducible-path/pytest-repeat-0.9.1/debian/python3-pytest-repeat/usr/lib -creating /build/reproducible-path/pytest-repeat-0.9.1/debian/python3-pytest-repeat/usr/lib/python3.11 -creating /build/reproducible-path/pytest-repeat-0.9.1/debian/python3-pytest-repeat/usr/lib/python3.11/dist-packages -copying /build/reproducible-path/pytest-repeat-0.9.1/.pybuild/cpython3_3.11/build/pytest_repeat.py -> /build/reproducible-path/pytest-repeat-0.9.1/debian/python3-pytest-repeat/usr/lib/python3.11/dist-packages -creating /build/reproducible-path/pytest-repeat-0.9.1/debian/python3-pytest-repeat/usr/lib/python3.11/dist-packages/__pycache__ -copying /build/reproducible-path/pytest-repeat-0.9.1/.pybuild/cpython3_3.11/build/__pycache__/pytest_repeat.cpython-311.pyc -> /build/reproducible-path/pytest-repeat-0.9.1/debian/python3-pytest-repeat/usr/lib/python3.11/dist-packages/__pycache__ -copying /build/reproducible-path/pytest-repeat-0.9.1/.pybuild/cpython3_3.11/build/__pycache__/test_repeat.cpython-311-pytest-7.2.1.pyc -> /build/reproducible-path/pytest-repeat-0.9.1/debian/python3-pytest-repeat/usr/lib/python3.11/dist-packages/__pycache__ -byte-compiling /build/reproducible-path/pytest-repeat-0.9.1/debian/python3-pytest-repeat/usr/lib/python3.11/dist-packages/pytest_repeat.py to pytest_repeat.cpython-311.pyc -running install_egg_info -running egg_info -creating pytest_repeat.egg-info -writing pytest_repeat.egg-info/PKG-INFO -writing dependency_links to pytest_repeat.egg-info/dependency_links.txt -writing entry points to pytest_repeat.egg-info/entry_points.txt -writing requirements to pytest_repeat.egg-info/requires.txt -writing top-level names to pytest_repeat.egg-info/top_level.txt -writing manifest file 'pytest_repeat.egg-info/SOURCES.txt' -reading manifest file 'pytest_repeat.egg-info/SOURCES.txt' -reading manifest template 'MANIFEST.in' -adding license file 'LICENSE' -writing manifest file 'pytest_repeat.egg-info/SOURCES.txt' -Copying pytest_repeat.egg-info to /build/reproducible-path/pytest-repeat-0.9.1/debian/python3-pytest-repeat/usr/lib/python3.11/dist-packages/pytest_repeat-0.9.1.egg-info -Skipping SOURCES.txt -running install_scripts - dh_installdocs -O--buildsystem=pybuild - dh_installchangelogs -O--buildsystem=pybuild - dh_python3 -O--buildsystem=pybuild - dh_installsystemduser -O--buildsystem=pybuild - dh_perl -O--buildsystem=pybuild - dh_link -O--buildsystem=pybuild - dh_strip_nondeterminism -O--buildsystem=pybuild - dh_compress -O--buildsystem=pybuild - dh_fixperms -O--buildsystem=pybuild - dh_missing -O--buildsystem=pybuild - dh_installdeb -O--buildsystem=pybuild - dh_gencontrol -O--buildsystem=pybuild - dh_md5sums -O--buildsystem=pybuild - dh_builddeb -O--buildsystem=pybuild -dpkg-deb: building package 'python3-pytest-repeat' in '../python3-pytest-repeat_0.9.1-3_all.deb'. - dpkg-genbuildinfo --build=binary -O../pytest-repeat_0.9.1-3_i386.buildinfo - dpkg-genchanges --build=binary -O../pytest-repeat_0.9.1-3_i386.changes -dpkg-genchanges: info: binary-only upload (no source code included) - dpkg-source --after-build . -dpkg-buildpackage: info: binary-only upload (no source included) -dpkg-genchanges: info: not including original source code in upload +=================================== FAILURES =================================== +__________________________ TestRepeat.test_no_repeat ___________________________ + +self = +testdir = + + def test_no_repeat(self, testdir): + testdir.makepyfile(""" + def test_no_repeat(request): + fixtures = request.fixturenames + assert "__pytest_repeat_step_number" not in fixtures + """) + result = testdir.runpytest('-v', '--count', '1') +> result.stdout.fnmatch_lines([ + '*test_no_repeat.py::test_no_repeat PASSED*', + '*1 passed*', + ]) +E Failed: remains unmatched: '*test_no_repeat.py::test_no_repeat PASSED*' + +/build/reproducible-path/pytest-repeat-0.9.1/.pybuild/cpython3_3.11/build/test_repeat.py:19: Failed +----------------------------- Captured stderr call ----------------------------- +ERROR: usage: __main__.py [options] [file_or_dir] [file_or_dir] [...] +__main__.py: error: unrecognized arguments: --count + inifile: None + rootdir: /tmp/pytest-of-pbuilder2/pytest-0/test_no_repeat0 + +__________________________ TestRepeat.test_can_repeat __________________________ + +self = +testdir = + + def test_can_repeat(self, testdir): + testdir.makepyfile(""" + def test_repeat(): + pass + """) + result = testdir.runpytest('--count', '2') +> result.stdout.fnmatch_lines(['*2 passed*']) +E Failed: remains unmatched: '*2 passed*' + +/build/reproducible-path/pytest-repeat-0.9.1/.pybuild/cpython3_3.11/build/test_repeat.py:31: Failed +----------------------------- Captured stderr call ----------------------------- +ERROR: usage: __main__.py [options] [file_or_dir] [file_or_dir] [...] +__main__.py: error: unrecognized arguments: --count + inifile: None + rootdir: /tmp/pytest-of-pbuilder2/pytest-0/test_can_repeat0 + +_____________ TestRepeat.test_mark_repeat_decorator_is_registered ______________ + +self = +testdir = + + def test_mark_repeat_decorator_is_registered(self, testdir): + result = testdir.runpytest('--markers') +> result.stdout.fnmatch_lines([ + '@pytest.mark.repeat(n): run the given test function `n` times.']) +E Failed: nomatch: '@pytest.mark.repeat(n): run the given test function `n` times.' +E and: '@pytest.mark.filterwarnings(warning): add a warning filter to the given test. see https://docs.pytest.org/en/stable/how-to/capture-warnings.html#pytest-mark-filterwarnings ' +E and: '' +E and: '@pytest.mark.skip(reason=None): skip the given test function with an optional reason. Example: skip(reason="no way of currently testing this") skips the test.' +E and: '' +E and: "@pytest.mark.skipif(condition, ..., *, reason=...): skip the given test function if any of the conditions evaluate to True. Example: skipif(sys.platform == 'win32') skips the test if we are on the win32 platform. See https://docs.pytest.org/en/stable/reference/reference.html#pytest-mark-skipif" +E and: '' +E and: "@pytest.mark.xfail(condition, ..., *, reason=..., run=True, raises=None, strict=xfail_strict): mark the test function as an expected failure if any of the conditions evaluate to True. Optionally specify a reason for better reporting and run=False if you don't even want to execute the test function. If only specific exception(s) are expected, you can list them in raises, and if the test fails in other ways, it will be reported as a true failure. See https://docs.pytest.org/en/stable/reference/reference.html#pytest-mark-xfail" +E and: '' +E and: "@pytest.mark.parametrize(argnames, argvalues): call a test function multiple times passing in different arguments in turn. argvalues generally needs to be a list of values if argnames specifies only one name or a list of tuples of values if argnames specifies multiple names. Example: @parametrize('arg1', [1,2]) would lead to two calls of the decorated test function, one with arg1=1 and another with arg1=2.see https://docs.pytest.org/en/stable/how-to/parametrize.html for more info and examples." +E and: '' +E and: '@pytest.mark.usefixtures(fixturename1, fixturename2, ...): mark tests as needing all of the specified fixtures. see https://docs.pytest.org/en/stable/explanation/fixtures.html#usefixtures ' +E and: '' +E and: '@pytest.mark.tryfirst: mark a hook implementation function such that the plugin machinery will try to call it first/as early as possible. DEPRECATED, use @pytest.hookimpl(tryfirst=True) instead.' +E and: '' +E and: '@pytest.mark.trylast: mark a hook implementation function such that the plugin machinery will try to call it last/as late as possible. DEPRECATED, use @pytest.hookimpl(trylast=True) instead.' +E and: '' +E remains unmatched: '@pytest.mark.repeat(n): run the given test function `n` times.' + +/build/reproducible-path/pytest-repeat-0.9.1/.pybuild/cpython3_3.11/build/test_repeat.py:36: Failed +----------------------------- Captured stdout call ----------------------------- +@pytest.mark.filterwarnings(warning): add a warning filter to the given test. see https://docs.pytest.org/en/stable/how-to/capture-warnings.html#pytest-mark-filterwarnings + +@pytest.mark.skip(reason=None): skip the given test function with an optional reason. Example: skip(reason="no way of currently testing this") skips the test. + +@pytest.mark.skipif(condition, ..., *, reason=...): skip the given test function if any of the conditions evaluate to True. Example: skipif(sys.platform == 'win32') skips the test if we are on the win32 platform. See https://docs.pytest.org/en/stable/reference/reference.html#pytest-mark-skipif + +@pytest.mark.xfail(condition, ..., *, reason=..., run=True, raises=None, strict=xfail_strict): mark the test function as an expected failure if any of the conditions evaluate to True. Optionally specify a reason for better reporting and run=False if you don't even want to execute the test function. If only specific exception(s) are expected, you can list them in raises, and if the test fails in other ways, it will be reported as a true failure. See https://docs.pytest.org/en/stable/reference/reference.html#pytest-mark-xfail + +@pytest.mark.parametrize(argnames, argvalues): call a test function multiple times passing in different arguments in turn. argvalues generally needs to be a list of values if argnames specifies only one name or a list of tuples of values if argnames specifies multiple names. Example: @parametrize('arg1', [1,2]) would lead to two calls of the decorated test function, one with arg1=1 and another with arg1=2.see https://docs.pytest.org/en/stable/how-to/parametrize.html for more info and examples. + +@pytest.mark.usefixtures(fixturename1, fixturename2, ...): mark tests as needing all of the specified fixtures. see https://docs.pytest.org/en/stable/explanation/fixtures.html#usefixtures + +@pytest.mark.tryfirst: mark a hook implementation function such that the plugin machinery will try to call it first/as early as possible. DEPRECATED, use @pytest.hookimpl(tryfirst=True) instead. + +@pytest.mark.trylast: mark a hook implementation function such that the plugin machinery will try to call it last/as late as possible. DEPRECATED, use @pytest.hookimpl(trylast=True) instead. + +____________________ TestRepeat.test_mark_repeat_decorator _____________________ + +self = +testdir = + + def test_mark_repeat_decorator(self, testdir): + testdir.makepyfile(""" + import pytest + @pytest.mark.repeat(3) + def test_mark_repeat_decorator(): + pass + """) + result = testdir.runpytest() +> result.stdout.fnmatch_lines(['*3 passed*']) +E Failed: nomatch: '*3 passed*' +E and: '============================= test session starts ==============================' +E and: 'platform linux -- Python 3.11.2, pytest-7.2.1, pluggy-1.0.0+repack' +E and: 'rootdir: /tmp/pytest-of-pbuilder2/pytest-0/test_mark_repeat_decorator0' +E and: 'collected 1 item' +E and: '' +E and: 'test_mark_repeat_decorator.py . [100%]' +E and: '' +E and: '=============================== warnings summary ===============================' +E and: 'test_mark_repeat_decorator.py:2' +E and: ' /tmp/pytest-of-pbuilder2/pytest-0/test_mark_repeat_decorator0/test_mark_repeat_decorator.py:2: PytestUnknownMarkWarning: Unknown pytest.mark.repeat - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html' +E and: ' @pytest.mark.repeat(3)' +E and: '' +E and: '-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html' +E and: '========================= 1 passed, 1 warning in 0.01s =========================' +E remains unmatched: '*3 passed*' + +/build/reproducible-path/pytest-repeat-0.9.1/.pybuild/cpython3_3.11/build/test_repeat.py:48: Failed +----------------------------- Captured stdout call ----------------------------- +============================= test session starts ============================== +platform linux -- Python 3.11.2, pytest-7.2.1, pluggy-1.0.0+repack +rootdir: /tmp/pytest-of-pbuilder2/pytest-0/test_mark_repeat_decorator0 +collected 1 item + +test_mark_repeat_decorator.py . [100%] + +=============================== warnings summary =============================== +test_mark_repeat_decorator.py:2 + /tmp/pytest-of-pbuilder2/pytest-0/test_mark_repeat_decorator0/test_mark_repeat_decorator.py:2: PytestUnknownMarkWarning: Unknown pytest.mark.repeat - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/how-to/mark.html + @pytest.mark.repeat(3) + +-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html +========================= 1 passed, 1 warning in 0.01s ========================= +______________ TestRepeat.test_mark_repeat_decorator_repeat_once _______________ + +self = +testdir = + + def test_mark_repeat_decorator_repeat_once(self, testdir): + testdir.makepyfile(""" + import pytest + @pytest.mark.repeat(1) + def test_mark_repeat_decorator_repeat_once(): + pass + """) + result = testdir.runpytest('--count', '10') +> result.stdout.fnmatch_lines(['*1 passed*']) +E Failed: remains unmatched: '*1 passed*' + +/build/reproducible-path/pytest-repeat-0.9.1/.pybuild/cpython3_3.11/build/test_repeat.py:59: Failed +----------------------------- Captured stderr call ----------------------------- +ERROR: usage: __main__.py [options] [file_or_dir] [file_or_dir] [...] +__main__.py: error: unrecognized arguments: --count + inifile: None + rootdir: /tmp/pytest-of-pbuilder2/pytest-0/test_mark_repeat_decorator_repeat_once0 + +_________________________ TestRepeat.test_parametrize __________________________ + +self = +testdir = + + def test_parametrize(self, testdir): + testdir.makepyfile(""" + import pytest + @pytest.mark.parametrize('x', ['a', 'b', 'c']) + def test_repeat(x): + pass + """) + result = testdir.runpytest('-v', '--count', '2') +> result.stdout.fnmatch_lines([ + '*test_parametrize.py::test_repeat[[]a-1-2[]] PASSED*', + '*test_parametrize.py::test_repeat[[]a-2-2[]] PASSED*', + '*test_parametrize.py::test_repeat[[]b-1-2[]] PASSED*', + '*test_parametrize.py::test_repeat[[]b-2-2[]] PASSED*', + '*test_parametrize.py::test_repeat[[]c-1-2[]] PASSED*', + '*test_parametrize.py::test_repeat[[]c-2-2[]] PASSED*', + '*6 passed*', + ]) +E Failed: remains unmatched: '*test_parametrize.py::test_repeat[[]a-1-2[]] PASSED*' + +/build/reproducible-path/pytest-repeat-0.9.1/.pybuild/cpython3_3.11/build/test_repeat.py:70: Failed +----------------------------- Captured stderr call ----------------------------- +ERROR: usage: __main__.py [options] [file_or_dir] [file_or_dir] [...] +__main__.py: error: unrecognized arguments: --count + inifile: None + rootdir: /tmp/pytest-of-pbuilder2/pytest-0/test_parametrize0 + +_____________________ TestRepeat.test_parametrized_fixture _____________________ + +self = +testdir = + + def test_parametrized_fixture(self, testdir): + testdir.makepyfile(""" + import pytest + @pytest.fixture(params=['a', 'b', 'c']) + def parametrized_fixture(request): + return request.param + + def test_repeat(parametrized_fixture): + pass + """) + result = testdir.runpytest('--count', '2') +> result.stdout.fnmatch_lines(['*6 passed*']) +E Failed: remains unmatched: '*6 passed*' + +/build/reproducible-path/pytest-repeat-0.9.1/.pybuild/cpython3_3.11/build/test_repeat.py:92: Failed +----------------------------- Captured stderr call ----------------------------- +ERROR: usage: __main__.py [options] [file_or_dir] [file_or_dir] [...] +__main__.py: error: unrecognized arguments: --count + inifile: None + rootdir: /tmp/pytest-of-pbuilder2/pytest-0/test_parametrized_fixture0 + +_________________________ TestRepeat.test_step_number __________________________ + +self = +testdir = + + def test_step_number(self, testdir): + testdir.makepyfile(""" + import pytest + expected_steps = iter(range(5)) + def test_repeat(__pytest_repeat_step_number): + assert next(expected_steps) == __pytest_repeat_step_number + if __pytest_repeat_step_number == 4: + assert not list(expected_steps) + """) + result = testdir.runpytest('-v', '--count', '5') +> result.stdout.fnmatch_lines([ + '*test_step_number.py::test_repeat[[]1-5[]] PASSED*', + '*test_step_number.py::test_repeat[[]2-5[]] PASSED*', + '*test_step_number.py::test_repeat[[]3-5[]] PASSED*', + '*test_step_number.py::test_repeat[[]4-5[]] PASSED*', + '*test_step_number.py::test_repeat[[]5-5[]] PASSED*', + '*5 passed*', + ]) +E Failed: remains unmatched: '*test_step_number.py::test_repeat[[]1-5[]] PASSED*' + +/build/reproducible-path/pytest-repeat-0.9.1/.pybuild/cpython3_3.11/build/test_repeat.py:105: Failed +----------------------------- Captured stderr call ----------------------------- +ERROR: usage: __main__.py [options] [file_or_dir] [file_or_dir] [...] +__main__.py: error: unrecognized arguments: --count + inifile: None + rootdir: /tmp/pytest-of-pbuilder2/pytest-0/test_step_number0 + +________________________ TestRepeat.test_unittest_test _________________________ + +self = +testdir = + + def test_unittest_test(self, testdir): + testdir.makepyfile(""" + from unittest import TestCase + + class ClassStyleTest(TestCase): + def test_this(self): + assert 1 + """) + result = testdir.runpytest('-v', '--count', '2') +> result.stdout.fnmatch_lines([ + '*test_unittest_test.py::ClassStyleTest::test_this PASSED*', + '*1 passed*', + ]) +E Failed: remains unmatched: '*test_unittest_test.py::ClassStyleTest::test_this PASSED*' + +/build/reproducible-path/pytest-repeat-0.9.1/.pybuild/cpython3_3.11/build/test_repeat.py:132: Failed +----------------------------- Captured stderr call ----------------------------- +ERROR: usage: __main__.py [options] [file_or_dir] [file_or_dir] [...] +__main__.py: error: unrecognized arguments: --count + inifile: None + rootdir: /tmp/pytest-of-pbuilder2/pytest-0/test_unittest_test0 + +____________________ TestRepeat.test_scope[session-lines0] _____________________ + +self = +testdir = +scope = 'session' +lines = ['*test_1.py::test_repeat1[[]1-2[]] PASSED*', '*test_1.py::test_repeat2[[]1-2[]] PASSED*', '*test_2.py::test_repeat3[[...*test_3.py::TestRepeat1::test_repeat5[[]1-2[]] PASSED*', '*test_3.py::TestRepeat1::test_repeat6[[]1-2[]] PASSED*', ...] + + @pytest.mark.parametrize(['scope', 'lines'], [ + ('session', [ + '*test_1.py::test_repeat1[[]1-2[]] PASSED*', + '*test_1.py::test_repeat2[[]1-2[]] PASSED*', + '*test_2.py::test_repeat3[[]1-2[]] PASSED*', + '*test_2.py::test_repeat4[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]1-2[]] PASSED*', + '*test_1.py::test_repeat1[[]2-2[]] PASSED*', + '*test_1.py::test_repeat2[[]2-2[]] PASSED*', + '*test_2.py::test_repeat3[[]2-2[]] PASSED*', + '*test_2.py::test_repeat4[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]2-2[]] PASSED*', + '*16 passed*', + ]), + ('module', [ + '*test_1.py::test_repeat1[[]1-2[]] PASSED*', + '*test_1.py::test_repeat2[[]1-2[]] PASSED*', + '*test_1.py::test_repeat1[[]2-2[]] PASSED*', + '*test_1.py::test_repeat2[[]2-2[]] PASSED*', + '*test_2.py::test_repeat3[[]1-2[]] PASSED*', + '*test_2.py::test_repeat4[[]1-2[]] PASSED*', + '*test_2.py::test_repeat3[[]2-2[]] PASSED*', + '*test_2.py::test_repeat4[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]2-2[]] PASSED*', + '*16 passed*', + ]), + ('class', [ + '*test_1.py::test_repeat1[[]1-2[]] PASSED*', + '*test_1.py::test_repeat2[[]1-2[]] PASSED*', + '*test_1.py::test_repeat1[[]2-2[]] PASSED*', + '*test_1.py::test_repeat2[[]2-2[]] PASSED*', + '*test_2.py::test_repeat3[[]1-2[]] PASSED*', + '*test_2.py::test_repeat4[[]1-2[]] PASSED*', + '*test_2.py::test_repeat3[[]2-2[]] PASSED*', + '*test_2.py::test_repeat4[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]2-2[]] PASSED*', + '*16 passed*', + ]), + ('function', [ + '*test_1.py::test_repeat1[[]1-2[]] PASSED*', + '*test_1.py::test_repeat1[[]2-2[]] PASSED*', + '*test_1.py::test_repeat2[[]1-2[]] PASSED*', + '*test_1.py::test_repeat2[[]2-2[]] PASSED*', + '*test_2.py::test_repeat3[[]1-2[]] PASSED*', + '*test_2.py::test_repeat3[[]2-2[]] PASSED*', + '*test_2.py::test_repeat4[[]1-2[]] PASSED*', + '*test_2.py::test_repeat4[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]2-2[]] PASSED*', + '*16 passed*', + ]), + ]) + def test_scope(self, testdir, scope, lines): + testdir.makepyfile(test_1=""" + def test_repeat1(): + pass + + def test_repeat2(): + pass + """) + testdir.makepyfile(test_2=""" + def test_repeat3(): + pass + + def test_repeat4(): + pass + """) + testdir.makepyfile(test_3=""" + class TestRepeat1(object): + def test_repeat5(self): + pass + def test_repeat6(self): + pass + class TestRepeat2(object): + def test_repeat7(self): + pass + def test_repeat8(self): + pass + """) + result = testdir.runpytest('-v', '--count', '2', '--repeat-scope', + scope) +> result.stdout.fnmatch_lines(lines) +E Failed: remains unmatched: '*test_1.py::test_repeat1[[]1-2[]] PASSED*' + +/build/reproducible-path/pytest-repeat-0.9.1/.pybuild/cpython3_3.11/build/test_repeat.py:244: Failed +----------------------------- Captured stderr call ----------------------------- +ERROR: usage: __main__.py [options] [file_or_dir] [file_or_dir] [...] +__main__.py: error: unrecognized arguments: --count --repeat-scope session + inifile: None + rootdir: /tmp/pytest-of-pbuilder2/pytest-0/test_scope0 + +_____________________ TestRepeat.test_scope[module-lines1] _____________________ + +self = +testdir = +scope = 'module' +lines = ['*test_1.py::test_repeat1[[]1-2[]] PASSED*', '*test_1.py::test_repeat2[[]1-2[]] PASSED*', '*test_1.py::test_repeat1[[...peat2[[]2-2[]] PASSED*', '*test_2.py::test_repeat3[[]1-2[]] PASSED*', '*test_2.py::test_repeat4[[]1-2[]] PASSED*', ...] + + @pytest.mark.parametrize(['scope', 'lines'], [ + ('session', [ + '*test_1.py::test_repeat1[[]1-2[]] PASSED*', + '*test_1.py::test_repeat2[[]1-2[]] PASSED*', + '*test_2.py::test_repeat3[[]1-2[]] PASSED*', + '*test_2.py::test_repeat4[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]1-2[]] PASSED*', + '*test_1.py::test_repeat1[[]2-2[]] PASSED*', + '*test_1.py::test_repeat2[[]2-2[]] PASSED*', + '*test_2.py::test_repeat3[[]2-2[]] PASSED*', + '*test_2.py::test_repeat4[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]2-2[]] PASSED*', + '*16 passed*', + ]), + ('module', [ + '*test_1.py::test_repeat1[[]1-2[]] PASSED*', + '*test_1.py::test_repeat2[[]1-2[]] PASSED*', + '*test_1.py::test_repeat1[[]2-2[]] PASSED*', + '*test_1.py::test_repeat2[[]2-2[]] PASSED*', + '*test_2.py::test_repeat3[[]1-2[]] PASSED*', + '*test_2.py::test_repeat4[[]1-2[]] PASSED*', + '*test_2.py::test_repeat3[[]2-2[]] PASSED*', + '*test_2.py::test_repeat4[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]2-2[]] PASSED*', + '*16 passed*', + ]), + ('class', [ + '*test_1.py::test_repeat1[[]1-2[]] PASSED*', + '*test_1.py::test_repeat2[[]1-2[]] PASSED*', + '*test_1.py::test_repeat1[[]2-2[]] PASSED*', + '*test_1.py::test_repeat2[[]2-2[]] PASSED*', + '*test_2.py::test_repeat3[[]1-2[]] PASSED*', + '*test_2.py::test_repeat4[[]1-2[]] PASSED*', + '*test_2.py::test_repeat3[[]2-2[]] PASSED*', + '*test_2.py::test_repeat4[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]2-2[]] PASSED*', + '*16 passed*', + ]), + ('function', [ + '*test_1.py::test_repeat1[[]1-2[]] PASSED*', + '*test_1.py::test_repeat1[[]2-2[]] PASSED*', + '*test_1.py::test_repeat2[[]1-2[]] PASSED*', + '*test_1.py::test_repeat2[[]2-2[]] PASSED*', + '*test_2.py::test_repeat3[[]1-2[]] PASSED*', + '*test_2.py::test_repeat3[[]2-2[]] PASSED*', + '*test_2.py::test_repeat4[[]1-2[]] PASSED*', + '*test_2.py::test_repeat4[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]2-2[]] PASSED*', + '*16 passed*', + ]), + ]) + def test_scope(self, testdir, scope, lines): + testdir.makepyfile(test_1=""" + def test_repeat1(): + pass + + def test_repeat2(): + pass + """) + testdir.makepyfile(test_2=""" + def test_repeat3(): + pass + + def test_repeat4(): + pass + """) + testdir.makepyfile(test_3=""" + class TestRepeat1(object): + def test_repeat5(self): + pass + def test_repeat6(self): + pass + class TestRepeat2(object): + def test_repeat7(self): + pass + def test_repeat8(self): + pass + """) + result = testdir.runpytest('-v', '--count', '2', '--repeat-scope', + scope) +> result.stdout.fnmatch_lines(lines) +E Failed: remains unmatched: '*test_1.py::test_repeat1[[]1-2[]] PASSED*' + +/build/reproducible-path/pytest-repeat-0.9.1/.pybuild/cpython3_3.11/build/test_repeat.py:244: Failed +----------------------------- Captured stderr call ----------------------------- +ERROR: usage: __main__.py [options] [file_or_dir] [file_or_dir] [...] +__main__.py: error: unrecognized arguments: --count --repeat-scope module + inifile: None + rootdir: /tmp/pytest-of-pbuilder2/pytest-0/test_scope1 + +_____________________ TestRepeat.test_scope[class-lines2] ______________________ + +self = +testdir = +scope = 'class' +lines = ['*test_1.py::test_repeat1[[]1-2[]] PASSED*', '*test_1.py::test_repeat2[[]1-2[]] PASSED*', '*test_1.py::test_repeat1[[...peat2[[]2-2[]] PASSED*', '*test_2.py::test_repeat3[[]1-2[]] PASSED*', '*test_2.py::test_repeat4[[]1-2[]] PASSED*', ...] + + @pytest.mark.parametrize(['scope', 'lines'], [ + ('session', [ + '*test_1.py::test_repeat1[[]1-2[]] PASSED*', + '*test_1.py::test_repeat2[[]1-2[]] PASSED*', + '*test_2.py::test_repeat3[[]1-2[]] PASSED*', + '*test_2.py::test_repeat4[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]1-2[]] PASSED*', + '*test_1.py::test_repeat1[[]2-2[]] PASSED*', + '*test_1.py::test_repeat2[[]2-2[]] PASSED*', + '*test_2.py::test_repeat3[[]2-2[]] PASSED*', + '*test_2.py::test_repeat4[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]2-2[]] PASSED*', + '*16 passed*', + ]), + ('module', [ + '*test_1.py::test_repeat1[[]1-2[]] PASSED*', + '*test_1.py::test_repeat2[[]1-2[]] PASSED*', + '*test_1.py::test_repeat1[[]2-2[]] PASSED*', + '*test_1.py::test_repeat2[[]2-2[]] PASSED*', + '*test_2.py::test_repeat3[[]1-2[]] PASSED*', + '*test_2.py::test_repeat4[[]1-2[]] PASSED*', + '*test_2.py::test_repeat3[[]2-2[]] PASSED*', + '*test_2.py::test_repeat4[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]2-2[]] PASSED*', + '*16 passed*', + ]), + ('class', [ + '*test_1.py::test_repeat1[[]1-2[]] PASSED*', + '*test_1.py::test_repeat2[[]1-2[]] PASSED*', + '*test_1.py::test_repeat1[[]2-2[]] PASSED*', + '*test_1.py::test_repeat2[[]2-2[]] PASSED*', + '*test_2.py::test_repeat3[[]1-2[]] PASSED*', + '*test_2.py::test_repeat4[[]1-2[]] PASSED*', + '*test_2.py::test_repeat3[[]2-2[]] PASSED*', + '*test_2.py::test_repeat4[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]2-2[]] PASSED*', + '*16 passed*', + ]), + ('function', [ + '*test_1.py::test_repeat1[[]1-2[]] PASSED*', + '*test_1.py::test_repeat1[[]2-2[]] PASSED*', + '*test_1.py::test_repeat2[[]1-2[]] PASSED*', + '*test_1.py::test_repeat2[[]2-2[]] PASSED*', + '*test_2.py::test_repeat3[[]1-2[]] PASSED*', + '*test_2.py::test_repeat3[[]2-2[]] PASSED*', + '*test_2.py::test_repeat4[[]1-2[]] PASSED*', + '*test_2.py::test_repeat4[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]2-2[]] PASSED*', + '*16 passed*', + ]), + ]) + def test_scope(self, testdir, scope, lines): + testdir.makepyfile(test_1=""" + def test_repeat1(): + pass + + def test_repeat2(): + pass + """) + testdir.makepyfile(test_2=""" + def test_repeat3(): + pass + + def test_repeat4(): + pass + """) + testdir.makepyfile(test_3=""" + class TestRepeat1(object): + def test_repeat5(self): + pass + def test_repeat6(self): + pass + class TestRepeat2(object): + def test_repeat7(self): + pass + def test_repeat8(self): + pass + """) + result = testdir.runpytest('-v', '--count', '2', '--repeat-scope', + scope) +> result.stdout.fnmatch_lines(lines) +E Failed: remains unmatched: '*test_1.py::test_repeat1[[]1-2[]] PASSED*' + +/build/reproducible-path/pytest-repeat-0.9.1/.pybuild/cpython3_3.11/build/test_repeat.py:244: Failed +----------------------------- Captured stderr call ----------------------------- +ERROR: usage: __main__.py [options] [file_or_dir] [file_or_dir] [...] +__main__.py: error: unrecognized arguments: --count --repeat-scope class + inifile: None + rootdir: /tmp/pytest-of-pbuilder2/pytest-0/test_scope2 + +____________________ TestRepeat.test_scope[function-lines3] ____________________ + +self = +testdir = +scope = 'function' +lines = ['*test_1.py::test_repeat1[[]1-2[]] PASSED*', '*test_1.py::test_repeat1[[]2-2[]] PASSED*', '*test_1.py::test_repeat2[[...peat2[[]2-2[]] PASSED*', '*test_2.py::test_repeat3[[]1-2[]] PASSED*', '*test_2.py::test_repeat3[[]2-2[]] PASSED*', ...] + + @pytest.mark.parametrize(['scope', 'lines'], [ + ('session', [ + '*test_1.py::test_repeat1[[]1-2[]] PASSED*', + '*test_1.py::test_repeat2[[]1-2[]] PASSED*', + '*test_2.py::test_repeat3[[]1-2[]] PASSED*', + '*test_2.py::test_repeat4[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]1-2[]] PASSED*', + '*test_1.py::test_repeat1[[]2-2[]] PASSED*', + '*test_1.py::test_repeat2[[]2-2[]] PASSED*', + '*test_2.py::test_repeat3[[]2-2[]] PASSED*', + '*test_2.py::test_repeat4[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]2-2[]] PASSED*', + '*16 passed*', + ]), + ('module', [ + '*test_1.py::test_repeat1[[]1-2[]] PASSED*', + '*test_1.py::test_repeat2[[]1-2[]] PASSED*', + '*test_1.py::test_repeat1[[]2-2[]] PASSED*', + '*test_1.py::test_repeat2[[]2-2[]] PASSED*', + '*test_2.py::test_repeat3[[]1-2[]] PASSED*', + '*test_2.py::test_repeat4[[]1-2[]] PASSED*', + '*test_2.py::test_repeat3[[]2-2[]] PASSED*', + '*test_2.py::test_repeat4[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]2-2[]] PASSED*', + '*16 passed*', + ]), + ('class', [ + '*test_1.py::test_repeat1[[]1-2[]] PASSED*', + '*test_1.py::test_repeat2[[]1-2[]] PASSED*', + '*test_1.py::test_repeat1[[]2-2[]] PASSED*', + '*test_1.py::test_repeat2[[]2-2[]] PASSED*', + '*test_2.py::test_repeat3[[]1-2[]] PASSED*', + '*test_2.py::test_repeat4[[]1-2[]] PASSED*', + '*test_2.py::test_repeat3[[]2-2[]] PASSED*', + '*test_2.py::test_repeat4[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]2-2[]] PASSED*', + '*16 passed*', + ]), + ('function', [ + '*test_1.py::test_repeat1[[]1-2[]] PASSED*', + '*test_1.py::test_repeat1[[]2-2[]] PASSED*', + '*test_1.py::test_repeat2[[]1-2[]] PASSED*', + '*test_1.py::test_repeat2[[]2-2[]] PASSED*', + '*test_2.py::test_repeat3[[]1-2[]] PASSED*', + '*test_2.py::test_repeat3[[]2-2[]] PASSED*', + '*test_2.py::test_repeat4[[]1-2[]] PASSED*', + '*test_2.py::test_repeat4[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat5[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat1::test_repeat6[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat7[[]2-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]1-2[]] PASSED*', + '*test_3.py::TestRepeat2::test_repeat8[[]2-2[]] PASSED*', + '*16 passed*', + ]), + ]) + def test_scope(self, testdir, scope, lines): + testdir.makepyfile(test_1=""" + def test_repeat1(): + pass + + def test_repeat2(): + pass + """) + testdir.makepyfile(test_2=""" + def test_repeat3(): + pass + + def test_repeat4(): + pass + """) + testdir.makepyfile(test_3=""" + class TestRepeat1(object): + def test_repeat5(self): + pass + def test_repeat6(self): + pass + class TestRepeat2(object): + def test_repeat7(self): + pass + def test_repeat8(self): + pass + """) + result = testdir.runpytest('-v', '--count', '2', '--repeat-scope', + scope) +> result.stdout.fnmatch_lines(lines) +E Failed: remains unmatched: '*test_1.py::test_repeat1[[]1-2[]] PASSED*' + +/build/reproducible-path/pytest-repeat-0.9.1/.pybuild/cpython3_3.11/build/test_repeat.py:244: Failed +----------------------------- Captured stderr call ----------------------------- +ERROR: usage: __main__.py [options] [file_or_dir] [file_or_dir] [...] +__main__.py: error: unrecognized arguments: --count --repeat-scope function + inifile: None + rootdir: /tmp/pytest-of-pbuilder2/pytest-0/test_scope3 + +________________________ TestRepeat.test_omitted_scope _________________________ + +self = +testdir = + + def test_omitted_scope(self, testdir): + testdir.makepyfile(""" + def test_repeat1(): + pass + + def test_repeat2(): + pass + """) + result = testdir.runpytest('-v', '--count', '2') +> result.stdout.fnmatch_lines([ + '*test_omitted_scope.py::test_repeat1[[]1-2[]] PASSED*', + '*test_omitted_scope.py::test_repeat1[[]2-2[]] PASSED*', + '*test_omitted_scope.py::test_repeat2[[]1-2[]] PASSED*', + '*test_omitted_scope.py::test_repeat2[[]2-2[]] PASSED*', + '*4 passed*', + ]) +E Failed: remains unmatched: '*test_omitted_scope.py::test_repeat1[[]1-2[]] PASSED*' + +/build/reproducible-path/pytest-repeat-0.9.1/.pybuild/cpython3_3.11/build/test_repeat.py:256: Failed +----------------------------- Captured stderr call ----------------------------- +ERROR: usage: __main__.py [options] [file_or_dir] [file_or_dir] [...] +__main__.py: error: unrecognized arguments: --count + inifile: None + rootdir: /tmp/pytest-of-pbuilder2/pytest-0/test_omitted_scope0 + +=========================== short test summary info ============================ +FAILED test_repeat.py::TestRepeat::test_no_repeat - Failed: remains unmatched... +FAILED test_repeat.py::TestRepeat::test_can_repeat - Failed: remains unmatche... +FAILED test_repeat.py::TestRepeat::test_mark_repeat_decorator_is_registered +FAILED test_repeat.py::TestRepeat::test_mark_repeat_decorator - Failed: nomat... +FAILED test_repeat.py::TestRepeat::test_mark_repeat_decorator_repeat_once - F... +FAILED test_repeat.py::TestRepeat::test_parametrize - Failed: remains unmatch... +FAILED test_repeat.py::TestRepeat::test_parametrized_fixture - Failed: remain... +FAILED test_repeat.py::TestRepeat::test_step_number - Failed: remains unmatch... +FAILED test_repeat.py::TestRepeat::test_unittest_test - Failed: remains unmat... +FAILED test_repeat.py::TestRepeat::test_scope[session-lines0] - Failed: remai... +FAILED test_repeat.py::TestRepeat::test_scope[module-lines1] - Failed: remain... +FAILED test_repeat.py::TestRepeat::test_scope[class-lines2] - Failed: remains... +FAILED test_repeat.py::TestRepeat::test_scope[function-lines3] - Failed: rema... +FAILED test_repeat.py::TestRepeat::test_omitted_scope - Failed: remains unmat... +========================= 14 failed, 2 passed in 0.80s ========================= +E: pybuild pybuild:388: test: plugin distutils failed with: exit code=1: cd /build/reproducible-path/pytest-repeat-0.9.1/.pybuild/cpython3_3.11/build; python3.11 -m pytest +dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.11 returned exit code 13 +make: *** [debian/rules:7: binary] Error 25 +dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2 I: copying local configuration +E: Failed autobuilding of package +I: user script /srv/workspace/pbuilder/4934/tmp/hooks/C01_cleanup starting +debug output: disk usage on i-capture-the-hostname at Mon Feb 24 06:01:25 UTC 2025 +Filesystem Size Used Avail Use% Mounted on +tmpfs 3.9G 0 3.9G 0% /dev/shm + +I: user script /srv/workspace/pbuilder/4934/tmp/hooks/C01_cleanup finished I: unmounting dev/ptmx filesystem I: unmounting dev/pts filesystem I: unmounting dev/shm filesystem I: unmounting proc filesystem I: unmounting sys filesystem I: cleaning the build env -I: removing directory /srv/workspace/pbuilder/19427 and its subdirectories -I: Current time: Mon Jan 22 11:37:48 -12 2024 -I: pbuilder-time-stamp: 1705966668 +I: removing directory /srv/workspace/pbuilder/4934 and its subdirectories