File: README.md

package info (click to toggle)
python-confluent-kafka 1.7.0-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, sid, trixie
  • size: 1,900 kB
  • sloc: python: 8,335; ansic: 6,065; sh: 1,203; makefile: 178
file content (126 lines) | stat: -rw-r--r-- 4,035 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# Overview

Test summary:

- `./tests/test_*` (pytest): Unit tests. These tests don't bring up any external processes.
- `./tests/schema_registry/*` (pytest): Tests related to Schema Registry that utilize a mock client and don't bring up any external processes.
- `./tests/avro/*` (pytest): Tests for the old Avro API. These tests don't bring up any external processes.
- `./tests/integration/integration_test.py`: Older integration tests, not built on pytest.
- `./tests/integration/*`, excluding `integration_test.py` (pytest): Integration tests that depend on Kafka.
- `./tests/system`: System tests.
- `./tests/soak`: Soak test.

# Running the Tests

**Note:** Unless otherwise stated, all command, file and directory references are relative to the *repo's root* directory.

A python3 env suitable for running tests:

    $ python3 -m venv venv_test
    $ source venv_test/bin/activate
    $ pip install -r test/requirements.txt
    $ python setup.py build
    $ python setup.py install

When you're finished with it:

    $ deactivate

## Unit tests

"Unit" tests are the ones directly in the `./test` directory. These tests do
not require an active Kafka cluster.

You can run them selectively like so:

    $ pytest -s -v tests/test_Producer.py

Or run them all with:

    $ pytest -s -v tests/test_*.py

Note that the -v flag enables verbose output and -s flag disables capture of stderr and stdout (so that you see it on the console).

You can also use ./tests/run.sh to run the unit tests:

    $ ./tests/run.sh unit


## Integration tests

Integration tests are currently transitioning from one framework to another.

### The Old Way

The original integration tests do not utilise `pytest` and are all specified in `./test/integration_test.py`. These tests expect a Kafka cluster and Schema Registry instances to already be running.

The easiest way to arrange for this is:

    ./tests/docker/bin/cluster_up.sh

And also:

    source ./tests/docker/.env

which sets environment variables referenced by `./tests/integration/testconf.json`.

You can then run the tests as follows:

    python ./tests/integration/integration_test.py ./tests/integration/testconf.json

Or selectively using via specifying one or more options ("modes"). You can see all of these via:

    python ./tests/integration/integration_test.py --help


### The New Way

The newer integration tests utilise `pytest` and define the `kafka_cluster` fixture (in `./tests/integration/conftest.py`) which uses [trivup](https://github.com/edenhill/trivup) to bring up a Kafka Cluster and Schema Registry instance automatically.

You can run these tests selectively like so:

    pytest -v -s ./tests/integration/consumer/test_consumer_error.py

#### Bring your own cluster

If you would like to avoid creating / destroying a cluster each time you run a
test and you have a test cluster running, you can set the BROKERS environment
variable which will automatically make the integration tests use those brokers
as the `bootstrap.servers` instead of creating a new cluster for each test
run, e.g.:

```bash

$ export BROKERS=localhost:9092
# SR_URL is optional and only required for Schema-registry tests
$ export SR_URL=http://localhost:1234/
```


#### Troubleshooting

If for some reason these tests aren't working, you can add `'debug': True` to the config property list in `./tests/integration/conftest.py` to debug the cause.

Note that the following error is benign:

```
tests/integration/consumer/test_consumer_error.py::test_consume_error [2020-12-02 12:09:15.649905] KafkaBrokerApp-2: Failed to set RLIMIT_NOFILE(9223372036854775807,9223372036854775807): current limit exceeds maximum limit
```


### Running with Tox

Tox can be used to test against various supported Python versions (py27, py36, py38):

1. You need to have tox installed:

    ```pip install tox```

2. Uncomment the following line in [tox.ini](../tox.ini)

    ```#python tests/integration/integration_test.py```

3. From top-level directory run:

    ```$ ./tests/run.sh tox```