Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
115 changes: 106 additions & 9 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -77,17 +77,10 @@ jobs:
uv run pytest tests/test_performance_execute.py -v --tb=short -m performance
continue-on-error: true

- name: Run full test suite with coverage
- name: Run unit test suite (no coverage)
run: |
uv run pytest tests/ -v --cov=. --cov-report=xml --cov-report=term-missing --tb=short --ignore=tests/test_integration_execute.py
uv run pytest tests/ -v --tb=short --ignore=tests/test_integration_execute.py

- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
file: ./coverage.xml
flags: unittests
name: codecov-umbrella
fail_ci_if_error: false

lint:
name: Code Quality
Expand Down Expand Up @@ -282,11 +275,115 @@ jobs:
chmod +x scripts/test-ci-simple.sh
./scripts/test-ci-simple.sh

- name: Extract coverage files from CI containers
run: |
echo "🔍 Extracting coverage files from CI test..."

# Get CI container ID
ci_container_id=$(docker-compose -f docker-compose.ci.yml ps -q ci-app 2>/dev/null | head -1)

if [ -n "$ci_container_id" ] && [ "$ci_container_id" != "" ]; then
echo "✅ Found CI container: $ci_container_id"

# Check if coverage file exists
if docker exec $ci_container_id test -f /app/coverage.xml 2>/dev/null; then
echo "✅ Found coverage.xml in CI container"
docker exec $ci_container_id ls -la /app/coverage.xml

# Copy coverage file
if docker cp $ci_container_id:/app/coverage.xml ./coverage.xml; then
echo "✅ Successfully extracted coverage from CI container"
echo "📊 Coverage file info:"
ls -la coverage.xml
echo "📝 Coverage preview:"
head -5 coverage.xml || echo "Could not preview coverage file"
else
echo "❌ Failed to copy coverage from CI container"
fi
else
echo "⚠️ No coverage.xml found in CI container"
docker exec $ci_container_id ls -la /app/ | grep -i coverage || echo "No coverage files found"
fi
else
echo "❌ No CI container found"
docker-compose -f docker-compose.ci.yml ps
fi

- name: Run Production Environment Tests
run: |
chmod +x scripts/test-integration.sh
./scripts/test-integration.sh prod

- name: Extract coverage files from Docker containers
run: |
echo "🔍 Searching for coverage files in containers..."

# Function to extract coverage from a container
extract_coverage() {
local compose_file=$1
local container_name=$2
local service_name=$3

echo " Checking $service_name service..."

# Get container ID
local container_id=$(docker-compose -f $compose_file ps -q $service_name 2>/dev/null | head -1)

if [ -n "$container_id" ] && [ "$container_id" != "" ]; then
echo " Container ID: $container_id"

# Check if coverage file exists in container
if docker exec $container_id test -f /app/coverage.xml 2>/dev/null; then
echo " ✅ Found coverage.xml in $service_name container"
docker exec $container_id ls -la /app/coverage.xml

# Copy coverage file
if docker cp $container_id:/app/coverage.xml ./coverage-$service_name.xml; then
echo " ✅ Successfully copied coverage from $service_name"
# If this is the main coverage file, also copy as coverage.xml
if [ ! -f "./coverage.xml" ] || [ "$service_name" = "ci-app" ]; then
cp ./coverage-$service_name.xml ./coverage.xml
echo " ✅ Set as main coverage file"
fi
else
echo " ❌ Failed to copy coverage from $service_name"
fi
else
echo " ⚠️ No coverage.xml found in $service_name container"
fi
else
echo " ⚠️ No container found for $service_name"
fi
}

# Extract from production container (CI coverage already extracted)
extract_coverage "docker-compose.yml" "app" "app"

# Final check
echo "🔍 Final coverage file check:"
if [ -f "./coverage.xml" ]; then
echo "✅ Main coverage file found:"
ls -la coverage.xml
echo "📊 Coverage file size: $(du -h coverage.xml | cut -f1)"
echo "📝 Coverage file preview:"
head -10 coverage.xml || echo "Could not preview coverage file"
else
echo "❌ No coverage file found"
echo "📋 Available files:"
ls -la coverage*.xml 2>/dev/null || echo "No coverage files found"
fi

- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4.0.1
if: success() && hashFiles('coverage.xml') != ''
with:
slug: lihuacai168/Jmeter-Toolkit
name: jmeter-toolkit-integration-coverage
token: ${{ secrets.CODECOV_TOKEN }}
file: ./coverage.xml
flags: integration
fail_ci_if_error: false

- name: Cleanup Docker resources
if: always()
run: |
Expand Down
20 changes: 8 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
# JMeter Toolkit v2.0

![CI/CD](https://github.com/YOUR_USERNAME/jmeter_toolit/workflows/CI/CD%20Pipeline/badge.svg)
![Code Quality](https://github.com/YOUR_USERNAME/jmeter_toolit/workflows/Code%20Quality/badge.svg)
![Security](https://github.com/YOUR_USERNAME/jmeter_toolit/workflows/Security%20Scan/badge.svg)
![CI/CD](https://github.com/lihuacai168/jmeter_toolit/actions/workflows/ci.yml/badge.svg)
![Python](https://img.shields.io/badge/python-3.9%2B-blue.svg)
![FastAPI](https://img.shields.io/badge/FastAPI-0.104%2B-green.svg)
![Coverage](https://img.shields.io/badge/coverage-41%25-yellow.svg)
[![codecov](https://codecov.io/gh/lihuacai168/jmeter_toolit/branch/master/graph/badge.svg)](https://codecov.io/gh/lihuacai168/jmeter_toolit)
![License](https://img.shields.io/badge/license-MIT-blue.svg)

JMeter Toolkit 是一个专门为 JMeter 测试管理而设计的强大工具集。
Expand Down Expand Up @@ -38,15 +36,13 @@ JMeter Toolkit 是一个专门为 JMeter 测试管理而设计的强大工具集


# 使用演示
## 1. 上传,执行,报告一条龙
![jmx-upload-execute-report.gif](docs%2Fjmx-upload-execute-report.gif)

## 2. 上传JMX文件并执行
![upload-execute.png](docs%2Fupload-execute.png)
## 3. 查看报告
![report.png](docs%2Freport.png)
# 快速启动
## 1. JMeter Toolkit 主界面
![main.png](docs/main.png)
## 2. Jmeter 任务和报告管理
![tasks.png](docs/tasks.png)

## 3. 报告详情
![report_detail.png](docs/report_detail.png)
## 开发环境

### 1. 克隆项目
Expand Down
Loading
Loading