@nldoc/openapi-test-set-generator
v1.3.120
Published
OpenApi test set generator
Readme
NLdoc OpenAPI Test Set Generator
A powerful CLI tool for generating comprehensive test sets from OpenAPI 3.1.0 specifications. This TypeScript library automatically creates valid and invalid test examples based on schema definitions, enabling robust API validation testing.
Overview
The OpenAPI Test Set Generator extracts examples from OpenAPI specifications and systematically creates test variants to validate API implementations. It processes schema definitions and generates:
- Valid examples: Test cases that conform to the API specification
- Invalid examples: Test cases that deliberately violate schema constraints for negative testing
- Property variants: Multiple variations of examples with modified properties based on configurable rules
This tool is essential for:
- Automated API testing and validation
- Schema compliance verification
- Test-driven API development
- Generating comprehensive test suites from API specifications
Getting Started
Prerequisites
- Node.js >= 22.0.0
- npm >= 10.0.0
Installation
Install the package globally:
npm install -g @nldoc/openapi-test-set-generatorOr as a development dependency:
npm install --save-dev @nldoc/openapi-test-set-generatorBasic Usage
Create a configuration file (e.g., test-generator.yaml):
input:
openapi: ./api/openapi.json
output:
valid: ./tests/examples.valid.json
invalid: ./tests/examples.invalid.json
variantsOnExamples:
property:
# All examples in openapi.json are valid by default
- where: {}
do: {}
valid: true
# Generate invalid examples by removing required properties
- where:
required: true
hasDefault: false
do:
remove: true
valid: falseRun the generator:
openapi-test-set-generator extract-examples --input test-generator.yamlOr using npx:
npx @nldoc/openapi-test-set-generator extract-examples -i test-generator.yamlConfiguration
Configuration File Structure
The generator uses a YAML configuration file with the following structure:
input:
openapi: <path-to-openapi-spec> # Path to your OpenAPI specification (JSON/YAML)
output:
valid: <output-path-for-valid-examples> # Where to save valid test examples
invalid: <output-path-for-invalid-examples> # Where to save invalid test examples
variantsOnExamples:
property:
- where: <conditions> # Conditions to match properties
do: <action> # Action to perform on matched properties
valid: <boolean> # Whether the result should be valid or invalidProperty Modification Rules
The generator supports sophisticated property selection and modification:
Where Conditions
Select properties based on their schema characteristics:
where:
type: 'string' # Match by type
format: 'email' # Match by format
required: true # Match required properties
hasDefault: false # Match properties without defaults
minLength:
$gte: 1 # Match strings with minLength >= 1
maxLength:
$lte: 100 # Match strings with maxLength <= 100Modification Actions
do:
set: <value> # Set property to a specific value
remove: true # Remove the property entirely
truncate: 10 # Truncate string to specified lengthNested Property Support
The generator automatically traverses nested object structures to find and modify properties at any depth:
variantsOnExamples:
property:
# Modifies all email fields, even deeply nested ones
- where:
type: 'string'
format: 'email'
do:
set: 'invalid-email'
valid: false
# Removes all non-required nested properties
- where:
required: false
do:
remove: true
valid: trueDevelopment
Local Setup
Clone the repository:
git clone https://gitlab.com/logius/nldoc/lib/typescript/openapi-test-set-generator.git cd openapi-test-set-generatorInstall dependencies:
npm installBuild the project:
npm run build
Available Scripts
npm run build- Compile TypeScript to JavaScriptnpm run build:check- Type-check without emitting filesnpm test- Run test suite with coveragenpm run test:watch- Run tests in watch modenpm run lint- Lint the codebasenpm run format- Format code with Prettiernpm run format:check- Check code formattingnpm run fix- Auto-fix linting and formatting issues
API Documentation
CLI Commands
extract-examples
Extract and generate test examples from an OpenAPI specification.
openapi-test-set-generator extract-examples --input <config-file>Options:
-i, --input <file>- Path to the configuration file (required)
Examples:
openapi-test-set-generator extract-examples --input otsg.yaml
openapi-test-set-generator extract-examples -i otsg.ymlProgrammatic Usage
import {
importOpenAPIFile,
extractSchemaObjectsWithExamples,
createExampleVariantsFromSchemasOnQueries
} from '@nldoc/openapi-test-set-generator';
// Load OpenAPI specification
const spec = await importOpenAPIFile('path/to/openapi.json');
// Extract schemas with examples
const schemas = extractSchemaObjectsWithExamples(spec);
// Generate test variants
const { valid, invalid } = await createExampleVariantsFromSchemasOnQueries(
schemas,
variantQueries
);Example Scenarios
Common Test Patterns
Required Field Validation
- where: required: true hasDefault: false do: remove: true valid: falseString Format Validation
- where: type: 'string' format: 'uuid' do: set: 'invalid-uuid' valid: falseArray Constraints
- where: type: 'array' required: true hasDefault: false do: set: [] valid: falseBoolean Value Testing
- where: type: 'boolean' do: set: true valid: true - where: type: 'boolean' do: set: false valid: true
Integration Examples
This generator can be integrated into any project that uses OpenAPI specifications. Common integration patterns include:
- Generate comprehensive test sets for API schemas
- Validate API implementation compliance
- Create edge cases for robust testing
- Ensure API specification accuracy
Example integration in package.json:
{
"scripts": {
"build:examples": "openapi-test-set-generator extract-examples -i ./example-generator.yaml"
}
}Testing
Run the test suite:
npm testRun tests with coverage:
npm run test:watch runContributing
We welcome contributions! Please ensure:
- All tests pass (
npm test) - Code is properly formatted (
npm run format:check) - Linting rules are followed (
npm run lint) - TypeScript compilation succeeds (
npm run build:check)
License
This project is licensed under the European Union Public License 1.2 - see LICENSE for details.
Acknowledgements
- Built with Oclif CLI framework
- Supports OpenAPI 3.1.0 specifications
- Uses Vitest for testing
- Part of the NLdoc ecosystem
