You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@impala.apache.org by Lars Volker <lv...@cloudera.com> on 2017/01/04 09:28:31 UTC
Renaming prefix-named tests (IMPALA-4721)
Hi all,
Some of our test names are also prefixes of other tests, e.g.
in tests/metadata/test_ddl.py we have *test_create_table* and
*test_create_table_as_select*. Selecting the former with "impala-py.test -k
test_create_table" will also select the latter.
In the past when I ran into these I renamed the prefix-named test, usually
by adding "_test" to make them unique. However this is somewhat unintuitive
and consequently needed explanation during reviews. To improve the
situation, I would like to propose changing all affected tests in a single
commit.
Before doing that, I'd like to ask for feedback. I created IMPALA-4721
<https://issues.cloudera.org/browse/IMPALA-4721> to track this.
Thanks, Lars
Re: Renaming prefix-named tests (IMPALA-4721)
Posted by David Knupp <dk...@cloudera.com>.
There is a way to run a single test within a test module or class
without -k -- by instead using ::to resolve scope. As noted, using -k
allows one to run tests according to keyword matching on test
class/function names, but this can be inefficient if one test function
name is a substring of another, or different test classes have similarly
named functions. E.g., assume the following test module:
$ cat test_stuff/test_stuff.py
class TestMeOne(object):
def test_me(self):
assert True
def test_me_one(self):
assert True
def test_me_two(self):
assert True
def test_me_three(self):
assert True
class TestMeTwo(object):
def test_me(self):
assert True
def test_me_one(self):
assert True
def test_me_two(self):
assert True
def test_me_three(self):
assert True
If one simply points py.test at the test file itself, all eight tests
will obviously run. But if I want to just run the test_me in the
TestMeOne class, -k test_mewill obviously not help. All eight will still
run.
$ impala-py.test test_stuff/test_stuff.py -k test_me
============================== test session starts
==============================
platform linux2 -- Python 2.6.6 -- py-1.4.30 -- pytest-2.7.2
rootdir: /Users/dknupp/tmp/test_stuff, inifile:
collected 8 items
test_stuff/test_stuff.py ........
=========================== 8 passed in 0.01 seconds
============================
However, py.test accepts the ::operator to resolve scope, and this can
be used on the command line to isolate a single test function.
$ impala-py.testtest_stuff/test_stuff.py::TestMeOne::test_me
============================== test session starts
==============================
platform linux2 -- Python 2.6.6 -- py-1.4.30 -- pytest-2.7.2
rootdir: /Users/dknupp/tmp/test_stuff, inifile:
collected 5 items
test_stuff/test_stuff.py .
=========================== 1 passed in 0.01 seconds
============================
This is even easier to confirm if you use -v to run in verbose mode:
$ impala-py.test -v test_stuff/test_stuff.py::TestMeOne::test_me
============================== test session starts
==============================
platform linux2 -- Python 2.6.6 -- py-1.4.30 -- pytest-2.7.2 --
/Users/dknupp/venv/dev/bin/python
cachedir: test_stuff/.cache
rootdir: /Users/dknupp/tmp/test_stuff, inifile:
collected 5 items
test_stuff/test_stuff.py::TestMeOne::test_me PASSED
=========================== 1 passed in 0.00 seconds
============================
> Alex Behm <ma...@cloudera.com>
> January 4, 2017 at 11:54 AM
> Before we go down that route, isn't there a proper Pytest way to run
> only a
> single test within a .py file?
> Our -k option is meant to filter based on a regex, not necessarily
> select a
> single test.
>
>
> Lars Volker <ma...@cloudera.com>
> January 4, 2017 at 1:28 AM
> Hi all,
>
> Some of our test names are also prefixes of other tests, e.g.
> in tests/metadata/test_ddl.py we have *test_create_table* and
> *test_create_table_as_select*. Selecting the former with
> "impala-py.test -k
> test_create_table" will also select the latter.
>
> In the past when I ran into these I renamed the prefix-named test, usually
> by adding "_test" to make them unique. However this is somewhat
> unintuitive
> and consequently needed explanation during reviews. To improve the
> situation, I would like to propose changing all affected tests in a single
> commit.
>
> Before doing that, I'd like to ask for feedback. I created IMPALA-4721
> <https://issues.cloudera.org/browse/IMPALA-4721> to track this.
>
> Thanks, Lars
>
--
David Knupp
Software Engineer
Cloudera
415-312-1049
<https://www.postbox-inc.com/?utm_source=email&utm_medium=siglink&utm_campaign=reach>
Re: Renaming prefix-named tests (IMPALA-4721)
Posted by Alex Behm <al...@cloudera.com>.
Before we go down that route, isn't there a proper Pytest way to run only a
single test within a .py file?
Our -k option is meant to filter based on a regex, not necessarily select a
single test.
On Wed, Jan 4, 2017 at 1:28 AM, Lars Volker <lv...@cloudera.com> wrote:
> Hi all,
>
> Some of our test names are also prefixes of other tests, e.g.
> in tests/metadata/test_ddl.py we have *test_create_table* and
> *test_create_table_as_select*. Selecting the former with "impala-py.test -k
> test_create_table" will also select the latter.
>
> In the past when I ran into these I renamed the prefix-named test, usually
> by adding "_test" to make them unique. However this is somewhat unintuitive
> and consequently needed explanation during reviews. To improve the
> situation, I would like to propose changing all affected tests in a single
> commit.
>
> Before doing that, I'd like to ask for feedback. I created IMPALA-4721
> <https://issues.cloudera.org/browse/IMPALA-4721> to track this.
>
> Thanks, Lars
>