Test C Code using Python/pytest
Project description
CPYTEST
CPYTEST is a python package that allows you to write unit tests for your C code. It uses cffi to generate python bindings for C code, so that you can use the full pytest framework for testing your C code.
Installation
t.b.d.
Runing the Example
Dependencies
pip install poetry pytest
sudo apt install gcovr
sudo apt install lcov
Build and Run Example Test
Using Poetry
poetry install
poetry run pip install pycparser==2.21
poetry run python3 -m cpytest example/test/cpytest.yaml
poetry run pytest example/test/test_example.py
Using virtualenv
virtualenv .venv
source .venv/bin/activate
poetry install
poetry run pip install pycparser==2.21
python3 -m cpytest example/test/cpytest.yaml
pytest example/test/test_example.py
Generate Coverage
lcov --capture --directory example/src --base-directory example/test/build --output-file coverage.info --rc lcov_branch_coverage=1 --no-external
genhtml coverage.info --output-directory coverage_report --rc genhtml_branch_coverage=1
ls coverage_report/index.html
Limitations
pycparser / pycparserext version conflict
pycparserext requires pycparser==2.20, but we need pycparser==2.21 (for #pragma support). poetry doesn't solve this conflict for us, but we can manually install pycparser=2.21 using poetry: poetry run pip install pycparser==2.21. The corresponding pip install error that is shown can be ignored.
#pragma vs. __attribute__((packed)) support
pycparser doesn't support __attribute__((packed)) on structs, but it supports #pragma pack. We need to use #pragma pack in order to the correct python code for packed structs.
__attribute__ limitations of pycparserext
pycparserext has only limited support for GCC __attribute__ extensions. To avoid problems, we run a postprocessor after the preprocessor, which filters out all __attribute__ extensions.
Development
Run QA
tox is used to run all QA tools at once.
tox
Docker
Run the Example
cd docker
docker-compose up --build test-example-project
docker-compose down
Run the interactive docker shell
docker-compose up --build -d shell
docker-compose exec shell bash
docker-compose down
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.