Рецепт битобейка Yocto для пользовательских Python скриптов и PyTest - PullRequest
1 голос
/ 25 марта 2020

У меня есть пользовательское приложение Python Flask, и я создаю его для своей встроенной цели, используя Yocto и Bitbake. У меня также есть набор тестовых примеров, которые я запускаю на своем компьютере сборки с приложением, использующим PyTest. Я бы хотел, чтобы сборка провалилась, если тесты не пройдены.

Я ищу способ выполнения этих тестов Yocto как часть моего рецепта. Пока что поиск Google (необычно) оказался пустым.

Вот то, что я реализовал до сих пор - это работает, но для этого требуется система Python3 и различные установки pip. В идеале требования должны быть встроены в Yocto, но только для хоста, а не для цели. Я еще не понял, как это сделать.

# Run the pytest test cases against the app code after it is installed
python do_run_pytest_testsuite(){

    # Change to the testing directory
    import os
    testDir = "%s"%(d.getVar('WORKDIR', True))
    os.chdir(testDir)

    # Run pytest execute the test suite
    from subprocess import Popen, PIPE
    with open("%s/TestOutput.txt"%(testDir), "w") as testReportFile:
        with Popen(['/usr/bin/python3','-m','pytest','-v','tests/test_app.py'], stdout=PIPE, bufsize=1, universal_newlines=True) as proc:
            for line in proc.stdout:
                testReportFile.write(line)

    # Get the return code
    if not proc.returncode == 0:

        # Force Failure
        bb.fatal("Test Cases Failed! ( %s )"%(testDir))

}
addtask run_pytest_testsuite before do_install after do_configure

Как я могу выполнить sh это автономное окружение Yocto и не устанавливать никаких зависимостей PyTest для целевой платы.

1 Ответ

1 голос
/ 02 апреля 2020

Сначала я бы взглянул на poky / meta / recipes-devtools / python, чтобы понять, какие рецепты python доступны (помните, над каким выпуском вы работаете).

Затем вы можете добавить зависимость от собственной версии рецептов, например DEPENDS = "python3-native python3-yaml-native" (или любых пакетов, которые вам нужны для запуска приложения python)

Затем добавьте задачу, которая запускает ваше приложение

do_run_testsuite(){
  python3 ${WORKDIR}/test/test_app.py
}
addtask do_run_testsuite before do_install after do_configure

Возможно, также проверьте слой openembedded python

Если вы не найдете все необходимые зависимости, добавить пакет pip относительно просто. на свой слой (просто посмотрите на рецепты в упомянутых слоях).

...