xiaohongshu
xiaohongshu
blog-smoke-tests
Run Playwright smoke tests for Denser blog application. Executes 15 tests (SMOKE-01 to SMOKE-15) against configurable environment (production, dev, or localhost) with retry support (max 3 attempts per failing test). Supports headed (visible browser) and headless modes. Collects artifacts (screens...
Full skill instructions
Run Playwright smoke tests against the Denser blog application.
Before running tests, ask user:
Target environment:
Browser mode:
Test scope:
# Create temp and report directories
mkdir -p /storage1/denser/apps/blog/playwright/temp_ai_script_tests
mkdir -p /storage1/denser/apps/blog/playwright/temp_ai_report_tests
# Copy test scripts
cp /storage1/denser/.claude/skills/blog-smoke-tests/scripts/smoke-*.mjs /storage1/denser/apps/blog/playwright/temp_ai_script_tests/
For each test:
REPORT_DIR set__RESULT__)Command to run single test:
cd /storage1/denser/apps/blog
BASE_URL=https://blog.openhive.network HEADLESS=false REPORT_DIR=./playwright/temp_ai_report_tests pnpm exec node playwright/temp_ai_script_tests/smoke-XX-name.mjs
Replace:
BASE_URL=https://blog.openhive.network with chosen environment URLHEADLESS=false with HEADLESS=true for headless modeParsing JSON result:
Each test outputs a JSON line prefixed with __RESULT__:
__RESULT__{"id":"SMOKE-01","name":"Homepage Posts","priority":"P0","passed":true,"error":null,"artifacts":[]}
After running all tests, collect results and generate HTML report:
# Option 1: Using generate-report.mjs script
cd /storage1/denser/apps/blog
pnpm exec node /storage1/denser/.claude/skills/blog-smoke-tests/scripts/generate-report.mjs '[results-json-array]'
Alternatively, create report manually based on collected results.
Report location: ./playwright/temp_ai_report_tests/report.html
After all tests complete:
rm -f /storage1/denser/apps/blog/playwright/temp_ai_script_tests/smoke-*.mjs
Keep report directory with:
report.html - HTML test reportSMOKE-XX-failure.png - screenshots of failuresSMOKE-XX-trace.zip - Playwright traces for failuresPresent results:
========================================
SMOKE TEST SUMMARY: X/Y PASSED
========================================
✓ [P0] SMOKE-01: Homepage Posts
✓ [P0] SMOKE-04: Post Navigation
✓ [P0] SMOKE-08: User Profile
✓ [P1] SMOKE-05: Votes API
...
✗ [P3] SMOKE-11: Categories (3 attempts)
...
========================================
HTML Report: ./playwright/temp_ai_report_tests/report.html
Artifacts: ./playwright/temp_ai_report_tests/
To view traces: npx playwright show-trace ./playwright/temp_ai_report_tests/SMOKE-XX-trace.zip
When a test fails, the following artifacts are saved:
| Artifact | Description | Location |
|---|---|---|
| Screenshot | Full page screenshot at failure | SMOKE-XX-failure.png |
| Trace | Playwright trace with snapshots | SMOKE-XX-trace.zip |
Viewing Traces:
cd /storage1/denser/apps/blog
npx playwright show-trace ./playwright/temp_ai_report_tests/SMOKE-04-trace.zip
| Priority | ID | Name | Script |
|---|---|---|---|
| P0 | SMOKE-01 | Homepage Posts | smoke-01-homepage-posts.mjs |
| P0 | SMOKE-04 | Post Navigation | smoke-04-post-navigation.mjs |
| P0 | SMOKE-08 | User Profile | smoke-08-profile.mjs |
| P1 | SMOKE-05 | Votes API | smoke-05-votes-api.mjs |
| P1 | SMOKE-06 | Comments | smoke-06-comments.mjs |
| P1 | SMOKE-07 | Payout | smoke-07-payout.mjs |
| P2 | SMOKE-02 | Votes Tooltip | smoke-02-votes-tooltip.mjs |
| P2 | SMOKE-03 | Payout Tooltip | smoke-03-payout-tooltip.mjs |
| P2 | SMOKE-09 | Followers | smoke-09-followers.mjs |
| P3 | SMOKE-10 | Tags | smoke-10-tags.mjs |
| P3 | SMOKE-11 | Categories | smoke-11-categories.mjs |
| P3 | SMOKE-12 | Communities | smoke-12-communities.mjs |
| P4 | SMOKE-13 | Static Pages | smoke-13-static-pages.mjs |
| P4 | SMOKE-14 | Theme Toggle | smoke-14-theme.mjs |
| P4 | SMOKE-15 | Login Button | smoke-15-login.mjs |
const MAX_RETRIES = 3;
const results = [];
for (const test of tests) {
let passed = false;
let attempts = 0;
let lastError = null;
let artifacts = [];
for (let attempt = 1; attempt <= MAX_RETRIES; attempt++) {
attempts = attempt;
const output = await runTest(test);
// Parse __RESULT__ from output
const resultLine = output.match(/__RESULT__(.+)/);
if (resultLine) {
const result = JSON.parse(resultLine[1]);
passed = result.passed;
lastError = result.error;
artifacts = result.artifacts;
}
if (passed) break;
if (attempt < MAX_RETRIES) {
console.log(`Retry ${attempt + 1}/${MAX_RETRIES} in 2 seconds...`);
await sleep(2000);
}
}
results.push({
id: test.id,
name: test.name,
priority: test.priority,
passed,
attempts,
error: lastError,
artifacts
});
}
| Variable | Description | Default |
|---|---|---|
BASE_URL | Target environment URL | https://blog.openhive.network |
HEADLESS | Run browser in headless mode | false (headed) |
REPORT_DIR | Directory for artifacts and report | ./playwright/temp_ai_report_tests |
| Environment | URL |
|---|---|
| Production | https://blog.openhive.network |
| Dev | https://blog.dev.openhive.network |
| Localhost | http://localhost:3000 |
/storage1/denser/docs/playwright-testing-notes.md/storage1/denser/docs/denser-blog-architecture.md| Path | Purpose |
|---|---|
| Production URL | https://blog.openhive.network |
| Dev URL | https://blog.dev.openhive.network |
| Localhost URL | http://localhost:3000 |
| API URL | https://api.hive.blog |
| Working directory | /storage1/denser/apps/blog |
| Temp scripts | playwright/temp_ai_script_tests/ |
| Reports & artifacts | playwright/temp_ai_report_tests/ |
| Skill scripts | /storage1/denser/.claude/skills/blog-smoke-tests/scripts/ |
xiaohongshu
technical spec
product ux expert
database patterns
Conduct multi-agent task orchestration and workflow coordination.
Initialize project with Conductor artifacts (product definition,
Expert in web animations, transitions, and motion design using Framer Motion and CSS
Creates Mermaid and ASCII diagrams for flowcharts, architecture, ERDs, state machines, mindmaps, and more. Use when user mentions diagram, flowchart, mermaid, ASCII diagram, text diagram, terminal diagram, visualize, C4, mindmap, architecture diagram, sequence diagram, ERD, or needs visual docume...
PostgreSQL bindings for H3 hexagonal grid system. Use when working with H3 cells in Postgres, including spatial indexing, geometry/geography integration, and raster analysis.
Context-Driven Development skill for projects using Conductor. Use this skill when you detect a `conductor/` directory in the project, when working on tasks defined in a `plan.md` file, or when the user asks about tracks, specs, or plans. Automatically applies TDD workflow, tracks task completion...
Display project status, active tracks, and next actions
Official Stakpak application containerization standard operating procedure, a step-by-step guidline to properly dockerize applications. This is a rule book curated by the Stakpak Team.
Generate, edit, and beat-sync AI video with leading models in one workspace.
The world's fastest calendar for remote work
Transform Your Design with AI Designer by ImgCreator.ai
Revolutionizing Video Production with AI-Powered Creativity
Extend an image past the frame and let AI fill the new aspect ratio.
Discover your celebrity doppelgänger with StarByFace!
ChainClarity explains 700+ crypto whitepapers in plain English, with layered summaries, comparisons, research tools, alerts, and a $4.99 Pro plan.
Opus.ai: Revolutionize Your Web Experience