Install a generator of mock servers and client programs of the PetStore sample app
Overview
This is a step-by-step tutorial on how you can install a generator of mock servers and client programs. The sample is the PetStore sample app.
Install swagger-codegen locally
After you install Git and Maven on your Mac:
cd ~ mkdir gits cd gits git clone https://github.com/swagger-api/swagger-codegen.git --depth=1 cd swagger-codegen mvn clean install
The “–depth=1” downloads only the latest version of the repo.
mvn install takes a while (11 minutes), and ends with something like this:
[INFO] ------------------------------------------------------------------------ [INFO] Reactor Summary: [INFO] [INFO] swagger-codegen-project ............................ SUCCESS [ 5.866 s] [INFO] swagger-codegen (core library) ..................... SUCCESS [08:35 min] [INFO] swagger-codegen (executable) ....................... SUCCESS [ 52.335 s] [INFO] swagger-codegen (maven-plugin) ..................... SUCCESS [ 11.775 s] [INFO] swagger-generator .................................. SUCCESS [01:07 min] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 10:56 min [INFO] Finished at: 2017-05-14T17:50:28-04:00 [INFO] Final Memory: 75M/1239M [INFO] ------------------------------------------------------------------------
Next let’s use the default assets to generate clients for the PetStore sample app.
The Petstore API in SwaggerHub
-
View the spec for edit in your browser:
This displays a sample API for the ficticious PetStore app.
In the future, you can use this same editor to work on your own API contents.
3 Pet Store Classes
Notice the operations under each of these 3 classes (listed alphabetically):
- PetApi - Everything about your pets
- StoreApi - Access to Petstore orders
- UserApi - Operations about user
Also notice the Models: Order, Category, User, Tag, Pet, ApiResponse.
-
View the spec installed locally, using your favorite text editor (subl in this example):
subl ~/gits/swagger-codegen/modules/swagger-codegen/src/test/resources/2_0/petstore.yaml
Generate
The processing uses mustache templating. This means static files are marked up with variables between (that look like a moustache). The mustache program replaces the variables with text values.
A more advanced approach is a program that generates the code.
“auto-generation of code sure gets me a long way down the road, saving me time doing the really mundane, heavy lifting in creating the skeleton code structures I need to get up an running with any new API.” –API Evangelist
Generate Go Server
On a Mac, install Go, then:
java -jar ~/gits/swagger-codegen/modules/swagger-codegen-cli/target/swagger-codegen-cli.jar \ generate \ -i ~/gits/swagger-codegen/modules/swagger-codegen/src/test/resources/2_0/petstore.yaml \ -l go-server \ -o ~/Downloads/swagger-petstore-gen-go-server
The back-slash \ specifies line continuation in the CLI.
-
-i http://petstore.swagger.io/v2/swagger.json
is an alternative to the downloaded Swagger spec for Petstore: -
-i ~/gits/swagger-codegen/modules/swagger-codegen/src/test/resources/2_0/petstore.yaml
-
-l specifies the generator in folder:
-
~/gits/swagger-codegen/samples/client/petstore
-
There are others such as jaxrs-cxf-client \
-
-o, CAUTION: If not specified, files are generated in the pwd.
The generated go-server folder contains:
- .swagger-codegen folder
- .swagger-codget-ignore file
- api folder
- go folder
- main.go file
-
Invoke the Go server:
go run main.go
BLAH: I got this message:
main.go:11:2: go/logger.go:3:1: expected 'IDENT', found 'import'
See https://stackoverflow.com/questions/39665379/golang-fully-qualified-import-path-in-auto-generated-code
C#
Using swagger-codegen to generate C# API for REST service by Dmytro Zhluktenko
Java Spring
Generate client stubs & document your REST-API using Swagger & Spring by Johannes Fiala Devoxx
Generate JMeter from default files
On a Mac, output to Downloads:
java -jar ~/gits/swagger-codegen/modules/swagger-codegen-cli/target/swagger-codegen-cli.jar \ generate \ -i ~/gits/swagger-codegen/modules/swagger-codegen/src/test/resources/2_0/petstore.yaml \ -l jmeter \ -o ~/Downloads/swagger-petstore-gen-jmeter
The back-slash \ specifies line continuation in the CLI.
-
-l specifies the generator in folder:
-
~/gits/swagger-codegen/samples/client/petstore
-
There are others such as jaxrs-cxf-client \
-
CAUTION: If not specified, files are generated in the pwd.
-
-
-o specifies the output folder. PROTIP: Name it the same as the generator (jaxrs-cxf-client)
Look for the console message like this to list the generated files:
[main] INFO io.swagger.codegen.AbstractGenerator - writing file /Users/mac/Downloads/JMETER/src/gen/java/io/swagger/model/ModelApiResponse.java
On a Linux server:
-o /var/tmp/swagger-codegen/jaxrs-cxf-client
### Generated go PetStore server
-
Invoke the Petstore server app generated in the Go language.
Use Generated JMeter load tests
-
After Installing JMeter…
-
Edit the .csv file
- from “localhost”
- from port 8080
-
Invoke a generated JMeter .jmx file to load test the sample Petstore app:
jmeter -n \ -t ~/Downloads/swagger-petstore-gen-jmeter/UserApi.jmx \ -l ~/Downloads/swagger-petstore-run-jmeter/UserApi.jtl \ -e -o ~/Downloads/swagger-petstore-run-jmeter
-
Since there are three .jmx files:
-
PetApi - Everything about your pets
-
StoreApi - Access to Petstore orders
Generate your own .jmx
-
The .jmx template files in Swagger-gen are hard-coded.
Options to automate:
-
Edit the generated file using the JMeter GUI and convert values back to variables.
-
Write a program using JMeter’s API, as described at:
- https://github.com/uttesh/JmeterAPISample
- http://uttesh.blogspot.in/2015/04/jmeter-load-testing-by-code-jmeter-api.html
-
Write a program to read the Swagger spec and generate a .jmx file either containing variables to generate or containing values for use directly in JMeter.
Go
The JMeterGo program is written in the Go language for processing by the Serverless framework running on Amazon Lambda and other clouds.
- https://golang.org/pkg/encoding/xml/
Since Amazon Lambda does not natively process Go language programs, we use the Go shim for Amazon Lambda.
Another app under test
If you are to create a new Swagger (OpenAPI) spec file, verify its using the online validator:
http://online.swagger.io/validator/debug?url=http://petstore.swagger.io/v2/swagger.json
http://www.nvisia.com/insights/swagger-cataloging-with-the-worlds-most-popular-framework-for-apis