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

Okan bhan rajalokan at gmail.com
Mon Oct 27 08:59:40 CET 2014


Thanks for the suggestion. I will work on it.
On 27/10/2014 12:40 pm, "holger krekel" <holger at merlinux.eu> wrote:

> 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
> > > > >
> > >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/pytest-dev/attachments/20141027/9a89e53f/attachment-0001.html>


More information about the pytest-dev mailing list