[pytest-dev] improve -k/-m exercise / want to help pytest?

holger krekel holger at merlinux.eu
Mon Oct 27 08:10:59 CET 2014


On Mon, Oct 27, 2014 at 11:23 +0530, Okan bhan wrote:
> Yes. These seems to clear my doubts. Thanks for answering these.
> 
> I kind of understood usability of '-k 1.3' and how currently it selects all
> tests. Looks like it is because of eval(matchexpr) and eval('1.3') always
> returns 1.3 which makes testcase true.
> 
> I will work on PR and raise a fix by adding new 'if' condition. Meanwhile
> I'm looking into any other way (something without eval). Any
> suggestions/pointers?

There is no need for an intermediate PR here.

To solve the problem properly you can probably use regular expressions.
If you haven't worked with them before you should work through some
regex related tutorials first to understand them better.

To avoid misunderstanding allow me to clarify that i am fine to give
hints/ideas but i didn't plan to make this a teaching exercise, just
one for a programmer to contribute something useful to pytest without
requiring deep pytest knowledge.

best,
holger


> Thanks & Regards
> Alok
> 
> On Sun, Oct 26, 2014 at 3:19 PM, holger krekel <holger at merlinux.eu> wrote:
> 
> > Hi Okan,
> >
> > On Sun, Oct 26, 2014 at 07:26 +0530, Okan bhan wrote:
> > > Hi Holger
> > >
> > > I would like to work on this but I've some very silly doubts which I
> > would
> > > like to clarify. Please bear with me if I'm unclear/repeating in my views
> > > as this is my first time contributing to any open source project
> > > experience.
> > >
> > > I tried understanding this problem and looking inside source code. With
> > > help from nice people on IRC, I could understand how it is implemented
> > > (namely matchmark & matchkeyword method in mark.py module). My issue is:
> > >
> > > 1. I don't understand how we can put dotted path as marker. Currently if
> > I
> > > try a marker (like @pytest.mark.a.b), I get error "AttributeError:
> > > MarkDecorator instance has no attribute 'b'". Does this feature require a
> > > fix of this so that we can allow custom markers with dots.
> >
> > No, sorry if that was unclear.  There is no easy possibility to have
> > a dotted marker.
> >
> > > 2. Similarly for 'keywords', in what scenario dotted path (like 4.3) will
> > > be a keyword? We can't put it as method_name, class_name etc. Only option
> > > left is parametrized testcases but I grasp this.
> >
> > Parametrizing tests can add almost arbitrary string IDs and they become
> > part of the node id against which "-k" is matching.  So "-k 1.3" might very
> > well be used from a user wanted to run tests functions using a particular
> > param.
> >
> > Does this now make sense to you?
> > holger
> >
> >
> > > Please guide me to docs/links regarding this.
> > >
> > > Thanks & Regards
> > > Alok
> > >
> > > On Wed, Oct 22, 2014 at 12:51 PM, holger krekel <holger at merlinux.eu>
> > wrote:
> > >
> > > > Hi all,
> > > >
> > > > is anyone interested in a little exercise that would improve pytest
> > usage?
> > > > It doesn't require deep pytest knowledge.
> > > >
> > > > This is about the "-k" and "-m" selection mini-language,
> > > > namely expressions like:
> > > >
> > > >     marker1 and marker2
> > > >     not marker1 and (marker2 or marker3)
> > > >
> > > > and so forth.  The thing is that pytest currently uses Python's "eval"
> > with
> > > > a custom dictionary which means that names such as "marker1"
> > > > cannot have dots or other punctuation and also other things are not
> > > > possible like running all tests that don't have "4.3" (coming from a
> > > > parametrized test) in it:
> > > >
> > > >     -k 'not 4.3'
> > > >
> > > > This would currently select all tests because "4.3" is true.  Various
> > > > people have run into traps like this.
> > > >
> > > > So what is needed here are tests and code that, given a set of names
> > > > and an expression string, determines if the expression is true or not.
> > > > And everything except "and" and "or" are valid words. To use the latter
> > > > two words probably need to have some escaping like "\and" or so but
> > > > that's a bonus task :)
> > > >
> > > > Anyone up for this little exercise?  Or other comments?
> > > >
> > > > best and thanks,
> > > > holger
> > > >
> > > >
> > > > _______________________________________________
> > > > Pytest-dev mailing list
> > > > Pytest-dev at python.org
> > > > https://mail.python.org/mailman/listinfo/pytest-dev
> > > >
> >


More information about the pytest-dev mailing list