tests: constrain http pytest to tests/http directory
Running the http pytest had to be done from tests directory or above, because the repeat argument fixture was defined in tests/conftest.py. However, the repeat argument is not needed because its functionality can be provided by pytest-repeat as documented in the test's README.md. So, removed the pytest_addoption function for the repeat argument and the pytest_report_header function is moved to tests/http/conftest.py. TODO: Remove repeat argument from all tests. As a stopgap, a one-element list is defined for it for now. Closes #14611
This commit is contained in:
parent
aeb1a281ca
commit
a4152864f8
2
.github/workflows/http3-linux.yml
vendored
2
.github/workflows/http3-linux.yml
vendored
@ -470,7 +470,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
TFLAGS: "${{ matrix.build.tflags }}"
|
TFLAGS: "${{ matrix.build.tflags }}"
|
||||||
|
|
||||||
- run: pytest -v tests
|
- run: pytest -v tests/http
|
||||||
name: 'run pytest'
|
name: 'run pytest'
|
||||||
env:
|
env:
|
||||||
TFLAGS: "${{ matrix.build.tflags }}"
|
TFLAGS: "${{ matrix.build.tflags }}"
|
||||||
|
|||||||
4
.github/workflows/linux.yml
vendored
4
.github/workflows/linux.yml
vendored
@ -487,10 +487,10 @@ jobs:
|
|||||||
make V=1 VERBOSE=1 test-ci
|
make V=1 VERBOSE=1 test-ci
|
||||||
|
|
||||||
- if: contains(matrix.build.install_steps, 'pytest')
|
- if: contains(matrix.build.install_steps, 'pytest')
|
||||||
# run for `tests` directory, so pytest does not pick up any other
|
# run for `tests/http` directory, so pytest does not pick up any other
|
||||||
# packages we might have built here
|
# packages we might have built here
|
||||||
run:
|
run:
|
||||||
pytest -v tests
|
pytest -v tests/http
|
||||||
name: 'run pytest'
|
name: 'run pytest'
|
||||||
env:
|
env:
|
||||||
TFLAGS: "${{ matrix.build.tflags }}"
|
TFLAGS: "${{ matrix.build.tflags }}"
|
||||||
|
|||||||
@ -59,7 +59,6 @@ EXTRA_DIST = \
|
|||||||
README.md \
|
README.md \
|
||||||
appveyor.pm \
|
appveyor.pm \
|
||||||
azure.pm \
|
azure.pm \
|
||||||
conftest.py \
|
|
||||||
devtest.pl \
|
devtest.pl \
|
||||||
dictserver.py \
|
dictserver.py \
|
||||||
directories.pm \
|
directories.pm \
|
||||||
|
|||||||
@ -1,64 +0,0 @@
|
|||||||
#***************************************************************************
|
|
||||||
# _ _ ____ _
|
|
||||||
# Project ___| | | | _ \| |
|
|
||||||
# / __| | | | |_) | |
|
|
||||||
# | (__| |_| | _ <| |___
|
|
||||||
# \___|\___/|_| \_\_____|
|
|
||||||
#
|
|
||||||
# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
||||||
#
|
|
||||||
# This software is licensed as described in the file COPYING, which
|
|
||||||
# you should have received as part of this distribution. The terms
|
|
||||||
# are also available at https://curl.se/docs/copyright.html.
|
|
||||||
#
|
|
||||||
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
||||||
# copies of the Software, and permit persons to whom the Software is
|
|
||||||
# furnished to do so, under the terms of the COPYING file.
|
|
||||||
#
|
|
||||||
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
# KIND, either express or implied.
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: curl
|
|
||||||
#
|
|
||||||
###########################################################################
|
|
||||||
#
|
|
||||||
import sys, os
|
|
||||||
|
|
||||||
sys.path.append(os.path.join(os.path.dirname(__file__), 'http'))
|
|
||||||
|
|
||||||
from testenv import Env
|
|
||||||
|
|
||||||
|
|
||||||
def pytest_report_header(config):
|
|
||||||
# Env inits its base properties only once, we can report them here
|
|
||||||
env = Env()
|
|
||||||
report = [
|
|
||||||
f'Testing curl {env.curl_version()}',
|
|
||||||
f' httpd: {env.httpd_version()}, http:{env.http_port} https:{env.https_port}',
|
|
||||||
f' httpd-proxy: {env.httpd_version()}, http:{env.proxy_port} https:{env.proxys_port}'
|
|
||||||
]
|
|
||||||
if env.have_h3():
|
|
||||||
report.extend([
|
|
||||||
f' nghttpx: {env.nghttpx_version()}, h3:{env.https_port}'
|
|
||||||
])
|
|
||||||
if env.has_caddy():
|
|
||||||
report.extend([
|
|
||||||
f' Caddy: {env.caddy_version()}, http:{env.caddy_http_port} https:{env.caddy_https_port}'
|
|
||||||
])
|
|
||||||
if env.has_vsftpd():
|
|
||||||
report.extend([
|
|
||||||
f' VsFTPD: {env.vsftpd_version()}, ftp:{env.ftp_port}, ftps:{env.ftps_port}'
|
|
||||||
])
|
|
||||||
return '\n'.join(report)
|
|
||||||
|
|
||||||
|
|
||||||
def pytest_addoption(parser):
|
|
||||||
parser.addoption("--repeat", action="store", type=int, default=1,
|
|
||||||
help='Number of times to repeat each test')
|
|
||||||
|
|
||||||
|
|
||||||
def pytest_generate_tests(metafunc):
|
|
||||||
if "repeat" in metafunc.fixturenames:
|
|
||||||
count = int(metafunc.config.getoption("repeat"))
|
|
||||||
metafunc.fixturenames.append('tmp_ct')
|
|
||||||
metafunc.parametrize('repeat', range(count))
|
|
||||||
@ -13,7 +13,7 @@ This is an additional test suite using a combination of Apache httpd and nghttpx
|
|||||||
The test cases and necessary files are in `tests/http`. You can invoke `pytest` from there or from the top level curl checkout and it will find all tests.
|
The test cases and necessary files are in `tests/http`. You can invoke `pytest` from there or from the top level curl checkout and it will find all tests.
|
||||||
|
|
||||||
```
|
```
|
||||||
curl> pytest
|
curl> pytest test/http
|
||||||
platform darwin -- Python 3.9.15, pytest-6.2.0, py-1.10.0, pluggy-0.13.1
|
platform darwin -- Python 3.9.15, pytest-6.2.0, py-1.10.0, pluggy-0.13.1
|
||||||
rootdir: /Users/sei/projects/curl
|
rootdir: /Users/sei/projects/curl
|
||||||
collected 5 items
|
collected 5 items
|
||||||
@ -24,7 +24,7 @@ tests/http/test_01_basic.py .....
|
|||||||
Pytest takes arguments. `-v` increases its verbosity and can be used several times. `-k <expr>` can be used to run only matching test cases. The `expr` can be something resembling a python test or just a string that needs to match test cases in their names.
|
Pytest takes arguments. `-v` increases its verbosity and can be used several times. `-k <expr>` can be used to run only matching test cases. The `expr` can be something resembling a python test or just a string that needs to match test cases in their names.
|
||||||
|
|
||||||
```
|
```
|
||||||
curl> pytest -vv -k test_01_02
|
curl/tests/http> pytest -vv -k test_01_02
|
||||||
```
|
```
|
||||||
|
|
||||||
runs all test cases that have `test_01_02` in their name. This does not have to be the start of the name.
|
runs all test cases that have `test_01_02` in their name. This does not have to be the start of the name.
|
||||||
@ -54,10 +54,10 @@ Via curl's `configure` script you may specify:
|
|||||||
Several test cases are parameterized, for example with the HTTP version to use. If you want to run a test with a particular protocol only, use a command line like:
|
Several test cases are parameterized, for example with the HTTP version to use. If you want to run a test with a particular protocol only, use a command line like:
|
||||||
|
|
||||||
```
|
```
|
||||||
curl> pytest -k "test_02_06 and h2"
|
curl/tests/http> pytest -k "test_02_06 and h2"
|
||||||
```
|
```
|
||||||
|
|
||||||
Several test cases can be repeated, they all have the `repeat` parameter (install `pytest-repeat` module). To make this work, you have to start `pytest` in the test directory itself (for some unknown reason). Like in:
|
Test cases can be repeated, with the `pytest-repeat` module (`pip install pytest-repeat`). Like in:
|
||||||
|
|
||||||
```
|
```
|
||||||
curl/tests/http> pytest -k "test_02_06 and h2" --count=100
|
curl/tests/http> pytest -k "test_02_06 and h2" --count=100
|
||||||
|
|||||||
@ -33,6 +33,33 @@ sys.path.append(os.path.join(os.path.dirname(__file__), '.'))
|
|||||||
|
|
||||||
from testenv import Env, Nghttpx, Httpd, NghttpxQuic, NghttpxFwd
|
from testenv import Env, Nghttpx, Httpd, NghttpxQuic, NghttpxFwd
|
||||||
|
|
||||||
|
def pytest_report_header(config):
|
||||||
|
# Env inits its base properties only once, we can report them here
|
||||||
|
env = Env()
|
||||||
|
report = [
|
||||||
|
f'Testing curl {env.curl_version()}',
|
||||||
|
f' httpd: {env.httpd_version()}, http:{env.http_port} https:{env.https_port}',
|
||||||
|
f' httpd-proxy: {env.httpd_version()}, http:{env.proxy_port} https:{env.proxys_port}'
|
||||||
|
]
|
||||||
|
if env.have_h3():
|
||||||
|
report.extend([
|
||||||
|
f' nghttpx: {env.nghttpx_version()}, h3:{env.https_port}'
|
||||||
|
])
|
||||||
|
if env.has_caddy():
|
||||||
|
report.extend([
|
||||||
|
f' Caddy: {env.caddy_version()}, http:{env.caddy_http_port} https:{env.caddy_https_port}'
|
||||||
|
])
|
||||||
|
if env.has_vsftpd():
|
||||||
|
report.extend([
|
||||||
|
f' VsFTPD: {env.vsftpd_version()}, ftp:{env.ftp_port}, ftps:{env.ftps_port}'
|
||||||
|
])
|
||||||
|
return '\n'.join(report)
|
||||||
|
|
||||||
|
# TODO: remove this and repeat argument everywhere, pytest-repeat can be used to repeat tests
|
||||||
|
def pytest_generate_tests(metafunc):
|
||||||
|
if "repeat" in metafunc.fixturenames:
|
||||||
|
metafunc.parametrize('repeat', [0])
|
||||||
|
|
||||||
@pytest.fixture(scope="package")
|
@pytest.fixture(scope="package")
|
||||||
def env(pytestconfig) -> Env:
|
def env(pytestconfig) -> Env:
|
||||||
env = Env(pytestconfig=pytestconfig)
|
env = Env(pytestconfig=pytestconfig)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user