tets: make test documentation more user-friendly

Put the instructions to run tests right at the top of tests/README.md.

Give instructions to read the runtests.1 man page for information
about flags. Delete redundant copy of the flags documentation in the
README.

Add a mention in README.md of the important parallelism flag, to make
test runs go much faster.

Move documentation of output line format into the runtests.1 man page,
and update it with missing flags.

Fix the order of two flags in the man page.

Closes #12193
This commit is contained in:
Jacob Hoffman-Andrews 2023-10-24 14:08:12 -07:00 committed by Daniel Stenberg
parent 2100d9fde2
commit 5ecbe4df22
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2
3 changed files with 70 additions and 42 deletions

View File

@ -8,6 +8,41 @@ SPDX-License-Identifier: curl
# Running
See the "Requires to run" section for prerequisites.
In the root of the curl repository:
./configure && make && make test
To run a specific set of tests (e.g. 303 and 410):
make test TFLAGS="303 410"
To run the tests faster, pass the -j (parallelism) flag:
make test TFLAGS="-j10"
"make test" builds the test suite support code and invokes the 'runtests.pl'
perl script to run all the tests. The value of `TFLAGS` is passed
directly to 'runtests.pl'.
When you run tests via make, the flags `-a` and `-s` are passed, meaning
to continue running tests even after one fails, and to emit short output.
If you'd like to not use those flags, you can run 'runtests.pl' directly.
You must `chdir` into the tests directory, then you can run it like so:
./runtests.pl 303 410
You must have run `make test` at least once first to build the support code.
To see what flags are available for runtests.pl, and what output it emits, run:
man ./tests/runtests.1
After a test fails, examine the tests/log directory for stdout, stderr, and
output from the servers used in the test.
## Requires to run
- perl (and a unix-style shell)
@ -75,44 +110,6 @@ SPDX-License-Identifier: curl
used, set the environment variable `NGHTTPX`. The default can also be
changed by specifying `--with-test-nghttpx=<path>` as argument to `configure`.
### Run
`./configure && make && make test`. This builds the test suite support code
and invokes the 'runtests.pl' perl script to run all the tests. Edit the top
variables of that script in case you have some specific needs, or run the
script manually (after the support code has been built).
The script breaks on the first test that doesn't do OK. Use `-a` to prevent
the script from aborting on the first error. Run the script with `-v` for
more verbose output. Use `-d` to run the test servers with debug output
enabled as well. Specifying `-k` keeps all the log files generated by the
test intact.
Use `-s` for shorter output, or pass test numbers to run specific tests only
(like `./runtests.pl 3 4` to test 3 and 4 only). It also supports test case
ranges with 'to', as in `./runtests.pl 3 to 9` which runs the seven tests
from 3 to 9. Any test numbers starting with ! are disabled, as are any test
numbers found in the files `data/DISABLED` or `data/DISABLED.local` (one per
line). The latter is meant for local temporary disables and will be ignored
by git.
Test cases mentioned in `DISABLED` can still be run if `-f` is provided.
When `-s` is not present, each successful test will display on one line the
test number and description and on the next line a set of flags, the test
result, current test sequence, total number of tests to be run and an
estimated amount of time to complete the test run. The flags consist of
these letters describing what is checked in this test:
s stdout
d data
u upload
p protocol
o output
e exit code
m memory
v valgrind
### Shell startup scripts
Tests which use the ssh test server, SCP/SFTP/SOCKS tests, might be badly

View File

@ -53,6 +53,35 @@ this keyword. Remember that the exclamation marks and spaces will need to be
quoted somehow when entered at many command shells.
Prefix a keyword with a tilde (~) to still run it, but ignore the results.
.SH "OUTPUT"
When running without -s (short output), for instance when running runtests.pl
directly rather than via make, each test will emits a pair of lines like this:
Test 0045...[simple HTTP Location: without protocol in initial URL]
--pd---e-v- OK (45 out of 1427, remaining: 16:08, took 6.188s, duration: 00:31)
the first line contains the test number and a description. On the second line,
the characters at the beginning are flags indicating which aspects of curl's
behavior were checked by the test:
s stdout
r stderr
p protocol
d data
u upload
P proxy
o output
e exit code
m memory
v valgrind
E the test was run event-based
The remainder of the second line contains the test result, current test sequence,
total number of tests to be run and an estimated amount of time to complete the
test run.
.SH OPTIONS
.IP "-a"
Continue running the rest of the test cases even if one test fails. By
@ -91,9 +120,6 @@ start.
Run the given test(s) with gdb as a windowed application.
.IP "-h, --help"
Displays a help text about this program's command line options.
.IP "-k"
Keep output and log files in log/ after a test run, even if no error was
detected. Useful for debugging.
.IP "-j[num]"
Spawn num processes to run tests. This defaults to 0 to run tests serially
within a single process. Using a number greater than one allows multiple tests
@ -101,6 +127,9 @@ to run in parallel, speeding up a test run. The optimum number is dependent on
the system and set of tests to run, but 7*number of CPU cores is a good figure
to start with, or 1.3*number of CPU cores if Valgrind is in use. Enabling
parallel tests is not recommended in conjunction with the \-g option.
.IP "-k"
Keep output and log files in log/ after a test run, even if no error was
detected. Useful for debugging.
.IP "-L <file>"
Load and execute the specified file which should contain perl code.
This option allows one to change \fIruntests.pl\fP behaviour by overwriting

View File

@ -23,6 +23,8 @@
#
###########################################################################
# For documentation, run `man ./runtests.1` and see README.md.
# Experimental hooks are available to run tests remotely on machines that
# are able to run curl but are unable to run the test harness.
# The following sections need to be modified:
@ -1503,7 +1505,7 @@ sub singletest_check {
}
else {
$ok .= "-"; # protocol not checked
$ok .= "-"; # proxy not checked
}
my $outputok;