mirror of
https://github.com/simonw/datasette.git
synced 2025-12-10 16:51:24 +01:00
Use pytest-xdist to speed up tests (#1290)
* Run tests in CI using pytest-xdist * Documentation for pytest-xdist Closes #1289
This commit is contained in:
parent
59ef4a20cb
commit
0a7621f96f
5 changed files with 26 additions and 1 deletions
3
.github/workflows/test.yml
vendored
3
.github/workflows/test.yml
vendored
|
|
@ -26,4 +26,5 @@ jobs:
|
||||||
pip install -e '.[test]'
|
pip install -e '.[test]'
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
run: |
|
run: |
|
||||||
pytest
|
pytest -n auto -m "not serial"
|
||||||
|
pytest -m "serial"
|
||||||
|
|
|
||||||
|
|
@ -43,10 +43,28 @@ The next step is to create a virtual environment for your project and use it to
|
||||||
|
|
||||||
That last line does most of the work: ``pip install -e`` means "install this package in a way that allows me to edit the source code in place". The ``.[test]`` option means "use the setup.py in this directory and install the optional testing dependencies as well".
|
That last line does most of the work: ``pip install -e`` means "install this package in a way that allows me to edit the source code in place". The ``.[test]`` option means "use the setup.py in this directory and install the optional testing dependencies as well".
|
||||||
|
|
||||||
|
.. _contributing_running_tests:
|
||||||
|
|
||||||
|
Running the tests
|
||||||
|
-----------------
|
||||||
|
|
||||||
Once you have done this, you can run the Datasette unit tests from inside your ``datasette/`` directory using `pytest <https://docs.pytest.org/>`__ like so::
|
Once you have done this, you can run the Datasette unit tests from inside your ``datasette/`` directory using `pytest <https://docs.pytest.org/>`__ like so::
|
||||||
|
|
||||||
pytest
|
pytest
|
||||||
|
|
||||||
|
You can run the tests faster using multiple CPU cores with `pytest-xdist <https://pypi.org/project/pytest-xdist/>`__ like this::
|
||||||
|
|
||||||
|
pytest -n auto -m "not serial"
|
||||||
|
|
||||||
|
``-n auto`` detects the number of available cores automatically. The ``-m "not serial"`` skips tests that don't work well in a parallel test environment. You can run those tests separately like so::
|
||||||
|
|
||||||
|
pytest -m "serial"
|
||||||
|
|
||||||
|
.. _contributing_using_fixtures:
|
||||||
|
|
||||||
|
Using fixtures
|
||||||
|
--------------
|
||||||
|
|
||||||
To run Datasette itself, type ``datasette``.
|
To run Datasette itself, type ``datasette``.
|
||||||
|
|
||||||
You're going to need at least one SQLite database. A quick way to get started is to use the fixtures database that Datasette uses for its own tests.
|
You're going to need at least one SQLite database. A quick way to get started is to use the fixtures database that Datasette uses for its own tests.
|
||||||
|
|
|
||||||
|
|
@ -6,3 +6,5 @@ filterwarnings=
|
||||||
ignore:Using or importing the ABCs::bs4.element
|
ignore:Using or importing the ABCs::bs4.element
|
||||||
# Python 3.7 PendingDeprecationWarning: Task.current_task()
|
# Python 3.7 PendingDeprecationWarning: Task.current_task()
|
||||||
ignore:.*current_task.*:PendingDeprecationWarning
|
ignore:.*current_task.*:PendingDeprecationWarning
|
||||||
|
markers =
|
||||||
|
serial: tests to avoid using with pytest-xdist
|
||||||
|
|
|
||||||
1
setup.py
1
setup.py
|
|
@ -70,6 +70,7 @@ setup(
|
||||||
"docs": ["sphinx_rtd_theme", "sphinx-autobuild"],
|
"docs": ["sphinx_rtd_theme", "sphinx-autobuild"],
|
||||||
"test": [
|
"test": [
|
||||||
"pytest>=5.2.2,<6.3.0",
|
"pytest>=5.2.2,<6.3.0",
|
||||||
|
"pytest-xdist>=2.2.1,<2.3",
|
||||||
"pytest-asyncio>=0.10,<0.15",
|
"pytest-asyncio>=0.10,<0.15",
|
||||||
"beautifulsoup4>=4.8.1,<4.10.0",
|
"beautifulsoup4>=4.8.1,<4.10.0",
|
||||||
"black==20.8b1",
|
"black==20.8b1",
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
import httpx
|
import httpx
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.serial
|
||||||
def test_serve_localhost_http(ds_localhost_http_server):
|
def test_serve_localhost_http(ds_localhost_http_server):
|
||||||
response = httpx.get("http://localhost:8041/_memory.json")
|
response = httpx.get("http://localhost:8041/_memory.json")
|
||||||
assert {
|
assert {
|
||||||
|
|
@ -10,6 +12,7 @@ def test_serve_localhost_http(ds_localhost_http_server):
|
||||||
}.items() <= response.json().items()
|
}.items() <= response.json().items()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.serial
|
||||||
def test_serve_localhost_https(ds_localhost_https_server):
|
def test_serve_localhost_https(ds_localhost_https_server):
|
||||||
_, client_cert = ds_localhost_https_server
|
_, client_cert = ds_localhost_https_server
|
||||||
response = httpx.get("https://localhost:8042/_memory.json", verify=client_cert)
|
response = httpx.get("https://localhost:8042/_memory.json", verify=client_cert)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue