plugins/codex/perf/scripts/perf-test.sh

65 lines
2 KiB
Bash
Raw Permalink Normal View History

#!/bin/bash
set -e
if [ -f "go.mod" ]; then
PROJECT_TYPE="go"
elif [ -f "composer.json" ]; then
PROJECT_TYPE="php"
else
echo "Error: Unable to determine project type. No go.mod or composer.json found."
exit 1
fi
echo "Detected project type: $PROJECT_TYPE"
case $PROJECT_TYPE in
"go")
echo "Running Go test profiling..."
go test -v -cpuprofile=cpu.prof -memprofile=mem.prof -bench=. 2>&1 | tee test_output.log
echo "Analyzing test performance..."
grep "--- PASS" test_output.log | awk '{print $4, $3}' | sort -nr | head -n 10 > slowest_tests.log
echo "Slowest tests:"
cat slowest_tests.log
echo ""
echo "Actionable Suggestions:"
awk '$1 > 2.0 {print " - The test \""$2"\" took " $1 "s to run. Consider using mocks for external dependencies to speed it up."}' slowest_tests.log
;;
"php")
if ! php -m | grep -q 'Xdebug'; then
echo "Xdebug is not installed. Please install it to use the PHP test profiler."
exit 1
fi
echo "Running PHP test profiling..."
if [ -f "vendor/bin/pest" ]; then
vendor/bin/pest --log-junit report.xml
elif [ -f "vendor/bin/phpunit" ]; then
vendor/bin/phpunit --log-junit report.xml
else
echo "Error: No pest or phpunit executable found."
exit 1
fi
if ! command -v xmlstarlet &> /dev/null; then
echo "xmlstarlet could not be found. Please install it to use this feature."
echo "On Debian/Ubuntu: sudo apt-get install xmlstarlet"
echo "On macOS (Homebrew): brew install xmlstarlet"
exit 1
fi
echo "Analyzing test performance..."
xmlstarlet sel -t -m "//testcase" -v "@time" -o " " -v "@name" -n report.xml | sort -nr | head -n 10 > slowest_tests.log
echo "Slowest tests:"
cat slowest_tests.log
echo ""
echo "Actionable Suggestions:"
awk '$1 > 2.0 {print " - The test \""$2"\" took " $1 "s to run. Consider using mocks for external dependencies to speed it up."}' slowest_tests.log
;;
esac