Python tox in GitHub Actions

Python tox in GitHub Actions

Wenn man mit dem Pythonprojekt tox Unittests durchführt, dann muss die Maschine, auf der die Unittests ausgeführt werden, mehrere Pythoninstallationen installiert haben. In GithHub Actions kann man die Tests auch auf verschiedenen Runnern laufen lassen, von denen jeder Runner eine andere Pythonversion installiert hat. Dazu kann man die Matrix-Strategie in GitHub verwenden. Das kann dann z.B. folgendermaßen aussehen:

name: Run python tests

on:
  push:
    branches: [ '**' ]
    paths: [ '**' ]
  pull_request:
    branches: [ '**' ]
    paths: [ '**' ]

  workflow_dispatch:
    

jobs:
  unittests:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ ubuntu-latest, windows-latest ]
        python-version: [ '3.6', '3.7', '3.8', '3.9' ]

    steps:
      - uses: actions/checkout@v2
      
      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v2
        with:
          python-version: ${{ matrix.python-version }}
      
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install tox tox-gh-actions
      
      - name: Tests with tox
        run: |
          tox

Mit der Matrixstrategie lassen wir die Tests sowohl auf den aktuellsten Linux- und Windowssystem laufen. Dabei sollen die Pythonversionen 3.6, 3.7, 3.8 und 3.9 verwendet werden. Damit tox korrekt läuft, muss noch über pip neben dem Paket tox das Paket tox-gh-actions installiert werden. Im letzten Schritt wird dann tox gestartet.

Jetzt fehlt aber noch eine Kleinigkeit. Die tox.ini muss noch für GitHub Actions angepasst werden. Folgende Zeilen müssen noch in die tox.ini rein:

[gh]
python = 
    3.6: py36
    3.7: py37
    3.8: py38
    3.9: py39

Eine komplette tox.ini könnte dann so aussehen:

[tox]
minversion = 3.8.0
envlist = py36, py37, py38, py39

[gh]
python = 
    3.6: py36
    3.7: py37
    3.8: py38
    3.9: py39

[testenv]
deps =
    -rrequirements_dev.txt
commands=
    pytest --basetemp={envtmpdir} 

Mit den eingefügten Zeilen wird eine Verbindung zwischen GitHub und tox geschaffen. Normalerweise erwartet tox verschiedene Pythoninstallationen auf einer Maschine. Doch durch die eingefügten Zeilen wird tox gesagt, dass z.B. das Laufen der Unittests in einem Runner mit der Pythonversion 3.6 (auf der dann aber nur Python 3.6 installiert ist) als getestet gilt für die Version 3.6.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert