If I understand correctly, using `pytest -k` might be less work and more
generalized than a swag of custom makers, unless it entails a lot of
re-naming things.  The work to add markers might be easier if they can be
applied to entire classes of tests, although what I've mostly seen with
`pytest` is a functional pattern rather than classes in tests.  For more
about that, see the note about using pytest fixtures vs. class
setup/teardown at https://docs.pytest.org/en/latest/xunit_setup.html

With regard to "slow" and https://github.com/apache/airflow/pull/6876, it
was motivated by one test that uses moto mocking for AWS batch services.
In particular, it has a mock batch job that actually runs a container and
the user of the mock has no control over how the job transitions from
various job states (with associated status).  For example, the `pytest`
durations are an order of magnitude longer for this test than all others
(see below stdout from a PR branch of mine).  So, during dev-test cycles,
once this test is coded and working as expected, it helps to either
temporarily mark it with `pytest.mark.skip` or to permanently mark it with
a custom marker (e.g. `pytest.mark.slow`) and then use the `pytest -m 'not
slow'` to run all the faster tests.  It's no big deal, I can live without
it, it's just a convenience.

13.77s call
tests/providers/amazon/aws/hooks/test_batch_waiters.py::test_aws_batch_job_waiting
0.23s setup
 
tests/providers/amazon/aws/hooks/test_batch_waiters.py::test_aws_batch_job_waiting
0.11s call
tests/providers/amazon/aws/hooks/test_batch_client.py::TestAwsBatchClient::test_poll_job_complete_raises_for_max_retries
0.09s call
tests/providers/amazon/aws/hooks/test_batch_waiters.py::TestAwsBatchWaiters::test_wait_for_job_raises_for_client_error
0.01s call
tests/providers/amazon/aws/hooks/test_batch_client.py::TestAwsBatchClientDelays::test_exponential_delay_03

On Fri, Dec 27, 2019 at 11:39 AM Tomasz Urbaszek <
tomasz.urbas...@polidea.com> wrote:

> The suggestion of using -k flag is really interesting. It will require a
> lot of changes but adding
>  marks will require the same effort. However, I think that using a marker
> is more explicit and
> easier to spot.
>
> Regarding "slow test" marker, I did a quick calculation of tests execution
> times (execution and setups):
>
> Above 1s : 16.53%, time together: 18.29m
> Above 2s : 8.13%, time together: 14.43m
> Above 3s : 4.14%, time together: 11.54m
> Above 4s : 2.94%, time together: 10.3m
> Above 5s : 2.2%, time together: 9.3m
> Above 10s : 0.89%, time together: 6.51m
> Above 20s : 0.47%, time together: 4.53m
> Above 60s : 0.0%, time together: 0.0m
>
>
> Total time of the example build: 28m. I am not sure when a test is "slow".
> Moreover, I think there could be
> a difference in times between local environment (where developer will
> decide to use such marker) and
> the CI environment, thus resulting in a potential inconsistency.
>
> T.
>
> On Fri, Dec 27, 2019 at 7:58 PM Darren Weber <dweber.consult...@gmail.com>
> wrote:
>
> >
> >
> > Consider all the options for filtering tests:
> > - http://doc.pytest.org/en/latest/example/markers.html
> >
> > The `pytest -k` filters are very useful.  Provide guidelines on how to
> > name things so that `pytest -k` can be used to filter categories of
> tests.
> > Use markers for tests that might be the exception to the rule within a
> > module or class of tests (avoid the overhead of marking all the tests
> with
> > all the markers).  Consider using classes that contain all the same
> marker
> > (but a module and/or class name could serve this purpose too).
> >
> > -- Darren
> >
> > PS, I stumbled in this after creating
> > https://github.com/apache/airflow/pull/6876 to mark a slow test
> >
> > On 2019/12/27 11:30:09, Tomasz Urbaszek <turbas...@apache.org> wrote:
> > > +1 for integrations and backends, it's a good start ;)
> > >
> > > T.
> > >
> > > On Fri, Dec 27, 2019 at 12:16 PM Jarek Potiuk <
> jarek.pot...@polidea.com>
> > > wrote:
> > >
> > > > Since I am going to start working on it soon - I'd love to get some
> > > > opinions :).
> > > >
> > > > J.
> > > >
> > > > On Mon, Dec 23, 2019 at 11:13 AM Jarek Potiuk <
> > jarek.pot...@polidea.com>
> > > > wrote:
> > > >
> > > > > I have a concrete proposal that we can start with. It's not a final
> > set
> > > > of
> > > > > markers we might want to have but one that we can start with and
> > make an
> > > > > immediate use of.
> > > > >
> > > > > I would like to adapt our tests to be immediately usable in Breeze
> > (and
> > > > > tied with it) and follow this approach:
> > > > >
> > > > > *Proposed Breeze changes:*
> > > > >
> > > > >    - `./breeze` by default will start only the main
> 'airflow-testing'
> > > > >    image. This way no huge resource usage will be needed when
> breeze
> > is
> > > > >    started by default
> > > > >    - './breeze --all-integrations` will start all dependent images
> > (so we
> > > > >    will be able to run all tests)
> > > > >    - './breeze --integrations [kubernetes,cassandra,mongo,
> > > > >    rabbitmq,redis,openldap,kerberos] - you will be able to choose
> > which
> > > > >    integrations you want to start
> > > > >    - When you run `breeze --backend postgres` it will only start
> > postgres
> > > > >    not mysql and the other way round.
> > > > >
> > > > > *Proposed Pytest marks:*
> > > > >
> > > > >    -
> > > > >
> > > >
> >
> pytest.mark.integrations('kubernetes'),pytest.mark.integrations('cassandra'),.....
> > > > >    - pytest,mark.backends("postgres"),
> pytest,mark.backends("mysql"),
> > > > >    pytest.mark.backends("sqlite")
> > > > >
> > > > > It's very easy to add custom switches to pytest and auto-detect
> what
> > is
> > > > > the default setting based on environment variables for example. We
> > could
> > > > > follow
> > > > >
> > > >
> >
> https://docs.pytest.org/en/latest/example/markers.html#custom-marker-and-command-line-option-to-control-test-runs
> > > > > .
> > > > >
> > > > > *Proposed Pytest behaviour:*
> > > > >
> > > > >    - `pytest` -> in Breeze will run all tests that are applicable
> > within
> > > > >    the current environment:
> > > > >       - it will only run non-marked tests by default, applicable
> with
> > > > >       current selected backend
> > > > >       - when (for example) you stared cassandra is added it will
> > > > >       additionally run pytest.mark.integrations('cassandra')
> > > > >    - `pytest` in local environment by default will only run
> > non-marked
> > > > >    tests
> > > > >    - `pytest --integrations [kubernetes, ....]` will only run the
> > > > >    integration tests selected (will convert the switch into the
> > > > corresponding
> > > > >    markers (as explained in the example above)
> > > > >    - `pytest --backends [postgres| mysql | sqlite] will only run
> the
> > > > >    specific tests that use postgres/mysql/sqlite specific tests
> > > > >
> > > > > *What we will achieve by that:*
> > > > >
> > > > >    - lower resource usage by Breeze by default (while allowing to
> run
> > > > >    most of the tests)
> > > > >    - easy selection of integration(s) we want to test
> > > > >    - easy way to run all tests to reproduce CI run
> > > > >    - capability of running just 'pytest' and testing (as fast as
> > > > >    possible) all the tests that are applicable in your environment
> > (if
> > > > you
> > > > >    want to be extra-sure everything works - for example during
> > > > refactoring)
> > > > >    - in the future we might be able to optimise CI and run smaller
> > set of
> > > > >    tests for postgres/mysql/sqlite 'only' cases - optimising the
> time
> > > > for CI
> > > > >    builds.
> > > > >
> > > > >
> > > > > If I will get a general "OK" from community for that - I can make a
> > set
> > > > of
> > > > > incremental changes to breeze (as I continue working on prod image)
> > and
> > > > add
> > > > > those capabilities to Breeze.
> > > > >
> > > > > J.
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > On Wed, Dec 18, 2019 at 1:10 AM Kamil Breguła <
> > kamil.breg...@polidea.com
> > > > >
> > > > > wrote:
> > > > >
> > > > >> It is worth adding that we currently use test marking in the
> > project.
> > > > For
> > > > >> this purpose, we use the prefix "_system.py" in the file name.
> > > > >> Unit tests:
> > > > >>
> > > > >>
> > > >
> >
> https://github.com/apache/airflow/blob/master/tests/operators/test_gcs_to_gcs.py
> > > > >> System tests:
> > > > >>
> > > > >>
> > > >
> >
> https://github.com/apache/airflow/blob/master/tests/operators/test_gcs_to_gcs_operator_system.py
> > > > >> Elsewhere, a special directory structure is used.
> > > > >> Unit tests:
> > > > >> https://github.com/apache/airflow/tree/master/tests/kubernetes
> > > > >> Integration tests:
> > > > >>
> > > >
> >
> https://github.com/apache/airflow/tree/master/tests/integration/kubernetes
> > > > >>
> > > > >> This will allow us to limit e.g. mocking in system tests.
> > > > >> This seems to be a clearer solution because it clearly separates
> > each
> > > > type
> > > > >> of test. If we add markers, they may not be noticed when making
> > changes
> > > > >> and
> > > > >> review. The file name is immediately visible.
> > > > >> Recently I dealt with such a case that system tests included
> > mocking,
> > > > >> which
> > > > >> by definition did not work.
> > > > >>
> > > > >>
> > > >
> >
> https://github.com/apache/airflow/commit/11262c6d42c4612890a6eec71783e0a6d5b22c17
> > > > >>
> > > > >>
> > > > >> On Tue, Dec 10, 2019 at 2:22 PM Jarek Potiuk <
> > jarek.pot...@polidea.com>
> > > > >> wrote:
> > > > >>
> > > > >> > I am all-in for markers.
> > > > >> >
> > > > >> > I think we should start with small set of useful markers, which
> > should
> > > > >> have
> > > > >> > a useful purpose from the beginning and implement them first -
> to
> > > > learn
> > > > >> how
> > > > >> > useful they are (before we decide on full set of markers).
> > > > >> > Otherwise maintaining those markers will become a fruitless
> > "chore"
> > > > and
> > > > >> it
> > > > >> > might be abandoned.
> > > > >> >
> > > > >> > So my proposal is to agree the first top cases we want to handle
> > with
> > > > >> > markers and then define/apply the markers accordingly:
> > > > >> >
> > > > >> > Those are my three top priorities (from most important to
> least):
> > > > >> >
> > > > >> >    - Splitting out the Integration tests (and updating Breeze)
> so
> > that
> > > > >> you
> > > > >> >    choose which integration you start when you start Breeze
> rather
> > > > than
> > > > >> > start
> > > > >> >    them all.
> > > > >> >    - DB separation so that we do not repeat non-DB tests on all
> > > > >> Databases.
> > > > >> >    - Proper separation of Kubernetes tests (They are now
> filtered
> > out
> > > > >> based
> > > > >> >    on skipif/env variables.
> > > > >> >
> > > > >> >
> > > > >> > J.
> > > > >> >
> > > > >> >
> > > > >> > On Tue, Dec 10, 2019 at 1:32 PM Tomasz Urbaszek <
> > > > >> > tomasz.urbas...@polidea.com>
> > > > >> > wrote:
> > > > >> >
> > > > >> > > Hi everyone,
> > > > >> > >
> > > > >> > > Since we run our tests using pytest we are able to use test
> > markers
> > > > >> [1].
> > > > >> > > Using them will give
> > > > >> > > use some useful things:
> > > > >> > > - additional information of test type (ex. when used for
> system
> > > > test)
> > > > >> > > - easy way to select test by types (ex. pytest -v -m "not
> > system")
> > > > >> > > - way to split our test suite in more effective way (no need
> to
> > run
> > > > >> all
> > > > >> > > tests on 3 backends)
> > > > >> > >
> > > > >> > > I would like to discuss what "official" marks would we like to
> > use.
> > > > >> As a
> > > > >> > > base I would suggests
> > > > >> > > to mark tests as:
> > > > >> > > - system - tests that need the outside world to be successful
> > (ex.
> > > > GCP
> > > > >> > > system tests)
> > > > >> > > - db[postgres, sqlite, mysql] - tests that require database to
> > be
> > > > >> > > successful, in other words,
> > > > >> > > tests that create some db side effects
> > > > >> > > - integration - tests that requires some additional resources
> > like
> > > > >> > > Cassandra or Kubernetes
> > > > >> > >
> > > > >> > > All other, unmarked tests would be treated as "pure" meaning
> > that
> > > > they
> > > > >> > have
> > > > >> > > no side effects
> > > > >> > > (at least on database level).
> > > > >> > >
> > > > >> > > What do you think about this? Does anyone have some experience
> > with
> > > > >> using
> > > > >> > > markers in
> > > > >> > > such a big project?
> > > > >> > >
> > > > >> > > [1] http://doc.pytest.org/en/latest/example/markers.html
> > > > >> > >
> > > > >> > >
> > > > >> > > Bests,
> > > > >> > > Tomek Urbaszek
> > > > >> > >
> > > > >> >
> > > > >> >
> > > > >> > --
> > > > >> >
> > > > >> > Jarek Potiuk
> > > > >> > Polidea <https://www.polidea.com/> | Principal Software
> Engineer
> > > > >> >
> > > > >> > M: +48 660 796 129 <+48660796129>
> > > > >> > [image: Polidea] <https://www.polidea.com/>
> > > > >> >
> > > > >>
> > > > >
> > > > >
> > > > > --
> > > > >
> > > > > Jarek Potiuk
> > > > > Polidea <https://www.polidea.com/> | Principal Software Engineer
> > > > >
> > > > > M: +48 660 796 129 <+48660796129>
> > > > > [image: Polidea] <https://www.polidea.com/>
> > > > >
> > > > >
> > > >
> > > > --
> > > >
> > > > Jarek Potiuk
> > > > Polidea <https://www.polidea.com/> | Principal Software Engineer
> > > >
> > > > M: +48 660 796 129 <+48660796129>
> > > > [image: Polidea] <https://www.polidea.com/>
> > > >
> > >
> >
>
>
> --
>
> Tomasz Urbaszek
> Polidea <https://www.polidea.com/> | Software Engineer
>
> M: +48 505 628 493 <+48505628493>
> E: tomasz.urbas...@polidea.com <tomasz.urbasz...@polidea.com>
>
> Unique Tech
> Check out our projects! <https://www.polidea.com/our-work>
>


-- 
Darren L. Weber, Ph.D.
http://psdlw.users.sourceforge.net/
http://psdlw.users.sourceforge.net/wordpress/

Reply via email to