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

holger krekel holger at merlinux.eu
Sun Oct 26 10:49:50 CET 2014


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