@grafana/openapi-to-k6 0.1.2 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/publish.yaml +2 -2
- package/.github/workflows/tests.yaml +14 -6
- package/README.md +54 -14
- package/dist/analytics.js +2 -1
- package/dist/cli.js +20 -6
- package/dist/constants.js +8 -2
- package/dist/{generator.js → generator/index.js} +7 -13
- package/dist/{k6SdkClient.js → generator/k6Client.js} +148 -161
- package/examples/basic_schema/single/k6-script.sample.ts +11 -0
- package/examples/basic_schema/single/simpleAPI.ts +87 -0
- package/examples/basic_schema/split/k6-script.sample.ts +11 -0
- package/examples/basic_schema/split/simpleAPI.schemas.ts +9 -0
- package/examples/basic_schema/split/simpleAPI.ts +85 -0
- package/examples/basic_schema/tags/default.ts +85 -0
- package/examples/basic_schema/tags/k6-script.sample.ts +11 -0
- package/examples/basic_schema/tags/simpleAPI.schemas.ts +9 -0
- package/examples/form_data_schema/single/formDataAPI.ts +115 -0
- package/examples/form_data_schema/{k6-script.sample.ts → single/k6-script.sample.ts} +2 -2
- package/examples/form_data_schema/split/formDataAPI.schemas.ts +24 -0
- package/examples/form_data_schema/split/formDataAPI.ts +98 -0
- package/examples/form_data_schema/split/k6-script.sample.ts +11 -0
- package/examples/form_data_schema/tags/default.ts +98 -0
- package/examples/form_data_schema/tags/formDataAPI.schemas.ts +24 -0
- package/examples/form_data_schema/tags/k6-script.sample.ts +11 -0
- package/examples/form_url_encoded_data_schema/single/formURLEncodedAPI.ts +112 -0
- package/examples/form_url_encoded_data_schema/{k6-script.sample.ts → single/k6-script.sample.ts} +2 -2
- package/examples/form_url_encoded_data_schema/split/formURLEncodedAPI.schemas.ts +24 -0
- package/examples/form_url_encoded_data_schema/split/formURLEncodedAPI.ts +98 -0
- package/examples/form_url_encoded_data_schema/split/k6-script.sample.ts +11 -0
- package/examples/form_url_encoded_data_schema/tags/default.ts +98 -0
- package/examples/form_url_encoded_data_schema/tags/formURLEncodedAPI.schemas.ts +24 -0
- package/examples/form_url_encoded_data_schema/tags/k6-script.sample.ts +11 -0
- package/examples/form_url_encoded_data_with_query_params_schema/single/formURLEncodedAPIWithQueryParameters.ts +128 -0
- package/examples/form_url_encoded_data_with_query_params_schema/{k6-script.sample.ts → single/k6-script.sample.ts} +2 -2
- package/examples/form_url_encoded_data_with_query_params_schema/split/formURLEncodedAPIWithQueryParameters.schemas.ts +35 -0
- package/examples/form_url_encoded_data_with_query_params_schema/split/formURLEncodedAPIWithQueryParameters.ts +104 -0
- package/examples/form_url_encoded_data_with_query_params_schema/split/k6-script.sample.ts +14 -0
- package/examples/form_url_encoded_data_with_query_params_schema/tags/default.ts +104 -0
- package/examples/form_url_encoded_data_with_query_params_schema/tags/formURLEncodedAPIWithQueryParameters.schemas.ts +35 -0
- package/examples/form_url_encoded_data_with_query_params_schema/tags/k6-script.sample.ts +14 -0
- package/examples/get_request_with_path_parameters_schema/{k6-script.sample.ts → single/k6-script.sample.ts} +2 -2
- package/examples/get_request_with_path_parameters_schema/single/simpleAPI.ts +94 -0
- package/examples/get_request_with_path_parameters_schema/split/k6-script.sample.ts +11 -0
- package/examples/get_request_with_path_parameters_schema/split/simpleAPI.schemas.ts +12 -0
- package/examples/get_request_with_path_parameters_schema/split/simpleAPI.ts +90 -0
- package/examples/get_request_with_path_parameters_schema/tags/default.ts +90 -0
- package/examples/get_request_with_path_parameters_schema/tags/k6-script.sample.ts +11 -0
- package/examples/get_request_with_path_parameters_schema/tags/simpleAPI.schemas.ts +12 -0
- package/examples/headers_schema/single/headerDemoAPI.ts +202 -0
- package/examples/headers_schema/{k6-script.sample.ts → single/k6-script.sample.ts} +2 -2
- package/examples/headers_schema/split/headerDemoAPI.schemas.ts +32 -0
- package/examples/headers_schema/split/headerDemoAPI.ts +184 -0
- package/examples/headers_schema/split/k6-script.sample.ts +25 -0
- package/examples/headers_schema/tags/default.ts +182 -0
- package/examples/headers_schema/tags/headerDemoAPI.schemas.ts +32 -0
- package/examples/headers_schema/tags/k6-script.sample.ts +25 -0
- package/examples/no_title_schema/{k6-script.sample.ts → single/k6-script.sample.ts} +2 -2
- package/examples/no_title_schema/single/k6Client.ts +87 -0
- package/examples/{basic_schema → no_title_schema/split}/k6-script.sample.ts +2 -2
- package/examples/no_title_schema/split/k6Client.schemas.ts +9 -0
- package/examples/no_title_schema/split/k6Client.ts +85 -0
- package/examples/no_title_schema/tags/default.ts +85 -0
- package/examples/no_title_schema/tags/k6-script.sample.ts +11 -0
- package/examples/no_title_schema/tags/k6Client.schemas.ts +9 -0
- package/examples/post_request_with_query_params/single/exampleAPI.ts +126 -0
- package/examples/post_request_with_query_params/{k6-script.sample.ts → single/k6-script.sample.ts} +2 -2
- package/examples/post_request_with_query_params/split/exampleAPI.schemas.ts +33 -0
- package/examples/post_request_with_query_params/split/exampleAPI.ts +105 -0
- package/examples/post_request_with_query_params/split/k6-script.sample.ts +14 -0
- package/examples/post_request_with_query_params/tags/default.ts +105 -0
- package/examples/post_request_with_query_params/tags/exampleAPI.schemas.ts +33 -0
- package/examples/post_request_with_query_params/tags/k6-script.sample.ts +14 -0
- package/examples/query_params_schema/single/exampleAPI.ts +120 -0
- package/examples/query_params_schema/{k6-script.sample.ts → single/k6-script.sample.ts} +2 -2
- package/examples/query_params_schema/split/exampleAPI.schemas.ts +37 -0
- package/examples/query_params_schema/split/exampleAPI.ts +94 -0
- package/examples/query_params_schema/split/k6-script.sample.ts +11 -0
- package/examples/query_params_schema/tags/default.ts +94 -0
- package/examples/query_params_schema/tags/exampleAPI.schemas.ts +37 -0
- package/examples/query_params_schema/tags/k6-script.sample.ts +11 -0
- package/examples/simple_post_request_schema/{exampleAPI.ts → single/exampleAPI.ts} +49 -49
- package/examples/simple_post_request_schema/{k6-script.sample.ts → single/k6-script.sample.ts} +2 -2
- package/examples/simple_post_request_schema/split/exampleAPI.schemas.ts +47 -0
- package/examples/simple_post_request_schema/split/exampleAPI.ts +99 -0
- package/examples/simple_post_request_schema/split/k6-script.sample.ts +13 -0
- package/examples/simple_post_request_schema/tags/default.ts +99 -0
- package/examples/simple_post_request_schema/tags/exampleAPI.schemas.ts +47 -0
- package/examples/simple_post_request_schema/tags/k6-script.sample.ts +13 -0
- package/images/openapi-to-k6.png +0 -0
- package/package.json +2 -2
- package/src/analytics.ts +3 -1
- package/src/cli.ts +34 -8
- package/src/constants.ts +7 -1
- package/src/{generator.ts → generator/index.ts} +8 -21
- package/src/{k6SdkClient.ts → generator/k6Client.ts} +174 -222
- package/src/type.d.ts +4 -4
- package/tests/e2e/schema.json +8 -0
- package/tests/e2e/{k6Script.ts → single/k6Script.ts} +7 -2
- package/tests/e2e/split/k6Script.ts +82 -0
- package/tests/e2e/tags/k6Script.ts +106 -0
- package/tests/functional-tests/fixtures/schemas/basic_schema.json +1 -4
- package/tests/functional-tests/fixtures/schemas/form_data_schema.json +4 -4
- package/tests/functional-tests/fixtures/schemas/form_url_encoded_data_schema.json +3 -3
- package/tests/functional-tests/fixtures/schemas/form_url_encoded_data_with_query_params_schema.json +2 -2
- package/tests/functional-tests/fixtures/schemas/get_request_with_path_parameters_schema.json +2 -2
- package/tests/functional-tests/fixtures/schemas/headers_schema.json +7 -8
- package/tests/functional-tests/fixtures/schemas/no_title_schema.json +2 -5
- package/tests/functional-tests/fixtures/schemas/post_request_with_query_params.json +3 -4
- package/tests/functional-tests/fixtures/schemas/query_params_schema.json +3 -3
- package/tests/functional-tests/fixtures/schemas/simple_post_request_schema.json +3 -5
- package/tests/functional-tests/generator.test.ts +46 -5
- package/examples/basic_schema/simpleAPI.ts +0 -87
- package/examples/form_data_schema/formDataAPI.ts +0 -115
- package/examples/form_url_encoded_data_schema/formURLEncodedAPI.ts +0 -114
- package/examples/form_url_encoded_data_with_query_params_schema/formURLEncodedAPIWithQueryParameters.ts +0 -130
- package/examples/get_request_with_path_parameters_schema/simpleAPI.ts +0 -94
- package/examples/headers_schema/headerDemoAPI.ts +0 -196
- package/examples/no_title_schema/K6Client.ts +0 -86
- package/examples/post_request_with_query_params/exampleAPI.ts +0 -124
- package/examples/query_params_schema/exampleAPI.ts +0 -118
- package/examples/update_examples.sh +0 -21
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Automatically generated by @grafana/openapi-to-k6: 0.2.0
|
|
3
|
+
* Do not edit manually.
|
|
4
|
+
* Simple API
|
|
5
|
+
* An API with a single GET request that takes a path parameter
|
|
6
|
+
* OpenAPI spec version: 1.0.0
|
|
7
|
+
*/
|
|
8
|
+
export type GetItemById200 = {
|
|
9
|
+
description?: string
|
|
10
|
+
id?: string
|
|
11
|
+
name?: string
|
|
12
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Automatically generated by @grafana/openapi-to-k6: 0.2.0
|
|
3
|
+
* Do not edit manually.
|
|
4
|
+
* Simple API
|
|
5
|
+
* An API with a single GET request that takes a path parameter
|
|
6
|
+
* OpenAPI spec version: 1.0.0
|
|
7
|
+
*/
|
|
8
|
+
import { URL } from 'https://jslib.k6.io/url/1.0.0/index.js'
|
|
9
|
+
import http from 'k6/http'
|
|
10
|
+
import type { Params, Response } from 'k6/http'
|
|
11
|
+
import type { GetItemById200 } from './simpleAPI.schemas'
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* This is the base client to use for interacting with the API.
|
|
15
|
+
*/
|
|
16
|
+
export class SimpleAPIClient {
|
|
17
|
+
private cleanBaseUrl: string
|
|
18
|
+
private commonRequestParameters: Params
|
|
19
|
+
|
|
20
|
+
constructor(clientOptions: {
|
|
21
|
+
baseUrl: string
|
|
22
|
+
commonRequestParameters?: Params
|
|
23
|
+
}) {
|
|
24
|
+
this.cleanBaseUrl = clientOptions.baseUrl.replace(/\/+$/, '')
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Returns a single item based on the provided ID
|
|
29
|
+
* @summary Get an item by its ID
|
|
30
|
+
*/
|
|
31
|
+
getItemById(
|
|
32
|
+
id: string,
|
|
33
|
+
requestParameters?: Params
|
|
34
|
+
): {
|
|
35
|
+
response: Response
|
|
36
|
+
data: GetItemById200
|
|
37
|
+
} {
|
|
38
|
+
const url = new URL(this.cleanBaseUrl + `/items/${id}`)
|
|
39
|
+
const mergedRequestParameters = this._mergeRequestParameters(
|
|
40
|
+
requestParameters || {},
|
|
41
|
+
this.commonRequestParameters
|
|
42
|
+
)
|
|
43
|
+
const response = http.request(
|
|
44
|
+
'GET',
|
|
45
|
+
url.toString(),
|
|
46
|
+
undefined,
|
|
47
|
+
mergedRequestParameters
|
|
48
|
+
)
|
|
49
|
+
let data
|
|
50
|
+
|
|
51
|
+
try {
|
|
52
|
+
data = response.json()
|
|
53
|
+
} catch {
|
|
54
|
+
data = response.body
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
response,
|
|
58
|
+
data,
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Merges the provided request parameters with default parameters for the client.
|
|
64
|
+
*
|
|
65
|
+
* @param {Params} requestParameters - The parameters provided specifically for the request
|
|
66
|
+
* @param {Params} commonRequestParameters - Common parameters for all requests
|
|
67
|
+
* @returns {Params} - The merged parameters
|
|
68
|
+
*/
|
|
69
|
+
private _mergeRequestParameters(
|
|
70
|
+
requestParameters?: Params,
|
|
71
|
+
commonRequestParameters?: Params
|
|
72
|
+
): Params {
|
|
73
|
+
return {
|
|
74
|
+
...commonRequestParameters, // Default to common parameters
|
|
75
|
+
...requestParameters, // Override with request-specific parameters
|
|
76
|
+
headers: {
|
|
77
|
+
...(commonRequestParameters?.headers || {}), // Ensure headers are defined
|
|
78
|
+
...(requestParameters?.headers || {}),
|
|
79
|
+
},
|
|
80
|
+
cookies: {
|
|
81
|
+
...(commonRequestParameters?.cookies || {}), // Ensure cookies are defined
|
|
82
|
+
...(requestParameters?.cookies || {}),
|
|
83
|
+
},
|
|
84
|
+
tags: {
|
|
85
|
+
...(commonRequestParameters?.tags || {}), // Ensure tags are defined
|
|
86
|
+
...(requestParameters?.tags || {}),
|
|
87
|
+
},
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Automatically generated by @grafana/openapi-to-k6: 0.2.0
|
|
3
|
+
* Do not edit manually.
|
|
4
|
+
* Simple API
|
|
5
|
+
* An API with a single GET request that takes a path parameter
|
|
6
|
+
* OpenAPI spec version: 1.0.0
|
|
7
|
+
*/
|
|
8
|
+
import { URL } from 'https://jslib.k6.io/url/1.0.0/index.js'
|
|
9
|
+
import http from 'k6/http'
|
|
10
|
+
import type { Params, Response } from 'k6/http'
|
|
11
|
+
import type { GetItemById200 } from './simpleAPI.schemas'
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* This is the base client to use for interacting with the API.
|
|
15
|
+
*/
|
|
16
|
+
export class DefaultClient {
|
|
17
|
+
private cleanBaseUrl: string
|
|
18
|
+
private commonRequestParameters: Params
|
|
19
|
+
|
|
20
|
+
constructor(clientOptions: {
|
|
21
|
+
baseUrl: string
|
|
22
|
+
commonRequestParameters?: Params
|
|
23
|
+
}) {
|
|
24
|
+
this.cleanBaseUrl = clientOptions.baseUrl.replace(/\/+$/, '')
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Returns a single item based on the provided ID
|
|
29
|
+
* @summary Get an item by its ID
|
|
30
|
+
*/
|
|
31
|
+
getItemById(
|
|
32
|
+
id: string,
|
|
33
|
+
requestParameters?: Params
|
|
34
|
+
): {
|
|
35
|
+
response: Response
|
|
36
|
+
data: GetItemById200
|
|
37
|
+
} {
|
|
38
|
+
const url = new URL(this.cleanBaseUrl + `/items/${id}`)
|
|
39
|
+
const mergedRequestParameters = this._mergeRequestParameters(
|
|
40
|
+
requestParameters || {},
|
|
41
|
+
this.commonRequestParameters
|
|
42
|
+
)
|
|
43
|
+
const response = http.request(
|
|
44
|
+
'GET',
|
|
45
|
+
url.toString(),
|
|
46
|
+
undefined,
|
|
47
|
+
mergedRequestParameters
|
|
48
|
+
)
|
|
49
|
+
let data
|
|
50
|
+
|
|
51
|
+
try {
|
|
52
|
+
data = response.json()
|
|
53
|
+
} catch {
|
|
54
|
+
data = response.body
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
response,
|
|
58
|
+
data,
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Merges the provided request parameters with default parameters for the client.
|
|
64
|
+
*
|
|
65
|
+
* @param {Params} requestParameters - The parameters provided specifically for the request
|
|
66
|
+
* @param {Params} commonRequestParameters - Common parameters for all requests
|
|
67
|
+
* @returns {Params} - The merged parameters
|
|
68
|
+
*/
|
|
69
|
+
private _mergeRequestParameters(
|
|
70
|
+
requestParameters?: Params,
|
|
71
|
+
commonRequestParameters?: Params
|
|
72
|
+
): Params {
|
|
73
|
+
return {
|
|
74
|
+
...commonRequestParameters, // Default to common parameters
|
|
75
|
+
...requestParameters, // Override with request-specific parameters
|
|
76
|
+
headers: {
|
|
77
|
+
...(commonRequestParameters?.headers || {}), // Ensure headers are defined
|
|
78
|
+
...(requestParameters?.headers || {}),
|
|
79
|
+
},
|
|
80
|
+
cookies: {
|
|
81
|
+
...(commonRequestParameters?.cookies || {}), // Ensure cookies are defined
|
|
82
|
+
...(requestParameters?.cookies || {}),
|
|
83
|
+
},
|
|
84
|
+
tags: {
|
|
85
|
+
...(commonRequestParameters?.tags || {}), // Ensure tags are defined
|
|
86
|
+
...(requestParameters?.tags || {}),
|
|
87
|
+
},
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { SimpleAPIClient } from './simpleAPI.ts'
|
|
2
|
+
|
|
3
|
+
const baseUrl = '<BASE_URL>'
|
|
4
|
+
const client = new SimpleAPIClient({ baseUrl })
|
|
5
|
+
|
|
6
|
+
export default function () {
|
|
7
|
+
/**
|
|
8
|
+
* Get an item by its ID
|
|
9
|
+
*/
|
|
10
|
+
const getItemByIdResponseData = client.getItemById(id)
|
|
11
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Automatically generated by @grafana/openapi-to-k6: 0.2.0
|
|
3
|
+
* Do not edit manually.
|
|
4
|
+
* Simple API
|
|
5
|
+
* An API with a single GET request that takes a path parameter
|
|
6
|
+
* OpenAPI spec version: 1.0.0
|
|
7
|
+
*/
|
|
8
|
+
export type GetItemById200 = {
|
|
9
|
+
description?: string
|
|
10
|
+
id?: string
|
|
11
|
+
name?: string
|
|
12
|
+
}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Automatically generated by @grafana/openapi-to-k6: 0.2.0
|
|
3
|
+
* Do not edit manually.
|
|
4
|
+
* Header Demo API
|
|
5
|
+
* An API demonstrating the use of headers in different ways
|
|
6
|
+
* OpenAPI spec version: 1.0.0
|
|
7
|
+
*/
|
|
8
|
+
import { URL } from 'https://jslib.k6.io/url/1.0.0/index.js'
|
|
9
|
+
import http from 'k6/http'
|
|
10
|
+
import type { Params, Response } from 'k6/http'
|
|
11
|
+
export type GetExampleResponseHeaders200 = {
|
|
12
|
+
status?: string
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export type PostExamplePostBody = {
|
|
16
|
+
data?: string
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export type PostExamplePostHeaders = {
|
|
20
|
+
/**
|
|
21
|
+
* Bearer token for authorization
|
|
22
|
+
*/
|
|
23
|
+
Authorization: string
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export type GetExampleGet200 = {
|
|
27
|
+
message?: string
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export type GetExampleGetHeaders = {
|
|
31
|
+
/**
|
|
32
|
+
* A custom header for this request
|
|
33
|
+
*/
|
|
34
|
+
'X-Custom-Header'?: string
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* This is the base client to use for interacting with the API.
|
|
39
|
+
*/
|
|
40
|
+
export class HeaderDemoAPIClient {
|
|
41
|
+
private cleanBaseUrl: string
|
|
42
|
+
private commonRequestParameters: Params
|
|
43
|
+
|
|
44
|
+
constructor(clientOptions: {
|
|
45
|
+
baseUrl: string
|
|
46
|
+
commonRequestParameters?: Params
|
|
47
|
+
}) {
|
|
48
|
+
this.cleanBaseUrl = clientOptions.baseUrl.replace(/\/+$/, '')
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* This GET request demonstrates the use of custom request headers
|
|
53
|
+
* @summary GET request with headers
|
|
54
|
+
*/
|
|
55
|
+
getExampleGet(
|
|
56
|
+
headers?: GetExampleGetHeaders,
|
|
57
|
+
requestParameters?: Params
|
|
58
|
+
): {
|
|
59
|
+
response: Response
|
|
60
|
+
data: GetExampleGet200
|
|
61
|
+
} {
|
|
62
|
+
const url = new URL(this.cleanBaseUrl + `/example-get`)
|
|
63
|
+
const mergedRequestParameters = this._mergeRequestParameters(
|
|
64
|
+
requestParameters || {},
|
|
65
|
+
this.commonRequestParameters
|
|
66
|
+
)
|
|
67
|
+
const response = http.request('GET', url.toString(), undefined, {
|
|
68
|
+
...mergedRequestParameters,
|
|
69
|
+
headers: {
|
|
70
|
+
// In the schema, headers can be of any type like number but k6 accepts only strings as headers, hence converting all headers to string
|
|
71
|
+
...Object.fromEntries(
|
|
72
|
+
Object.entries(headers || {}).map(([key, value]) => [
|
|
73
|
+
key,
|
|
74
|
+
String(value),
|
|
75
|
+
])
|
|
76
|
+
),
|
|
77
|
+
...mergedRequestParameters?.headers,
|
|
78
|
+
},
|
|
79
|
+
})
|
|
80
|
+
let data
|
|
81
|
+
|
|
82
|
+
try {
|
|
83
|
+
data = response.json()
|
|
84
|
+
} catch {
|
|
85
|
+
data = response.body
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
response,
|
|
89
|
+
data,
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* This POST request uses a security header for authentication
|
|
95
|
+
* @summary POST request with security headers
|
|
96
|
+
*/
|
|
97
|
+
postExamplePost(
|
|
98
|
+
postExamplePostBody: PostExamplePostBody,
|
|
99
|
+
headers: PostExamplePostHeaders,
|
|
100
|
+
requestParameters?: Params
|
|
101
|
+
): {
|
|
102
|
+
response: Response
|
|
103
|
+
data: void
|
|
104
|
+
} {
|
|
105
|
+
const url = new URL(this.cleanBaseUrl + `/example-post`)
|
|
106
|
+
const mergedRequestParameters = this._mergeRequestParameters(
|
|
107
|
+
requestParameters || {},
|
|
108
|
+
this.commonRequestParameters
|
|
109
|
+
)
|
|
110
|
+
const response = http.request(
|
|
111
|
+
'POST',
|
|
112
|
+
url.toString(),
|
|
113
|
+
JSON.stringify(postExamplePostBody),
|
|
114
|
+
{
|
|
115
|
+
...mergedRequestParameters,
|
|
116
|
+
headers: {
|
|
117
|
+
'Content-Type': 'application/json',
|
|
118
|
+
// In the schema, headers can be of any type like number but k6 accepts only strings as headers, hence converting all headers to string
|
|
119
|
+
...Object.fromEntries(
|
|
120
|
+
Object.entries(headers || {}).map(([key, value]) => [
|
|
121
|
+
key,
|
|
122
|
+
String(value),
|
|
123
|
+
])
|
|
124
|
+
),
|
|
125
|
+
...mergedRequestParameters?.headers,
|
|
126
|
+
},
|
|
127
|
+
}
|
|
128
|
+
)
|
|
129
|
+
let data
|
|
130
|
+
|
|
131
|
+
try {
|
|
132
|
+
data = response.json()
|
|
133
|
+
} catch {
|
|
134
|
+
data = response.body
|
|
135
|
+
}
|
|
136
|
+
return {
|
|
137
|
+
response,
|
|
138
|
+
data,
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* This GET request returns custom response headers
|
|
144
|
+
* @summary GET request with response headers only
|
|
145
|
+
*/
|
|
146
|
+
getExampleResponseHeaders(requestParameters?: Params): {
|
|
147
|
+
response: Response
|
|
148
|
+
data: GetExampleResponseHeaders200
|
|
149
|
+
} {
|
|
150
|
+
const url = new URL(this.cleanBaseUrl + `/example-response-headers`)
|
|
151
|
+
const mergedRequestParameters = this._mergeRequestParameters(
|
|
152
|
+
requestParameters || {},
|
|
153
|
+
this.commonRequestParameters
|
|
154
|
+
)
|
|
155
|
+
const response = http.request(
|
|
156
|
+
'GET',
|
|
157
|
+
url.toString(),
|
|
158
|
+
undefined,
|
|
159
|
+
mergedRequestParameters
|
|
160
|
+
)
|
|
161
|
+
let data
|
|
162
|
+
|
|
163
|
+
try {
|
|
164
|
+
data = response.json()
|
|
165
|
+
} catch {
|
|
166
|
+
data = response.body
|
|
167
|
+
}
|
|
168
|
+
return {
|
|
169
|
+
response,
|
|
170
|
+
data,
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Merges the provided request parameters with default parameters for the client.
|
|
176
|
+
*
|
|
177
|
+
* @param {Params} requestParameters - The parameters provided specifically for the request
|
|
178
|
+
* @param {Params} commonRequestParameters - Common parameters for all requests
|
|
179
|
+
* @returns {Params} - The merged parameters
|
|
180
|
+
*/
|
|
181
|
+
private _mergeRequestParameters(
|
|
182
|
+
requestParameters?: Params,
|
|
183
|
+
commonRequestParameters?: Params
|
|
184
|
+
): Params {
|
|
185
|
+
return {
|
|
186
|
+
...commonRequestParameters, // Default to common parameters
|
|
187
|
+
...requestParameters, // Override with request-specific parameters
|
|
188
|
+
headers: {
|
|
189
|
+
...(commonRequestParameters?.headers || {}), // Ensure headers are defined
|
|
190
|
+
...(requestParameters?.headers || {}),
|
|
191
|
+
},
|
|
192
|
+
cookies: {
|
|
193
|
+
...(commonRequestParameters?.cookies || {}), // Ensure cookies are defined
|
|
194
|
+
...(requestParameters?.cookies || {}),
|
|
195
|
+
},
|
|
196
|
+
tags: {
|
|
197
|
+
...(commonRequestParameters?.tags || {}), // Ensure tags are defined
|
|
198
|
+
...(requestParameters?.tags || {}),
|
|
199
|
+
},
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { HeaderDemoAPIClient } from './headerDemoAPI.ts'
|
|
2
2
|
|
|
3
3
|
const baseUrl = '<BASE_URL>'
|
|
4
|
-
const client =
|
|
4
|
+
const client = new HeaderDemoAPIClient({ baseUrl })
|
|
5
5
|
|
|
6
6
|
export default function () {
|
|
7
7
|
/**
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Automatically generated by @grafana/openapi-to-k6: 0.2.0
|
|
3
|
+
* Do not edit manually.
|
|
4
|
+
* Header Demo API
|
|
5
|
+
* An API demonstrating the use of headers in different ways
|
|
6
|
+
* OpenAPI spec version: 1.0.0
|
|
7
|
+
*/
|
|
8
|
+
export type GetExampleResponseHeaders200 = {
|
|
9
|
+
status?: string
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export type PostExamplePostBody = {
|
|
13
|
+
data?: string
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export type PostExamplePostHeaders = {
|
|
17
|
+
/**
|
|
18
|
+
* Bearer token for authorization
|
|
19
|
+
*/
|
|
20
|
+
Authorization: string
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export type GetExampleGet200 = {
|
|
24
|
+
message?: string
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export type GetExampleGetHeaders = {
|
|
28
|
+
/**
|
|
29
|
+
* A custom header for this request
|
|
30
|
+
*/
|
|
31
|
+
'X-Custom-Header'?: string
|
|
32
|
+
}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Automatically generated by @grafana/openapi-to-k6: 0.2.0
|
|
3
|
+
* Do not edit manually.
|
|
4
|
+
* Header Demo API
|
|
5
|
+
* An API demonstrating the use of headers in different ways
|
|
6
|
+
* OpenAPI spec version: 1.0.0
|
|
7
|
+
*/
|
|
8
|
+
import { URL } from 'https://jslib.k6.io/url/1.0.0/index.js'
|
|
9
|
+
import http from 'k6/http'
|
|
10
|
+
import type { Params, Response } from 'k6/http'
|
|
11
|
+
import type {
|
|
12
|
+
GetExampleGet200,
|
|
13
|
+
GetExampleGetHeaders,
|
|
14
|
+
GetExampleResponseHeaders200,
|
|
15
|
+
PostExamplePostBody,
|
|
16
|
+
PostExamplePostHeaders,
|
|
17
|
+
} from './headerDemoAPI.schemas'
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* This is the base client to use for interacting with the API.
|
|
21
|
+
*/
|
|
22
|
+
export class HeaderDemoAPIClient {
|
|
23
|
+
private cleanBaseUrl: string
|
|
24
|
+
private commonRequestParameters: Params
|
|
25
|
+
|
|
26
|
+
constructor(clientOptions: {
|
|
27
|
+
baseUrl: string
|
|
28
|
+
commonRequestParameters?: Params
|
|
29
|
+
}) {
|
|
30
|
+
this.cleanBaseUrl = clientOptions.baseUrl.replace(/\/+$/, '')
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* This GET request demonstrates the use of custom request headers
|
|
35
|
+
* @summary GET request with headers
|
|
36
|
+
*/
|
|
37
|
+
getExampleGet(
|
|
38
|
+
headers?: GetExampleGetHeaders,
|
|
39
|
+
requestParameters?: Params
|
|
40
|
+
): {
|
|
41
|
+
response: Response
|
|
42
|
+
data: GetExampleGet200
|
|
43
|
+
} {
|
|
44
|
+
const url = new URL(this.cleanBaseUrl + `/example-get`)
|
|
45
|
+
const mergedRequestParameters = this._mergeRequestParameters(
|
|
46
|
+
requestParameters || {},
|
|
47
|
+
this.commonRequestParameters
|
|
48
|
+
)
|
|
49
|
+
const response = http.request('GET', url.toString(), undefined, {
|
|
50
|
+
...mergedRequestParameters,
|
|
51
|
+
headers: {
|
|
52
|
+
// In the schema, headers can be of any type like number but k6 accepts only strings as headers, hence converting all headers to string
|
|
53
|
+
...Object.fromEntries(
|
|
54
|
+
Object.entries(headers || {}).map(([key, value]) => [
|
|
55
|
+
key,
|
|
56
|
+
String(value),
|
|
57
|
+
])
|
|
58
|
+
),
|
|
59
|
+
...mergedRequestParameters?.headers,
|
|
60
|
+
},
|
|
61
|
+
})
|
|
62
|
+
let data
|
|
63
|
+
|
|
64
|
+
try {
|
|
65
|
+
data = response.json()
|
|
66
|
+
} catch {
|
|
67
|
+
data = response.body
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
response,
|
|
71
|
+
data,
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* This POST request uses a security header for authentication
|
|
77
|
+
* @summary POST request with security headers
|
|
78
|
+
*/
|
|
79
|
+
postExamplePost(
|
|
80
|
+
postExamplePostBody: PostExamplePostBody,
|
|
81
|
+
headers: PostExamplePostHeaders,
|
|
82
|
+
requestParameters?: Params
|
|
83
|
+
): {
|
|
84
|
+
response: Response
|
|
85
|
+
data: void
|
|
86
|
+
} {
|
|
87
|
+
const url = new URL(this.cleanBaseUrl + `/example-post`)
|
|
88
|
+
const mergedRequestParameters = this._mergeRequestParameters(
|
|
89
|
+
requestParameters || {},
|
|
90
|
+
this.commonRequestParameters
|
|
91
|
+
)
|
|
92
|
+
const response = http.request(
|
|
93
|
+
'POST',
|
|
94
|
+
url.toString(),
|
|
95
|
+
JSON.stringify(postExamplePostBody),
|
|
96
|
+
{
|
|
97
|
+
...mergedRequestParameters,
|
|
98
|
+
headers: {
|
|
99
|
+
'Content-Type': 'application/json',
|
|
100
|
+
// In the schema, headers can be of any type like number but k6 accepts only strings as headers, hence converting all headers to string
|
|
101
|
+
...Object.fromEntries(
|
|
102
|
+
Object.entries(headers || {}).map(([key, value]) => [
|
|
103
|
+
key,
|
|
104
|
+
String(value),
|
|
105
|
+
])
|
|
106
|
+
),
|
|
107
|
+
...mergedRequestParameters?.headers,
|
|
108
|
+
},
|
|
109
|
+
}
|
|
110
|
+
)
|
|
111
|
+
let data
|
|
112
|
+
|
|
113
|
+
try {
|
|
114
|
+
data = response.json()
|
|
115
|
+
} catch {
|
|
116
|
+
data = response.body
|
|
117
|
+
}
|
|
118
|
+
return {
|
|
119
|
+
response,
|
|
120
|
+
data,
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* This GET request returns custom response headers
|
|
126
|
+
* @summary GET request with response headers only
|
|
127
|
+
*/
|
|
128
|
+
getExampleResponseHeaders(requestParameters?: Params): {
|
|
129
|
+
response: Response
|
|
130
|
+
data: GetExampleResponseHeaders200
|
|
131
|
+
} {
|
|
132
|
+
const url = new URL(this.cleanBaseUrl + `/example-response-headers`)
|
|
133
|
+
const mergedRequestParameters = this._mergeRequestParameters(
|
|
134
|
+
requestParameters || {},
|
|
135
|
+
this.commonRequestParameters
|
|
136
|
+
)
|
|
137
|
+
const response = http.request(
|
|
138
|
+
'GET',
|
|
139
|
+
url.toString(),
|
|
140
|
+
undefined,
|
|
141
|
+
mergedRequestParameters
|
|
142
|
+
)
|
|
143
|
+
let data
|
|
144
|
+
|
|
145
|
+
try {
|
|
146
|
+
data = response.json()
|
|
147
|
+
} catch {
|
|
148
|
+
data = response.body
|
|
149
|
+
}
|
|
150
|
+
return {
|
|
151
|
+
response,
|
|
152
|
+
data,
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Merges the provided request parameters with default parameters for the client.
|
|
158
|
+
*
|
|
159
|
+
* @param {Params} requestParameters - The parameters provided specifically for the request
|
|
160
|
+
* @param {Params} commonRequestParameters - Common parameters for all requests
|
|
161
|
+
* @returns {Params} - The merged parameters
|
|
162
|
+
*/
|
|
163
|
+
private _mergeRequestParameters(
|
|
164
|
+
requestParameters?: Params,
|
|
165
|
+
commonRequestParameters?: Params
|
|
166
|
+
): Params {
|
|
167
|
+
return {
|
|
168
|
+
...commonRequestParameters, // Default to common parameters
|
|
169
|
+
...requestParameters, // Override with request-specific parameters
|
|
170
|
+
headers: {
|
|
171
|
+
...(commonRequestParameters?.headers || {}), // Ensure headers are defined
|
|
172
|
+
...(requestParameters?.headers || {}),
|
|
173
|
+
},
|
|
174
|
+
cookies: {
|
|
175
|
+
...(commonRequestParameters?.cookies || {}), // Ensure cookies are defined
|
|
176
|
+
...(requestParameters?.cookies || {}),
|
|
177
|
+
},
|
|
178
|
+
tags: {
|
|
179
|
+
...(commonRequestParameters?.tags || {}), // Ensure tags are defined
|
|
180
|
+
...(requestParameters?.tags || {}),
|
|
181
|
+
},
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { HeaderDemoAPIClient } from './headerDemoAPI.ts'
|
|
2
|
+
|
|
3
|
+
const baseUrl = '<BASE_URL>'
|
|
4
|
+
const client = new HeaderDemoAPIClient({ baseUrl })
|
|
5
|
+
|
|
6
|
+
export default function () {
|
|
7
|
+
/**
|
|
8
|
+
* GET request with headers
|
|
9
|
+
*/
|
|
10
|
+
const getExampleGetResponseData = client.getExampleGet()
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* POST request with security headers
|
|
14
|
+
*/
|
|
15
|
+
const postExamplePostResponseData = client.postExamplePost(
|
|
16
|
+
postExamplePostBody,
|
|
17
|
+
headers
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* GET request with response headers only
|
|
22
|
+
*/
|
|
23
|
+
const getExampleResponseHeadersResponseData =
|
|
24
|
+
client.getExampleResponseHeaders()
|
|
25
|
+
}
|