Re: Macronize %pytest

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 27 Apr 2020, Miro Hrončok wrote:

Hello Python packagers,

since there is no upstream supported universal test invocation for Python (`python setup.py test` is deprecated and the de-facto-standard `tox` doesn't always do what we want in RPM's %check and/or is not always used by upstreams) and a lot of upstreams use pytest, I'd like to propose a %pytest macros, for standardizing the way pytest is run.

Usage:

 %check
 %pytest

Or with options passed to pyets:

 %check
 %pytest -v -m "not network" tests/


(Here ends the tl;dr version.)


Why not just use `pytest` or `%{python3} -m pytest` instead of `%pytest`?

We want to *test the code we ship*. In the general case this involves:

1. Prepending sys.path with %{buildroot}%{python3_sitelib} (and/or sitearch)
2. Prepending $PATH with %{buildroot}%{_bindir}
3. Ensuring $PWD is not in sys.path


So the idea is (untested):

%pytest_cmd /usr/bin/pytest

%pytest %{expand:
PYTHONPATH="${PYTHONPATH:-%{buildroot}%{python3_sitearch}:%{buildroot}%{python3_sitelib}}" \
PATH="%{buildroot}%{_bindir}:$PATH" \
%pytest_cmd
}


Where PYTHONPATH solves (1), PATH solves (2) and using `/usr/bin/pytest` over `%{python3} -m pytest` kinda solves (3).

I say "kinda" because using `python -m pytest` explicitly adds $PWD to sys.path, but using `pytest` doesn't always prevent it.

https://docs.pytest.org/en/latest/usage.html#calling-pytest-through-python-m-pytest

I've been trying to completely solve (3) in my head in a general way, but it always involves `cd`ing to a temporary directory before running the tests, but plenty of test suites cannot handle that gracefully.

Unfortunately Python interpreter doesn't have a flag that says "don't add current directory to sys.path, but respect $PYTHONPATH". In the long term, we might propose to add it.

I like the idea!

I have run into the issue of not wanting $PWD in sys.path before as well, so it would be great to solve that.

The only other thing that I might suggest is to set PYTHONDONTWRITEBYTECODE=1 so we don't get pytest bytecode written out.

Scott
_______________________________________________
packaging mailing list -- packaging@xxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to packaging-leave@xxxxxxxxxxxxxxxxxxxxxxx
Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: https://lists.fedoraproject.org/archives/list/packaging@xxxxxxxxxxxxxxxxxxxxxxx

[Index of Archives]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite Forum]     [KDE Users]

  Powered by Linux