Weil es den Auftrag gab, gleichzeitig automatisierte Tests in der Python-Anfängerausbildung zu unterrichten Wir untersuchten, ob automatische Tests an Programmen durchgeführt werden können, bevor wir uns mit Funktionen vertraut machen.
Ich habe noch nicht entschieden, was ich für den Git-Server verwenden soll, daher habe ich das automatisierte Testverfahren bei GitLab überprüft, das ich kürzlich verwendet habe.
chapter_01_1.py
height = input('Höhe(m) ')
width = input('Unterseite(m) ')
area = float(height) * float(width) / 2
print('Die Gegend ist'+str(area)+'Quadratmeter')
Da es sich um ein Programm handelt, das Standardeingaben akzeptiert, wird der Inhalt der Testeingabedatei mithilfe der Shell-Umleitung ausgefüllt.
tests/test_chapter01.py
def test_chapter01_1(bash):
assert bash.run_script_inline(['python3 chapter_01_1.py < tests/stdin_chapter_01_1.txt']) == 'Höhe(m)Unterseite(m)Fläche ist 1.2 Quadratmeter'
Nach dem Eingabewert ist ein Zeilenumbruch erforderlich.
tests/stdin_chapter_01_1.txt
1.2
2.0
Obwohl es im Testskript als Bash geschrieben ist, funktioniert es natürlich mit zsh.
% pytest
============================================================ test session starts ============================================================
platform darwin -- Python 3.7.3, pytest-5.0.1, py-1.8.0, pluggy-0.12.0
rootdir: /Users/takaiayumu/python-basic
plugins: openfiles-0.3.2, arraydiff-0.3, shell-0.2.3, doctestplus-0.3.0, remotedata-0.3.1, cov-2.8.1
collected 1 items
tests/test_chapter01.py .. [100%]
========================================================= 1 passed in 1.45 seconds ==========================================================
Ich verwende ein Python3-Image, aber die pytest-Shell funktioniert nicht unter Alpine Linux, da bash nicht standardmäßig installiert ist. Daher ist es notwendig, bash mit dem Befehl apk zu installieren.
.gitlab-ci.yml
image: python:3-alpine
before_script:
- apk update
- apk add bash
- pip install pytest pytest-cov pytest-shell
test:
script:
- pytest --cov=./tests
Recommended Posts