Created
December 30, 2013 05:44
-
-
Save bbrodriges/8178248 to your computer and use it in GitHub Desktop.
Автоматическая генерация отчетов покрытия кода тестами по номеру задачи в коммитах.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# шаблон конфига phpunit.xml | |
XMLDUMMY="<?xml version=\"1.0\" encoding=\"UTF-8\"?> | |
<phpunit bootstrap=\"work/tests/TestHelper.php\" | |
backupGlobals=\"false\" | |
backupStaticAttributes=\"false\" | |
colors=\"true\" | |
processIsolation=\"true\" | |
verbose=\"true\"> | |
<filter> | |
<whitelist processUncoveredFilesFromWhitelist=\"true\"> | |
#ORIGINAL_FILES | |
</whitelist> | |
</filter> | |
<testsuites> | |
<testsuite name=\"Test\"> | |
#TEST_FILES | |
</testsuite> | |
</testsuites> | |
<logging> | |
<log type=\"coverage-html\" target=\"build/coverage\" title=\"Coverage Report\" | |
charset=\"UTF-8\" yui=\"true\" highlight=\"true\" | |
lowUpperBound=\"35\" highLowerBound=\"70\" /> | |
<log type=\"coverage-text\" target=\"php://stdout\" showUncoveredFiles=\"true\"/> | |
</logging> | |
<php> | |
<ini name=\"memory_limit\" value=\"2048M\" /> | |
</php> | |
</phpunit> | |
" | |
# счетчик для массива с файлами | |
COUNTER=0 | |
# обязательно нужен номер задачи | |
if [ $# -eq 0 ] | |
then | |
echo "Usage: autopu.sh #task_number (e.g. AA-6423)" | |
exit 1 | |
fi | |
# получаем коммиты по номеру задачи | |
for COMMIT in $(git log --grep=$1 --pretty=oneline | awk '{print $1}') | |
do | |
# получаем файлы из коммита | |
for FILE in $(git diff-tree --no-commit-id --name-only -r $COMMIT) | |
do | |
# проверяем, что файл не относится к тестам. Если относится - пропускаем | |
if [[ "$FILE" == *tests/* || "$FILE" == *Test.php* || "$FILE" == *AllTests.php* || "$FILE" == *views/* || "$FILE" != *.php* ]] | |
then | |
continue | |
fi | |
# проверяем, что файла нет в массиве файлов (уникальный путь к файлу) | |
case "${FILES_ARRAY[@]}" in *$FILE*) | |
continue | |
;; | |
esac | |
# пишем файл в массив файлов | |
FILES_ARRAY[$COUNTER]=$FILE | |
# прибавляем счетчик для массива | |
COUNTER=$COUNTER+1 | |
done | |
done | |
ORIGINAL_FILES="" | |
TEST_FILES="" | |
# итерируемся через файлы и прогоняем тесты для каждого с генерацией отчета по покрытию | |
for FILE in "${FILES_ARRAY[@]}" | |
do | |
ORIGINAL_FILES="$ORIGINAL_FILES<file>work/$FILE</file>" | |
# разбиваем путь к файлу по "/"" | |
FILE_PARTS=(${FILE//\// }) | |
# определяем проект файла | |
FILE_PROJECT="${FILE_PARTS[0]}" | |
# определяем имя файла | |
FILE_NAME=$(basename $FILE) | |
# определяем имя теста | |
TEST_FILENAME=(${FILE_NAME//\.php/Test\.php}) | |
# ищем файл теста в папке тестов проекта и пишем в массив | |
TEST_FILES="$TEST_FILES<file>$(find ~/work/tests/projects/$FILE_PROJECT/ -name "$TEST_FILENAME")</file>" | |
done | |
# формируем xml-файл конфига с нужными файлами | |
TMP=${XMLDUMMY/"#TEST_FILES"/$TEST_FILES} | |
TMP=${TMP/"#ORIGINAL_FILES"/$ORIGINAL_FILES} | |
echo $TMP > ~/tmp-phpunit.xml | |
mkdir -p ~/coverage-html/$1 | |
/usr/bin/phpunit --coverage-html ~/coverage-html/$1 --configuration ~/tmp-phpunit.xml | |
rm -f ~/tmp-phpunit.xml | |
exit 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment