AgentSkillsCN

integration-e2e-testing

本技能提供集成与E2E测试设计原则、ROI计算、测试骨架规范,以及评审标准。在设计集成测试、E2E测试、评审测试质量,或在提及“集成测试”、“E2E测试”、“端到端”、“测试骨架”或“验收测试”时自动加载。

SKILL.md
--- frontmatter
name: integration-e2e-testing
description: This skill provides integration and E2E test design principles, ROI calculation, test skeleton specification, and review criteria. Automatically loaded when designing integration tests, E2E tests, reviewing test quality, or when "integration test", "E2E test", "end-to-end", "test skeleton", or "acceptance test" are mentioned.

Integration and E2E Testing Principles

Test Type Definition and Limits

Test TypePurposeScopeLimit per FeatureImplementation Timing
IntegrationVerify component interactionsPartial system integrationMAX 3Created alongside implementation
E2EVerify critical user journeysFull systemMAX 1-2Executed in final phase only

Behavior-First Principle

Include (High ROI)

  • Business logic correctness (calculations, state transitions, data transformations)
  • Data integrity and persistence behavior
  • User-visible functionality completeness
  • Error handling behavior (what user sees/experiences)

Exclude (Low ROI in CI/CD)

  • External service real connections → Use contract/interface verification
  • Performance metrics → Non-deterministic, defer to load testing
  • Implementation details → Focus on observable behavior
  • UI layout specifics → Focus on information availability

Principle: Test = User-observable behavior verifiable in isolated CI environment

ROI Calculation

code
ROI Score = (Business Value × User Frequency + Legal Requirement × 10 + Defect Detection)
            / (Creation Cost + Execution Cost + Maintenance Cost)

Cost Table

Test TypeCreateExecuteMaintainTotal
Unit1113
Integration35311
E2E1020838

Test Skeleton Specification

Required Comment Patterns

Each test MUST include the following annotations:

code
// AC: [Original acceptance criteria text]
// Behavior: [Trigger] → [Process] → [Observable Result]
// @category: core-functionality | integration | edge-case | e2e
// @dependency: none | [component names] | full-system
// @complexity: low | medium | high
// ROI: [score]

Verification Items (Optional)

When verification points need explicit enumeration:

code
// Verification items:
// - [Item 1]
// - [Item 2]

EARS Format Mapping

EARS KeywordTest TypeGeneration Approach
WhenEvent-drivenTrigger event → verify outcome
WhileState conditionSetup state → verify behavior
If-thenBranch coverageBoth condition paths verified
(none)Basic functionalityDirect invocation → verify result

Test File Naming Convention

  • Integration tests: *.int.test.* or *.integration.test.*
  • E2E tests: *.e2e.test.*

The test runner or framework in the project determines the appropriate file extension.

Review Criteria

Skeleton and Implementation Consistency

CheckFailure Condition
Behavior VerificationNo assertion for "observable result" in skeleton
Verification Item CoverageListed items not all covered by assertions
Mock BoundaryInternal components mocked in integration test

Implementation Quality

CheckFailure Condition
AAA StructureArrange/Act/Assert separation unclear
IndependenceState sharing between tests, order dependency
ReproducibilityDate/random dependency, varying results
ReadabilityTest name doesn't match verification content

Quality Standards

Required

  • Each test verifies one behavior
  • Clear AAA (Arrange-Act-Assert) structure
  • No test interdependencies
  • Deterministic execution

Prohibited

  • Testing implementation details
  • Multiple behaviors per test
  • Shared mutable state
  • Time-dependent assertions without mocking

Property-Based Testing

Property-based testing generates random inputs to verify invariants that should hold for ALL possible values, not just specific test cases.

When to Apply

ScenarioProperty Example
Sorting algorithmssort(arr).length === arr.length AND each element <= next
Serializationdecode(encode(value)) === value for any valid value
Data transformationstransform(transform_inverse(x)) === x
Validation functionsValid inputs always pass, structurally invalid inputs always fail
Mathematical operationsCommutativity, associativity, distributivity
Collection operationsMap preserves length, filter reduces or preserves length

Property Test Structure (Language-Agnostic)

code
PROPERTY: "Description of the invariant"
FOR ALL: generator description (e.g., "arbitrary arrays of integers, length 0-1000")
ASSERT: invariant expression
SHRINK: how to minimize failing cases

Example:
  PROPERTY: "Sorting preserves all elements"
  FOR ALL: arrays of comparable elements
  ASSERT:
    - sorted.length === original.length
    - every element in original exists in sorted
    - sorted[i] <= sorted[i+1] for all valid i
  SHRINK: reduce array size until minimal failing case found

ROI Assessment for Property Tests

FactorScore Guidance
Input space sizeLarge (>100 meaningful variations) → High ROI
Bug severity if invariant brokenData corruption / security → High ROI
Implementation complexitySimple property → High ROI
Existing coverageNo edge case coverage → High ROI

Minimum ROI threshold: Only create property tests when at least 2 factors score High.

Integration with Test Budget

Property tests count toward the integration test budget. Each property test replaces approximately 5-10 specific input unit tests, making them highly budget-efficient for the right scenarios.