Testarea pachetului în medii diferite

Dezvoltarea pachetelor Python

James Fulton

Climate informatics researcher

Testarea mai multor versiuni Python

Acest setup.py permite orice versiune Python începând cu 2.7.

from setuptools import setup, find_packages

setup(
    ...
    python_requires='>=2.7',
)

Pentru a testa aceste versiuni Python, trebuie să:

  • Instalați toate aceste versiuni Python
  • Instalați pachetul și dependențele în fiecare versiune Python
  • Rulați pytest
Dezvoltarea pachetelor Python

Testarea mai multor versiuni Python

Acest setup.py permite orice versiune Python începând cu 2.7.

from setuptools import setup, find_packages

setup(
    ...
    python_requires='>=2.7',
)

Pentru a testa aceste versiuni Python, trebuie să:

  • Instalați toate aceste versiuni Python
  • Rulați tox
Dezvoltarea pachetelor Python

Ce este tox?

  • Conceput pentru a rula teste cu mai multe versiuni Python
Dezvoltarea pachetelor Python

Configurarea tox

Fișier de configurare - tox.ini

mysklearn/
|-- mysklearn
|   |-- ...
|-- tests
|   |-- ...
|-- setup.py
|-- LICENSE
|-- MANIFEST.in
|-- tox.ini   <--- configuration file
Dezvoltarea pachetelor Python

Configurarea tox

Fișier de configurare - tox.ini

[tox]

envlist = py27, py35, py36, py37
[testenv]
deps = pytest
commands = pytest
echo "run more commands" ...
  • Titlurile de secțiune sunt încadrate de paranteze pătrate [...].
  • Pentru a testa versiunea Python X.Y, adăugați pyXY la envlist.
  • Versiunile Python testate trebuie să fie deja instalate.
  • Parametrul commands listează comenzile de terminal pe care le va rula tox.
  • Lista commands poate conține orice comenzi de terminal, precum ls, cd, echo etc.
Dezvoltarea pachetelor Python

Rularea tox

tox
mysklearn/    <-- navigate to here
|-- mysklearn
|   |-- ...
|-- tests
|   |-- ...
|-- setup.py
|-- LICENSE
|-- MANIFEST.in
|-- tox.ini
Dezvoltarea pachetelor Python

Rezultatul tox

py27 create: /mypackages/mysklearn/.tox/py27
py27 installdeps: pytest
py27 inst: /mypackages/mysklearn/.tox/.tmp/package/1/mysklearn-0.1.0.zip
py27 installed: mysklearn==0.1.0,numpy==1.16.6,pandas==0.24.2,pytest==4.6.11,...
py27 run-test-pre: PYTHONHASHSEED='2837498672'
...
Dezvoltarea pachetelor Python

Rezultatul tox

py27 run-test: commands[0] | pytest
======================== test session starts ========================
platform linux2 -- Python 2.7.17, ...
rootdir: /home/workspace/mypackages/mysklearn
collected 6 items                         

tests/preprocessing/test_normalize.py ...                     [ 50%]
tests/preprocessing/test_standardize.py ...                   [100%]

========================= 6 passed in 0.23s =========================
Dezvoltarea pachetelor Python

Rezultatul tox

...
__________________________ summary __________________________
  py27: commands succeeded
  py35: commands succeeded
  py36: commands succeeded
  py37: commands succeeded
Dezvoltarea pachetelor Python

Rezultatul tox

...
__________________________ summary __________________________
  py27: commands succeeded
  py35: commands succeeded
  py36: commands succeeded
ERROR:   py37: commands failed
Dezvoltarea pachetelor Python

Să exersăm!

Dezvoltarea pachetelor Python

Preparing Video For Download...