Use pytest for testing

This commit is contained in:
Oleg Kalachev
2026-08-28 19:18:58 +03:00
parent e1209a0fb8
commit cc49718a60
2 changed files with 42 additions and 39 deletions
+5 -4
View File
@@ -82,15 +82,16 @@ jobs:
run: sudo apt-get install -y libsdl2-dev run: sudo apt-get install -y libsdl2-dev
- name: Build simulator - name: Build simulator
run: make build_simulator run: make build_simulator
- name: Install pyflix requirements - name: Install Python requirements
run: sudo apt install -y python3-pip && pip3 install -r tools/requirements.txt run: sudo apt install -y python3-pip && pip3 install -r tools/requirements.txt && pip3 install pytest
- name: Run simulator - name: Run simulator and tests
env: env:
GAZEBO_MODEL_PATH: ${{ github.workspace }}/gazebo/models GAZEBO_MODEL_PATH: ${{ github.workspace }}/gazebo/models
GAZEBO_PLUGIN_PATH: ${{ github.workspace }}/gazebo/build GAZEBO_PLUGIN_PATH: ${{ github.workspace }}/gazebo/build
GAZEBO_MODEL_DATABASE_URI: '' # disable downloading models
run: | run: |
gzserver --verbose gazebo/flix.world & gzserver --verbose gazebo/flix.world &
timeout -k 10s 120s tools/test.py pytest --capture=no --verbose tools/test.py
- uses: actions/upload-artifact@v7 - uses: actions/upload-artifact@v7
with: with:
name: gazebo-plugin-binary name: gazebo-plugin-binary
+37 -35
View File
@@ -2,44 +2,46 @@
# Script for testing pyflix and the simulation. # Script for testing pyflix and the simulation.
from math import isclose, isnan, isfinite from pytest import approx
from math import isnan, isfinite
import time
from pyflix import Flix from pyflix import Flix
print('=== Connect...') def test():
flix = Flix() print('=== Connect...')
flix = Flix(timeout=20)
print('=== Check initial state') print('=== Check initial state')
assert flix.connected time.sleep(1) # give more time for initial state
assert flix.mode == 'STAB' assert flix.connected
assert not flix.armed assert flix.mode == 'STAB'
assert flix.landed assert not flix.armed
assert isnan(flix.voltage) assert flix.landed
assert all(isclose(r, 0) for r in flix.rates) assert isnan(flix.voltage) or flix.voltage == approx(4.2)
assert isclose(flix.attitude[0], 0) and isclose(flix.attitude[1], 0) and isclose(flix.attitude[2], 0) assert flix.rates == approx((0, 0, 0), abs=0.01)
assert isclose(flix.attitude[3], 1) assert flix.attitude == approx((1, 0, 0, 0), abs=0.01)
assert all(isclose(a, 0) for a in flix.attitude_euler) assert flix.attitude_euler == approx((0, 0, 0), abs=0.01)
assert all(m == 0 for m in flix.motors) assert all(m == 0 for m in flix.motors)
assert all(isclose(a, 0) for a in flix.acc) assert flix.acc == approx((0, 0, 9.81), abs=0.1)
assert all(isclose(g, 0) for g in flix.gyro) assert flix.gyro == approx((0, 0, 0), abs=0.01)
assert all(ch == 0 for ch in flix.channels) assert all(ch == 0 for ch in flix.channels)
print('=== Check console commands') print('=== Check console commands')
assert 'Time: ' in flix.cli('time') assert 'Time: ' in flix.cli('time')
assert 'Landed: 1' in flix.cli('imu') assert 'landed: 1' in flix.cli('imu')
print('=== Check parameters') print('=== Check parameters')
assert isfinite(flix.get_param('CTL_ATT_P_P')) assert isfinite(flix.get_param('CTL_ATT_P_P'))
flix.set_param('CTL_ATT_P_P', 10.0) flix.set_param('CTL_ATT_P_P', 10.0)
print('=== Additional checks') print('=== Additional checks')
assert flix.wait('connected') is True assert flix.wait('gyro') == approx((0, 0, 0), abs=0.01)
assert flix.wait('gyro') is not None flix.wait('armed', False)
flix.wait('armed', False) flix.wait('mode', 'STAB')
flix.wait('mode', 'STAB') flix.wait('motors', lambda motors: not any(motors))
flix.wait('motors', lambda motors: not any(motors)) flix.set_armed(True)
flix.set_armed(True) flix.wait('armed', True)
flix.wait('armed', True) flix.set_mode('ACRO')
flix.set_mode('ACRO') flix.wait('mode', 'ACRO')
flix.wait('mode', 'ACRO') flix.set_mode('AUTO')
flix.set_mode('AUTO') flix.wait('mode', 'AUTO')
flix.wait('mode', 'AUTO')