Я пытаюсь использовать Jenkins для запуска тестов Python и создания отчетов о покрытии.
Я скомпилировал приложение, связанное с python - назовем его pythonX, - которое настраивает среду для выполнения частей этого приложения. Теперь, когда я хочу запустить тесты для некоторой части кода, я могу просто запустить
d:\my_app\sys\pythonX.exe -m pytest d:\user\repos\my_app\tests\unit
и все работает очень хорошо, потому что pythonX
знает, где все.
Для этого я использую
stage('Run tests') {
steps {
bat 'd:\\my_app\\sys\\pythonX.exe -m pytest d:\\user\\repos\\my_app\\tests\\unit'
}
}
.
Но есть проблема, этот pythonX
выполняет тесты кода, который поставляется вместе с приложением, так что уже собран и все такое. Чего я не хочу, так это запускать тесты для кода, который все еще является локальным.
pythonX
добавляет переменную окружения PYTHONPATH
для указания, где находится исходный код, но всякий раз, когда я запускаю pythonX.exe
через bat
, он меняет все, что я добавил ранее.
Сначала я попробовал использовать withEnv
вот так
stage('Run tests') {
steps {
withEnv(['PATH+PYTHONPATH=d:\\user\\repos\\my_app']){
bat 'd:\\my_app\\sys\\pythonX.exe -m pytest d:\\user\\repos\\my_app\\tests\\unit'
}
}
}
но это не помогает.
Я попробовал еще: настроить среду, затем изменить переменную PYTHONPATH
, а затем запустить тесты через pythonX
в существующей среде.
Это код
stage('Run tests') {
steps {
bat '''
d:\\my_app\\sys\\pythonX.exe --debug=cmd
set PYTHONPATH= d:\\user\\repos\\my_app;%PYTHONPATH%
d:\\my_app\\sys\\pythonX.exe -m pytest d:\\user\\repos\\my_app\\tests\\unit
'''
}
}
но это не работает. Я предполагаю, что перезаписывает переменную окружения PYTHONPATH
своей собственной.
Кто-нибудь знает как это побороть?