Тестирование лучшей практики скриптов битов пакета python

myproject/
    bin/
        myscript
    mypackage/
        __init__.py
        core.py
        tests/
            __init__.py
            test_mypackage.py
    setup.py

Каков наилучший способ протестировать myscript script?

Из исследования SO, кажется, единственный ответ, который я нашел, - это написать тест в тестах test_myscript и использовать что-то вроде

import subprocess

process = subprocess.Popen('myscript arg1 arg2')
print process.communicate()

в моем тестовом примере, чтобы запустить script, а затем проверить результаты. Есть ли способ лучше? Или любые другие предложения по-разному? И должен ли я поместить тестовый набор в bin/tests или в mypackage/tests?

Ответ 1

Я не верю, что есть "лучшие практики" о том, куда положить tests. Посмотрите, сколько существует разных мнений: Где проходят модульные тесты Python?

У меня был бы один и единственный каталог tests на верхнем уровне, рядом с вашими каталогами bin и mypackage - как, например, django имеет.

Для запуска bin script и получения результатов вы можете использовать:

  • subprocess (как вы уже упоминали), но используя check_output:

    import subprocess
    output = subprocess.check_output("cat /etc/services", shell=True)
    
  • модуль сценариев

    • был создан для test command-line scripts - выглядит как инструмент для работы
    • также см. статья
  • cli и cli.test модуль (никогда не использовались лично)

Надеюсь, что это поможет.