Python-folyamatok testreszabása
Ez a cikk bemutatja, hogyan szabhatja testre a Python-alkalmazások és -kódok készítését, tesztelését, csomagolását és továbbítását az Azure Pipelinesban. Az első folyamat Pythonnal való létrehozásához tekintse meg a Python rövid útmutatóját.
A Microsoft által üzemeltetett Azure Pipelines-ügynökökkel anélkül hozhatja létre Python-alkalmazásait, hogy saját infrastruktúrát kellene beállítania. A Python-alkalmazások , többek között pip
a pythonos alkalmazások létrehozásához, teszteléséhez és futtatásához gyakran használt eszközök előre telepítve vannak.
Előfordulhat, hogy a párhuzamos feladatok ingyenes megadását kell kérnie, vagy meg kell vásárolnia egy párhuzamos feladatot a folyamatok futtatásához.
Ha Python-alkalmazásokat szeretne létrehozni az Azure Pipelines használatával, szüksége van egy saját üzemeltetésű ügynökre , amelyen telepítve van a Python. Ha telepíteni szeretné a Pythont az ügynökén, olvassa el a UsePythonVersion című témakört.
Adott Python-verzió használata
Ha a Python egy adott verzióját szeretné használni a folyamatban, adja hozzá a Python-verzió használata feladatot a azure-pipelines.yml. Az alábbi példa YAML-folyamatdefiníció a python 3.11 használatára állítja be a folyamatot.
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '3.11'
Több Python-verzió használata
Ha több Python-verziót tartalmazó folyamatot szeretne futtatni, például egy csomagot tesztelni ezeken a verziókon, definiáljon egy job
Python-verziót matrix
. Ezután állítsa be a UsePythonVersion
feladatot a matrix
változóra való hivatkozásra. Példa:
jobs:
- job: 'Test'
pool:
vmImage: 'ubuntu-latest'
strategy:
matrix:
Python38:
python.version: '3.8'
Python39:
python.version: '3.9'
Python310:
python.version: '3.10'
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '$(python.version)'
A mátrixban az egyes Python-verziót használó feladatokat is hozzáadhatja.
Python-szkriptek futtatása
Python-szkriptek adattárból való futtatásához használjon egy script
elemet, és adjon meg egy fájlnevet. Példa:
- script: python src/example.py
A Python-szkriptfeladat használatával beágyazott Python-szkripteket is futtathat.
- task: PythonScript@0
inputs:
scriptSource: 'inline'
script: |
print('Hello world 1')
print('Hello world 2')
A szkript végrehajtásának paraméterezéséhez használja a PythonScript
feladatot értékekkel arguments
, hogy argumentumokat adjon át a futó folyamatnak. Az argumentumok elemzéséhez használhatja sys.argv
vagy a kifinomultabb argparse
kódtárat.
- task: PythonScript@0
inputs:
scriptSource: inline
script: |
import sys
print ('Executing script file is:', str(sys.argv[0]))
print ('The arguments are:', str(sys.argv))
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--world", help="Provide the name of the world to greet.")
args = parser.parse_args()
print ('Hello ', args.world)
arguments: --world Venus
Függőségek telepítése
Szkriptek használatával telepíthet adott PyPI-csomagokat a következővel pip
: . Az alábbi példa telepíti vagy frissíti a csomagokat pip
és wheel
a setuptools
csomagokat.
- script: python -m pip install --upgrade pip setuptools wheel
displayName: 'Install tools'
Telepítési követelmények
A frissítés pip
és a barátok frissítése után egy tipikus következő lépés a függőségek telepítése requirements.txt.
- script: pip install -r requirements.txt
displayName: 'Install requirements'
Tesztek futtatása
Szkriptekkel különböző teszteket telepíthet és futtathat a folyamatban.
Szösztesztek futtatása a flake8 használatával
A következő YAML-kód telepíti vagy frissíti flake8
, és lint tesztek futtatására használja.
- script: |
python -m pip install flake8
flake8 .
displayName: 'Run lint tests'
Teszt pytesttel és lefedettségi metrikák gyűjtése pytest-cov használatával
Az alábbi YAML-kód telepíti és pytest-cov
futtatja a teszteket, a teszteredményeket pytest
JUnit formátumban adja ki, és a kódlefedettségi eredményeket Cobertura XML formátumban adja ki.
- script: |
pip install pytest pytest-azurepipelines
pip install pytest-cov
pytest --doctest-modules --junitxml=junit/test-results.xml --cov=. --cov-report=xml
displayName: 'pytest'
Tesztek futtatása a Tox használatával
Az Azure Pipelines párhuzamos Tox-tesztfeladatokat futtathat a munka felosztásához. Fejlesztői számítógépen sorozatban kell futtatnia a tesztkörnyezeteket. Az alábbi példa a Python bármelyik verziójának futtatását használja tox -e py
az aktuális feladathoz.
- job:
pool:
vmImage: 'ubuntu-latest'
strategy:
matrix:
Python38:
python.version: '3.8'
Python39:
python.version: '3.9'
Python310:
python.version: '3.10'
steps:
- task: UsePythonVersion@0
displayName: 'Use Python $(python.version)'
inputs:
versionSpec: '$(python.version)'
- script: pip install tox
displayName: 'Install Tox'
- script: tox -e py
displayName: 'Run Tox'
Teszteredmények közzététele
Adja hozzá a Teszteredmények közzététele feladatot a JUnit vagy az xUnit teszteredmények kiszolgálón való közzétételéhez.
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testResultsFiles: '**/test-*.xml'
testRunTitle: 'Publish test results for Python $(python.version)'
Kódlefedettségi eredmények közzététele
Adja hozzá a Kódlefedettségi eredmények közzététele feladatot a kódlefedettségi eredmények kiszolgálón való közzétételéhez. A lefedettségi metrikákat a build összegzésében tekintheti meg, és további elemzés céljából HTML-jelentéseket tölthet le.
- task: PublishCodeCoverageResults@2
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml'
Kód csomagolása és kézbesítése
A hitelesítéshez twine
használja a Python twine upload authentication feladatot a hitelesítési hitelesítő adatok környezeti változóban való PYPIRC_PATH
tárolásához.
- task: TwineAuthenticate@0
inputs:
artifactFeed: '<Azure Artifacts feed name>'
pythonUploadServiceConnection: '<twine service connection from external organization>'
Ezután adjon hozzá egy egyéni szkriptet , amely a csomagok közzétételére használja twine
.
- script: |
twine upload -r "<feed or service connection name>" --config-file $(PYPIRC_PATH) <package path/files>
Az Azure Pipelines használatával is létrehozhat egy lemezképet a Python-alkalmazáshoz, és leküldheti azt egy tárolóregisztrációs adatbázisba.