Git Product home page Git Product logo

Comments (20)

okken avatar okken commented on June 9, 2024 3

The act of using --count 3 changes the nodeids, so with --count 3, test_foo[10] no longer exists.

There is a workaround, selecting parameters by keyword instead of nodeid:

(pytest-repeat) $ pytest test_param.py -v -k 'test_foo[10' --count 3
=========================== test session starts ============================
collected 6 items / 3 deselected / 3 selected                              

test_param.py::test_foo[10-1-3] PASSED                               [ 33%]
test_param.py::test_foo[10-2-3] PASSED                               [ 66%]
test_param.py::test_foo[10-3-3] PASSED                               [100%]

===================== 3 passed, 3 deselected in 0.01s ======================

from pytest-repeat.

okken avatar okken commented on June 9, 2024 1

We also cannot select individual counts using nodeid:

(pytest-repeat) $ pytest 'test_param.py::test_foo[10-2-3]'              
=========================== test session starts ============================
collected 0 items                                                          

========================== no tests ran in 0.00s ===========================
ERROR: not found: /Users/okken/projects/pytest-repeat/test_param.py::test_foo[10-2-3]
(no name '/Users/okken/projects/pytest-repeat/test_param.py::test_foo[10-2-3]' in any of [<Module test_param.py>])

I don't think this is a bug, it's an affect of when the counts are added to the nodeid.

And there is the same workaround, use keywords.

(pytest-repeat) $ pytest test_param.py -v -k 'test_foo[10-2-3' --count 3
=========================== test session starts ============================
collected 6 items / 5 deselected / 1 selected                              

test_param.py::test_foo[10-2-3] PASSED                               [100%]

===================== 1 passed, 5 deselected in 0.00s ======================

from pytest-repeat.

RonnyPfannschmidt avatar RonnyPfannschmidt commented on June 9, 2024 1

I'd like to turn this into a feature request for pytest

from pytest-repeat.

RonnyPfannschmidt avatar RonnyPfannschmidt commented on June 9, 2024

does this happen in older pytest versions ?

from pytest-repeat.

vbarbaresi avatar vbarbaresi commented on June 9, 2024

It happens in older pytest versions as well (at least until 2.8)
I opened an issue on pytest tracker pytest-dev/pytest#4142 providing a unit test reproducing the bug.

from pytest-repeat.

blueyed avatar blueyed commented on June 9, 2024

I wonder if this is also related to adding/removing ::() (pytest-dev/pytest#4127 (comment)).

from pytest-repeat.

blueyed avatar blueyed commented on June 9, 2024

According to pytest-dev/pytest#4142 it likely is not.

from pytest-repeat.

1Mark avatar 1Mark commented on June 9, 2024

Any progress on this?

from pytest-repeat.

vyahello avatar vyahello commented on June 9, 2024

Hey, looks like this happens on the latest pytest version
Do we have any updates on this one?

from pytest-repeat.

DavidAntliff avatar DavidAntliff commented on June 9, 2024

This is happening for me with pytest 7.1.0 and pytest-repeat 0.9.1.

Is it related to the way test items are renamed and collected, in that pytest-repeat modifies the name with extra parameters, and this affects name matching?

For example, with a parametrized test that has one parameter of value 256, this works (runs once):

 $ pytest test.py::test_something[256]

And this works (runs 1000 times but for each parameter, which may be far too many tests):

 $ pytest test.py::test_something --count 1000

But to run for a single parameter value, this does not work:

 $ pytest test.py::test_something[256] --count 1000
(no name 'test.py::test_something[256]' in any of [<Module test.py>])

And this runs once, but does not repeat:

 $ pytest test.py::test_something[256-1-1000] --count 1000

Is there a known workaround, aside from running pytest over and over in a shell script loop?

from pytest-repeat.

DavidAntliff avatar DavidAntliff commented on June 9, 2024

I'm curious if there's been any thinking from the contributors as to how this might work, if we could get it to work?

I come across this so often I'd be happy to help fix it, if I could get in sync with the designers' thoughts...

from pytest-repeat.

RonnyPfannschmidt avatar RonnyPfannschmidt commented on June 9, 2024

Currently no design work on this was done

I believe major internals Changes in pytest itself are necessary to enable this

from pytest-repeat.

okken avatar okken commented on June 9, 2024

Seems to work fine now, with pytest 7.4.2 and pytest-repeat 0.9.2

import pytest

@pytest.mark.parametrize('a', (10, 20))
def test_foo(a):
    ...

test run:

(pytest-repeat) $ pytest test_param.py -v --count 3
================================= test session starts =================================
collected 6 items                                                                     

test_param.py::test_foo[10-1-3] PASSED                                          [ 16%]
test_param.py::test_foo[10-2-3] PASSED                                          [ 33%]
test_param.py::test_foo[10-3-3] PASSED                                          [ 50%]
test_param.py::test_foo[20-1-3] PASSED                                          [ 66%]
test_param.py::test_foo[20-2-3] PASSED                                          [ 83%]
test_param.py::test_foo[20-3-3] PASSED                                          [100%]

================================== 6 passed in 0.01s ==================================

from pytest-repeat.

DavidAntliff avatar DavidAntliff commented on June 9, 2024

@okken I think the issue remains and itโ€™s that you canโ€™t do this:

 $ pytest test_param.py::test_foo[10] -v --count 3

from pytest-repeat.

RonnyPfannschmidt avatar RonnyPfannschmidt commented on June 9, 2024

This one is unfixable without a major change in pytest

from pytest-repeat.

okken avatar okken commented on June 9, 2024

@RonnyPfannschmidt this brings me to a question of "why leave this issue open?"

  • We know desired syntax isn't realistic due to the implementation of both pytest-repeat and more importantly, pytest.
  • So unless pytest changes, it's not fixable.
  • There is a workaround, use keywords.

So why keep this open?

from pytest-repeat.

okken avatar okken commented on June 9, 2024

Also just swapped "bug" for "enhancement", because there is a way to do the requested action, just not with the desired syntax.

from pytest-repeat.

okken avatar okken commented on June 9, 2024

I personally wouldn't know how to describe the feature request. Partly because I don't fully understand the limitations of pytest that are the problem. But I agree.

I do think, at the very least, this issue should remain open until the workaround is documented and easy to find.

from pytest-repeat.

okken avatar okken commented on June 9, 2024

@DavidAntliff Does the -k workaround work for your use case?

from pytest-repeat.

DavidAntliff avatar DavidAntliff commented on June 9, 2024

@DavidAntliff Does the -k workaround work for your use case?

Yes, that works for me - thank you. I've been looking for a way to do this for a while.

from pytest-repeat.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.