Chapter 16. Wireshark Tests

Table of Contents

16.1. Quick Start
16.2. Test suite structure
16.2.1. Test Coverage And Availability
16.2.2. Suites, Cases, and Tests
16.2.3. pytest fixtures
16.3. Listing And Running Tests
16.4. Adding Or Modifying Tests
16.5. External Tests
16.5.1. Custom Fixtures

The Wireshark sources include a collection of Python scripts that test the features of Wireshark, TShark, Dumpcap, and other programs that accompany Wireshark. These are located in the test directory of the Wireshark source tree.

The command line options of Wireshark and its companion command line tools are numerous. These tests help to ensure that we don’t introduce bugs as Wireshark grows and evolves.

16.1. Quick Start

The recommended steps to prepare for and run tests with a UN*X toolchain:

  • Install two Python packages, pytest: pip install pytest pytest-xdist
  • Build programs (“wireshark”, “tshark”, etc.): ninja
  • Build additional programs for the “unittests” suite: ninja test-programs
  • Run tests in the build directory: pytest

Replace ninja by make as needed.

If building with Microsoft Visual Studio the analogous steps are:

  • Install pytest Python packages: python -m pip install pytest pytest-xdist
  • Build programs: msbuild /m /p:Configuration=RelWithDebInfo Wireshark.slnx
  • Build test-programs: msbuild /m /p:Configuration=RelWithDebInfo test-programs.vcxproj
  • Run tests: python -m pytest
[Tip]Tip

Depending on your PATH, you may need to run the pytest module as a script from your Python interpreter, e.g, python -m pytest or python3 -m pytest instead of pytest.

The test suite will attempt to test as much as possible and skip tests when its dependencies are not satisfied. For example, packet capture tests require a Loopback interface and capture privileges. To avoid capture tests, pass the --disable-capture option.

List available tests with pytest --collectonly. Enable verbose output with pytest --verbose. For more details, see Section 16.3, “Listing And Running Tests”.

You can also run the "ninja test" target instead of invoking pytest directly. This will automatically build the test programs dependency, so it may be preferred for that reason.