Skip to main content

Flexbench OpenAPI Module

This module parses OpenAPI documents and generates test scenarios in the form of .flex files and cURL commands for use with Flexbench.

Prerequisites​

  • Node.js: Ensure you have Node.js installed, preferably the latest LTS version. Verify the installation with:
node -v
npm -v

Project Structure​

openapi-module/
├── node_modules/ # Dependencies installed via npm
├── sample/ # Sample files for testing
│ └── sample-openapi.yaml # Example OpenAPI document
├── scripts/ # Scripts for generating outputs
│ ├── generate-all.js # Script to generate both cURL commands and Flex scenarios
│ ├── generate-curl.js # Script to generate cURL commands
│ └── generate-flex.js # Script to generate Flex scenarios (.flex files)
├── src/ # Source files
│ ├── generators/ # Scenario and command generation logic
│ │ ├── curl-generator.js # Logic for generating cURL commands
│ │ ├── field-mapping.js # Mapping for generating fake data
│ │ ├── flex-generator.js # Logic for generating Flex scenarios
│ │ └── gpt-flex-generator.js # Logic for generating Flex scenarios using GPT
│ ├── GPT/ # GPT related configuration
│ │ └── config.js # Configuration file for GPT settings
│ ├── parsers/ # Parsing logic
│ │ └── openapi-parser.js # Logic for parsing OpenAPI documents
│ └── utils/ # Utility functions
│ └── generation-utils.js # Utility functions for generation scripts
├── temp/ # Temporary files and generated outputs
├── test/ # Tests for the module
│ ├── generators.test.js # Tests for generators
│ └── parser.test.js # Tests for parsers
├── .gitignore # Ignored files and directories
├── package-lock.json # npm lock file
├── package.json # npm package file
└── README.md # Project documentation

Installation​

Install dependencies by running:

npm install

Configuration​

OpenAI API Key Setup​

If you use GPT for scenario generation, set your OpenAI API key as an environment variable.

Linux/MacOS:​

Add the API key to your shell configuration file:

export OPENAI_API_KEY='your-api-key-here'

Reload your shell configuration:

source ~/.bashrc  # or source ~/.zshrc, etc.

Module Configuration (Optional)​

The module is pre-configured to work out of the box with sensible defaults. You can modify src/GPT/config.js to customize the behavior:

  • useGPT: Default is false. Set to true to use GPT for generating .flex files.
  • openaiApiKey: Set this in your environment if using GPT.
  • consumer: Set this to desktop-app or server-app to determine the format of the generated .flex files.
  • model, maxTokens, temperature: Pre-set for general use, but adjustable for specific needs.
  • promptTemplate: Already tailored to generate useful Flex scenarios. Advanced users can modify it.
  • outputDir, outputFileName: Defaults to saving outputs in the temp directory with a .flex extension.
module.exports = {
useGPT: false,
openaiApiKey: process.env.OPENAI_API_KEY,
consumer: 'desktop-app', // or 'server-app'
model: "gpt-3.5-turbo",
maxTokens: 1500,
temperature: 0.7,
promptTemplate: function(endpoints) {
return `
You are given the following API endpoints from an OpenAPI document:

${JSON.stringify(endpoints, null, 2)}

Please generate a Flex scenario JSON file that includes:
...
`;
},
outputDir: '../../temp',
outputFileName: 'flex-scenario-gpt.flex',
};

Usage​

Generating .flex Files and cURL Commands​

You can generate .flex files and cURL commands using the scripts provided.

Static Approach (Faker)​

  1. Run the script with --useGPT=false to use Faker for generating data.
  2. Customize field mappings in field-mapping.js if needed.
  3. Run the scripts.

AI Approach (OpenAI GPT)​

  1. Run the script with --useGPT=true to use GPT for generating data.
  2. Ensure your API key is set and the promptTemplate is configured in config.js.
  3. Run the scripts.

Running the Scripts​

All npm scripts should be run under openapi-module.

Go to the flexbench/openapi-module on your current device:

cd /Users/yourusername/projects/flexbench/openapi-module

Generate cURL Commands​

Generate cURL commands based on your OpenAPI file:

npm run generate-curl -- --openApiFilePath=sample/sample-openapi.yaml --outputFileName=./temp/curl-commands.sh

Generate Flex Scenarios​

Generate Flex scenarios:

npm run generate-flex -- --openApiFilePath=sample/sample-openapi.yaml --outputFileName=flex-scenario.flex --useGPT=true --consumer=desktop-app

You can omit the --useGPT=true and --consumer arguments to use default settings, which will generate the file as flex-scenario.flex for the desktop-app.

Generate Both cURL Commands and Flex Scenarios​

Generate both cURL commands and Flex scenarios:

npm run generate-all -- --openApiFilePath=sample/sample-openapi.yaml --outputFileName=flex-scenario.flex --useGPT=true --consumer=server-app

Customizing Script Execution​

You can control the generation process via command-line arguments:

npm run generate-flex -- --openApiFilePath=sample/sample-openapi.yaml --outputFileName=flex-scenario.flex --useGPT=true --consumer=desktop-app

Params Explained:​

  • --openApiFilePath: Path to your OpenAPI YAML file. Required for all generation scripts.

    • Example: --openApiFilePath=sample/sample-openapi.yaml
  • --outputFileName: Filename for the generated .flex file or cURL commands. Required for all generation scripts.

    • Example: --outputFileName=flex-scenario.flex
  • --useGPT: Flag to determine whether to use GPT for generating .flex scenarios. Set to true for GPT-based generation, or false for static. Defaults to the setting in config.js.

    • Example: --useGPT=true
  • --consumer: Specifies the format of the .flex file for either desktop-app or server-app. Optional; defaults to the setting in config.js if not provided.

    • Example: --consumer=desktop-app

Using Generated .flex and cURL Files​

Mock Server Setup​

  1. Install Prism to start a mock server:
npm install -g @stoplight/prism-cli 
  1. Run Prism with your OpenAPI YAML file:
prism mock sample-openapi.yaml -p 4000

Use with Flexbench​

  1. Load the generated .flex file into the Flexbench desktop app.
  2. Run the test scenarios directly from the app.

Testing​

Running Tests​

Run tests for the module:

npm test