Files
opencode-skill/TESTING_GUIDE.md
2026-03-08 23:03:19 +07:00

17 KiB

🧪 SEO Skills - Complete Testing Guide

Purpose: Test all implemented features systematically
Estimated Time: 2-3 hours for full test suite
Prerequisites: Python 3.8+, pip packages installed


📋 TEST OVERVIEW

Test Group Features Priority Time
Group 1: Content Generation Multi-channel generation High 30 min
Group 2: Thai Analysis Keyword, readability, quality High 20 min
Group 3: Context Management Create, manage context Medium 15 min
Group 4: Image Integration Generate, edit images Medium 30 min
Group 5: Auto-Publish Astro publishing Medium 20 min
Group 6: Analytics GA4, GSC, DataForSEO, Umami Low 30 min

🔧 PRE-TEST SETUP

1. Install Dependencies

# Navigate to skills directory
cd /Users/kunthawatgreethong/Gitea/opencode-skill/skills

# Install all dependencies
pip install pythainlp pyyaml python-dotenv pandas tqdm rich \
  markdown python-frontmatter GitPython Pillow requests

# Install Google APIs (for analytics testing)
pip install google-analytics-data google-auth google-auth-oauthlib \
  google-api-python-client

# Download Thai language data
python3 -c "from pythainlp.corpus import download; download('default')"

2. Verify Installation

# Test PyThaiNLP
python3 -c "from pythainlp import word_tokenize; print(word_tokenize('ทดสอบภาษาไทย'))"
# Expected: ['ทดสอบ', 'ภาษาไทย']

# Test YAML
python3 -c "import yaml; print('YAML OK')"

# Test requests
python3 -c "import requests; print('Requests OK')"

📝 GROUP 1: Content Generation Tests

Test 1.1: Facebook Post Generation

cd /Users/kunthawatgreethong/Gitea/opencode-skill/skills/seo-multi-channel/scripts

python3 generate_content.py \
  --topic "บริการ podcast hosting" \
  --channels facebook \
  --language th \
  --output test-fb

Expected Output:

🎯 Generating content for: บริการ podcast hosting
📱 Channels: facebook
🌐 Language: th

  Generating facebook...
  [Image Generation] Would generate image for facebook
    Topic: บริการ podcast hosting, Type: social
  ... (5 times)

✅ Results saved to: output/บริการ-podcast-hosting/results.json

📊 Summary:
  Channels generated: 1
    - facebook: 5 variations

Verify:

  • Output file created at output/test-fb/results.json
  • Contains 5 Facebook variations
  • Each has: primary_text, headline, cta, hashtags

Test 1.2: Multi-Channel Generation

python3 generate_content.py \
  --topic "บริการ podcast hosting" \
  --channels facebook google_ads blog \
  --language th

Expected Output:

🎯 Generating content for: บริการ podcast hosting
📱 Channels: facebook, google_ads, blog
🌐 Language: th

  Generating facebook... (5 variations)
  Generating google_ads... (3 variations)
  Generating blog... (5 variations)

✅ Results saved to: output/บริการ-podcast-hosting/results.json

📊 Summary:
  Channels generated: 3
    - facebook: 5 variations
    - google_ads: 3 variations
    - blog: 5 variations

Verify:

  • All 3 channels generated
  • Total 13 variations
  • Blog has markdown with frontmatter
  • Google Ads has 15 headlines, 4 descriptions

Test 1.3: English Content

python3 generate_content.py \
  --topic "best podcast hosting 2026" \
  --channels facebook blog \
  --language en

Verify:

  • English content generated
  • Different tone/formality than Thai
  • Proper English grammar structure

📝 GROUP 2: Thai Analysis Tests

Test 2.1: Keyword Density Analysis

cd /Users/kunthawatgreethong/Gitea/opencode-skill/skills/seo-analyzers/scripts

python3 thai_keyword_analyzer.py \
  --text "บริการ podcast hosting ที่ดีที่สุดช่วยให้คุณเผยแพร่ podcast ไปยัง Apple Podcasts, Spotify, YouTube Music ได้อย่างง่ายดาย บริการ podcast ของเราเป็นเครื่องมือที่ครบวงจรที่สุด" \
  --keyword "บริการ podcast" \
  --language th \
  --output text

Expected Output:

📊 Keyword Analysis Results

Keyword: บริการ podcast
Word Count: 25
Occurrences: 3
Density: 12.0% (target: 1.0-1.5%)
Status: too_high

Critical Placements:
  ✓ First 100 words: Yes
  ✓ H1 Headline: No
  ✓ Conclusion: No
  ✓ H2 Headings: 0 found

Keyword Stuffing Risk: high

💡 Recommendations:
  • ลดการใช้คำหลักลง อาจถูกมองว่า keyword stuffing
  • เพิ่มคำหลักในหัวข้อหลัก (H1)
  • เพิ่มคำหลักในบทสรุป

Verify:

  • Thai word count accurate (uses PyThaiNLP)
  • Density calculated correctly
  • Recommendations in Thai

Test 2.2: Readability Analysis

python3 thai_readability.py \
  --text "มาเริ่ม podcast กันเลย! ไม่ต้องรอให้พร้อม 100% แค่มีไอเดียดีๆ กับไมค์หนึ่งอัน คุณก็เริ่มต้นได้แล้ว ส่วนเรื่องเทคนิคที่เหลือ เราช่วยคุณเอง" \
  --output text

Expected Output:

📖 Thai Readability Analysis

Sentence Count: 3
Word Count: 28
Avg Sentence Length: 9.3 words

Grade Level: ง่าย (ม.6-ม.9)
Formality: กันเอง (Casual)

Readability Score: 75/100

Verify:

  • Thai sentences counted correctly
  • Formality detected (กันเอง vs เป็นทางการ)
  • Grade level in Thai format

Test 2.3: Content Quality Scoring

python3 content_quality_scorer.py \
  --text "# คู่มือ Podcast Hosting

บริการ podcast hosting เป็นสิ่งสำคัญสำหรับ podcaster ทุกคน...

[Add 500+ words of content]" \
  --keyword "podcast hosting" \
  --output text

Expected Output:

⭐ Content Quality Score

Overall Score: 65.0/100
Status: fair
Action: Address priority fixes

Category Scores:
  • Keyword Optimization: 15/25
  • Readability: 18/25
  • Structure: 17/25
  • Brand Voice: 15/25

Verify:

  • Score between 0-100
  • 4 category breakdowns
  • Recommendations provided

📝 GROUP 3: Context Management Tests

Test 3.1: Create Context Files

cd /Users/kunthawatgreethong/Gitea/opencode-skill/skills/seo-context/scripts

python3 context_manager.py \
  --create \
  --project "/tmp/test-website" \
  --industry "podcast" \
  --formality "normal"

Expected Output:

📝 Context Manager
Project: /tmp/test-website

Creating context files...
Industry: podcast
Audience: Thai audience
Formality: normal

✅ Context created successfully!

📁 Created files:
  ✓ brand-voice.md
  ✓ target-keywords.md
  ✓ seo-guidelines.md
  ✓ internal-links-map.md
  ✓ data-services.json
  ✓ style-guide.md

📍 Location: /tmp/test-website/context

Verify:

  • All 6 files created in /tmp/test-website/context/
  • brand-voice.md has Thai voice pillars
  • seo-guidelines.md has Thai-specific rules
  • data-services.json has all services disabled
# Verify files
ls -la /tmp/test-website/context/
cat /tmp/test-website/context/brand-voice.md | head -20

Test 3.2: Alternative --action Flag

python3 context_manager.py \
  --action create \
  --project "/tmp/test-website-2" \
  --industry "ecommerce" \
  --formality "casual"

Verify:

  • Works with --action create instead of --create
  • Different industry reflected in content

📝 GROUP 4: Image Integration Tests

Test 4.1: Image Generation (Requires CHUTES_API_TOKEN)

cd /Users/kunthawatgreethong/Gitea/opencode-skill/skills/seo-multi-channel/scripts

# Set your API token
export CHUTES_API_TOKEN="your_token_here"

python3 image_integration.py \
  --action generate \
  --topic "podcast hosting" \
  --channel facebook \
  --output-dir ./test-images

Expected Output:

🎨 Generating image...
  Prompt: Professional illustration of podcast hosting...
  Size: 1024x1024
  ✓ Saved: ./test-images/podcast-hosting/facebook/generated_xxx.png

Verify:

  • Image file created
  • Saved in correct folder structure
  • Image is viewable (not corrupted)

Note: If no API token, test will show prompt about needing token


Test 4.2: Find Product Images

# First, create a test website structure
mkdir -p /tmp/test-website/public/images/products
cp /path/to/any-image.jpg /tmp/test-website/public/images/products/podcast-mic.jpg

python3 image_integration.py \
  --action find \
  --product-name "podcast-mic" \
  --website-repo "/tmp/test-website"

Expected Output:

🔍 Looking for product images: podcast-mic
  ✓ Found 1 image(s)
  - /tmp/test-website/public/images/products/podcast-mic.jpg

Verify:

  • Finds images in website repo
  • Searches multiple directories
  • Returns full paths

Test 4.3: Product Image Edit (Requires CHUTES_API_TOKEN)

export CHUTES_API_TOKEN="your_token_here"

python3 image_integration.py \
  --action edit \
  --product-name "podcast-mic" \
  --website-repo "/tmp/test-website" \
  --prompt "Enhance product, professional lighting, clean background" \
  --topic "podcast-mic" \
  --channel facebook_ads \
  --output-dir ./test-images

Expected Output:

✏️  Editing product image...
  Base: /tmp/test-website/public/images/products/podcast-mic.jpg
  Edit: Enhance product, professional lighting...
  ✓ Saved: ./test-images/podcast-mic/facebook_ads/edited_xxx.png

Verify:

  • Original image found
  • Edited image created
  • Saved in channel-specific folder

📝 GROUP 5: Auto-Publish Tests

Test 5.1: Publish Blog Post

cd /Users/kunthawatgreethong/Gitea/opencode-skill/skills/seo-multi-channel/scripts

# Create test blog post
cat > /tmp/test-blog.md << 'EOF'
---
title: "คู่มือ Podcast Hosting ที่ดีที่สุด 2026"
description: "เปรียบเทียบบริการ podcast hosting ทั้งหมด"
keywords: ["podcast hosting", "บริการ podcast"]
slug: podcast-hosting-best-2026
lang: th
category: guides
created: 2026-03-08
---

# คู่มือ Podcast Hosting ที่ดีที่สุด 2026

บทความนี้จะเปรียบเทียบแพลตฟอร์มยอดนิยม...
EOF

# Initialize test git repo
mkdir -p /tmp/test-astro-website/src/content/blog/\(th\)
cd /tmp/test-astro-website
git init
git config user.email "test@test.com"
git config user.name "Test User"
git remote add origin https://github.com/yourusername/test-repo.git

# Publish
python3 auto_publish.py \
  --file /tmp/test-blog.md \
  --website-repo /tmp/test-astro-website

Expected Output:

📝 Publishing to Astro

✓ Saved: /tmp/test-astro-website/src/content/blog/(th)/podcast-hosting-best-2026.md
✓ Committed: Add blog post: podcast-hosting-best-2026 (th)
✓ Pushed to remote

✅ Published successfully!
  Slug: podcast-hosting-best-2026
  Language: th
  Path: /tmp/test-astro-website/src/content/blog/(th)/podcast-hosting-best-2026.md

Verify:

  • Markdown file saved in correct language folder
  • Git commit created
  • Slug generated correctly from Thai title

Test 5.2: English Blog Post

cat > /tmp/test-blog-en.md << 'EOF'
---
title: "Best Podcast Hosting 2026"
description: "Compare all podcast hosting services"
slug: best-podcast-hosting-2026
lang: en
---

# Best Podcast Hosting 2026

This article compares...
EOF

python3 auto_publish.py \
  --file /tmp/test-blog-en.md \
  --website-repo /tmp/test-astro-website

Verify:

  • Saved in (en) folder
  • Language auto-detected if not specified

📝 GROUP 6: Analytics Tests (Optional - Needs Credentials)

Test 6.1: Data Aggregator (No Services)

cd /Users/kunthawatgreethong/Gitea/opencode-skill/skills/seo-data/scripts

# Create empty config
cat > /tmp/test-context/data-services.json << 'EOF'
{
  "ga4": {"enabled": false},
  "gsc": {"enabled": false},
  "dataforseo": {"enabled": false},
  "umami": {"enabled": false}
}
EOF

python3 data_aggregator.py \
  --context /tmp/test-context \
  --action performance \
  --url "https://test.com/page"

Expected Output:

📊 Initializing Data Service Manager...
Context: /tmp/test-context

No analytics services configured. All features will be skipped.

⚠️  No services configured. Exiting.

Verify:

  • Gracefully handles no services
  • No errors thrown

Test 6.2: GA4 Connector (With Credentials)

# Only if you have GA4 credentials
python3 ga4_connector.py \
  --property-id "G-XXXXXXXXXX" \
  --credentials "/path/to/ga4-credentials.json" \
  --url "/blog/article" \
  --days 30

Verify (if credentials provided):

  • Connects successfully
  • Returns pageview data
  • Returns engagement metrics

Test 6.3: GSC Connector (With Credentials)

# Only if you have GSC credentials
python3 gsc_connector.py \
  --site-url "https://yoursite.com" \
  --credentials "/path/to/gsc-credentials.json" \
  --quick-wins

Expected Output:

🔍 Testing GSC Connector
Site: https://yoursite.com

Finding quick wins (position 11-20)...

Found 15 opportunities:

1. keyword example
   Position: 12 | Impressions: 1,234 | Priority: 85

Verify (if credentials provided):

  • Connects successfully
  • Returns keyword positions
  • Quick wins calculated correctly

Test 6.4: DataForSEO (With Credentials)

python3 dataforseo_client.py \
  --login "your_login" \
  --password "your_password" \
  --keyword "podcast hosting"

Verify (if credentials provided):

  • Authenticates successfully
  • Returns SERP data

Test 6.5: Umami (With Credentials)

python3 umami_connector.py \
  --api-url "https://analytics.yoursite.com" \
  --api-key "your_api_key" \
  --website-id "your_website_id"

Verify (if credentials provided):

  • Connects successfully
  • Returns analytics data

TEST CHECKLIST SUMMARY

High Priority (Must Test):

  • Test 1.1: Facebook post generation (Thai)
  • Test 1.2: Multi-channel generation
  • Test 2.1: Thai keyword density analysis
  • Test 2.2: Thai readability analysis
  • Test 2.3: Content quality scoring
  • Test 3.1: Context file creation

Medium Priority (Should Test):

  • Test 4.1: Image generation (if have token)
  • Test 4.2: Find product images
  • Test 5.1: Auto-publish blog post
  • Test 1.3: English content generation

Low Priority (If Have Credentials):

  • Test 6.2: GA4 connector
  • Test 6.3: GSC connector
  • Test 6.4: DataForSEO client
  • Test 6.5: Umami connector

🐛 COMMON ISSUES & FIXES

Issue 1: PyThaiNLP Not Working

Error: ImportError: No module named 'pythainlp'

Fix:

pip install pythainlp
python3 -c "from pythainlp.corpus import download; download('default')"

Issue 2: YAML Parser Errors

Error: yaml.parser.ParserError

Fix: Templates already fixed. If using custom templates, ensure:

  • No unquoted special characters
  • Proper indentation (2 spaces)
  • No or in values (use quotes)

Issue 3: Image Generation Fails

Error: CHUTES_API_TOKEN not set

Fix: Either set token or skip image tests (core functionality still works)

export CHUTES_API_TOKEN="your_token"

Issue 4: Git Push Fails

Error: git push authentication failed

Fix: For testing, skip remote push:

# Just test local commit
git commit -m "Test commit"
# Don't push

📊 TEST RESULTS TEMPLATE

After testing, fill in this template:

## Test Results - [Date]

**Tester:** [Your name]
**Environment:** [Python version, OS]

### Group 1: Content Generation
- [ ] Test 1.1: Facebook (Thai) - PASS/FAIL
- [ ] Test 1.2: Multi-channel - PASS/FAIL
- [ ] Test 1.3: English - PASS/FAIL

### Group 2: Thai Analysis
- [ ] Test 2.1: Keyword density - PASS/FAIL
- [ ] Test 2.2: Readability - PASS/FAIL
- [ ] Test 2.3: Quality score - PASS/FAIL

### Group 3: Context
- [ ] Test 3.1: Create context - PASS/FAIL

### Group 4: Images
- [ ] Test 4.1: Generate - PASS/FAIL/SKIP
- [ ] Test 4.2: Find products - PASS/FAIL

### Group 5: Auto-Publish
- [ ] Test 5.1: Publish blog - PASS/FAIL

### Group 6: Analytics
- [ ] Test 6.x: [Service] - PASS/FAIL/SKIP (no creds)

### Bugs Found:
1. [Description]
2. [Description]

### Overall Status: [Ready/Needs Fixes]

Happy Testing! 🧪🎉