From b26ef3117f270fba4f99d8295c3c19d7bb9f2485 Mon Sep 17 00:00:00 2001 From: Dmitrii Gridnev Date: Wed, 2 Oct 2024 10:16:13 +0200 Subject: [PATCH] feature: added new parameter "autoCollectParams" This parameter affects the behavior of the reporter when collecting parameters. --- package-lock.json | 32 +++++++++++++++++++------------- qase-newman/changelog.md | 2 +- qase-newman/docs/usage.md | 25 +++++++++++++++++++++++-- qase-newman/package.json | 3 ++- qase-newman/src/configSchema.ts | 31 +++++++++++++++++++++++++++++++ qase-newman/src/options.ts | 3 +++ qase-newman/src/reporter.ts | 26 +++++++++++++++++++++----- 7 files changed, 100 insertions(+), 22 deletions(-) create mode 100644 qase-newman/src/configSchema.ts create mode 100644 qase-newman/src/options.ts diff --git a/package-lock.json b/package-lock.json index 8edd7d76..1d0832b3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3924,14 +3924,14 @@ } }, "node_modules/ajv": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", - "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dependencies": { "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -6922,6 +6922,11 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-uri": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.2.tgz", + "integrity": "sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row==" + }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", @@ -15168,7 +15173,7 @@ }, "qase-cucumberjs": { "name": "cucumberjs-qase-reporter", - "version": "2.0.1", + "version": "2.0.2", "license": "Apache-2.0", "dependencies": { "@cucumber/messages": "^22.0.0", @@ -15212,7 +15217,7 @@ } }, "qase-javascript-commons": { - "version": "2.2.0", + "version": "2.2.1", "license": "Apache-2.0", "dependencies": { "ajv": "^8.12.0", @@ -15275,12 +15280,12 @@ }, "qase-jest": { "name": "jest-qase-reporter", - "version": "2.0.2", + "version": "2.0.3", "license": "Apache-2.0", "dependencies": { "lodash.get": "^4.4.2", "lodash.has": "^4.5.2", - "qase-javascript-commons": "~2.2.0", + "qase-javascript-commons": "~2.2.1", "uuid": "^9.0.0" }, "devDependencies": { @@ -15336,7 +15341,7 @@ }, "qase-newman": { "name": "newman-reporter-qase", - "version": "2.0.1", + "version": "2.1.0", "license": "Apache-2.0", "dependencies": { "qase-javascript-commons": "~2.2.0", @@ -15345,8 +15350,9 @@ "devDependencies": { "@jest/globals": "^29.5.0", "@types/jest": "^29.5.2", - "@types/newman": "^5.3.3", + "@types/newman": "^5.3.6", "@types/postman-collection": "^3.5.7", + "ajv": "^8.17.1", "jest": "^29.5.0", "postman-collection": "^4.1.7", "ts-jest": "^29.1.0" @@ -15360,7 +15366,7 @@ }, "qase-playwright": { "name": "playwright-qase-reporter", - "version": "2.0.13", + "version": "2.0.15", "license": "Apache-2.0", "dependencies": { "chalk": "^4.1.2", @@ -15382,7 +15388,7 @@ }, "qase-testcafe": { "name": "testcafe-reporter-qase", - "version": "2.0.2", + "version": "2.0.3", "license": "Apache-2.0", "dependencies": { "qase-javascript-commons": "~2.2.0", diff --git a/qase-newman/changelog.md b/qase-newman/changelog.md index b627b1cd..75766c68 100644 --- a/qase-newman/changelog.md +++ b/qase-newman/changelog.md @@ -1,4 +1,4 @@ -# qase-newman@2.1.0 +# qase-newman@2.0.2 ## What's new diff --git a/qase-newman/docs/usage.md b/qase-newman/docs/usage.md index 9a8a40ed..a5b85172 100644 --- a/qase-newman/docs/usage.md +++ b/qase-newman/docs/usage.md @@ -55,5 +55,26 @@ When you run the tests, the following behavior is expected: - In the **`Status code is 201`** test, both `userId` and `user.name` will be passed as parameters. - In the **`Response has correct userId`** test, only the `userId` parameter will be passed. -- In the **`Response has correct name`** test, all relevant parameters from the data file will be passed, including - `userId`, `user.name`, and `user.age`. +- In the **`Response has correct name`** test, by default, test will not have any parameters passed. But you can enable + specific option in config file to pass all parameters from data file if test have not commented `qase.parameters` + line. + + ```json + { + "debug": true, + "testops": { + "api": { + "token": "api_key" + }, + "project": "project_code", + "run": { + "complete": true + } + }, + "framework": { + "newman": { + "autoCollectParams": true + } + } + } + ``` diff --git a/qase-newman/package.json b/qase-newman/package.json index 28961502..b0e60e82 100644 --- a/qase-newman/package.json +++ b/qase-newman/package.json @@ -1,6 +1,6 @@ { "name": "newman-reporter-qase", - "version": "2.1.0", + "version": "2.0.2", "description": "Qase TMS Newman Reporter", "main": "./dist/index.js", "types": "./dist/index.d.ts", @@ -47,6 +47,7 @@ "@types/jest": "^29.5.2", "@types/newman": "^5.3.6", "@types/postman-collection": "^3.5.7", + "ajv": "^8.17.1", "jest": "^29.5.0", "postman-collection": "^4.1.7", "ts-jest": "^29.1.0" diff --git a/qase-newman/src/configSchema.ts b/qase-newman/src/configSchema.ts new file mode 100644 index 00000000..d7328746 --- /dev/null +++ b/qase-newman/src/configSchema.ts @@ -0,0 +1,31 @@ +import { JSONSchemaType } from 'ajv'; + +import { FrameworkOptionsType } from 'qase-javascript-commons'; + +import { ReporterOptionsType } from './options'; + +export const configSchema: JSONSchemaType> = { + type: 'object', + nullable: true, + + properties: { + framework: { + type: 'object', + nullable: true, + + properties: { + newman: { + type: 'object', + nullable: true, + + properties: { + autoCollectParams: { + type: 'boolean', + nullable: true, + }, + }, + }, + }, + }, + }, +}; diff --git a/qase-newman/src/options.ts b/qase-newman/src/options.ts new file mode 100644 index 00000000..177a8ec1 --- /dev/null +++ b/qase-newman/src/options.ts @@ -0,0 +1,3 @@ +export interface ReporterOptionsType { + autoCollectParams?: boolean; +} diff --git a/qase-newman/src/reporter.ts b/qase-newman/src/reporter.ts index ed3ad628..4bc44326 100644 --- a/qase-newman/src/reporter.ts +++ b/qase-newman/src/reporter.ts @@ -1,5 +1,6 @@ import { EventEmitter } from 'events'; +import { configSchema } from './configSchema'; import semver from 'semver'; import { NewmanRunExecution, NewmanRunOptions } from 'newman'; import { EventList, PropertyBase, PropertyBaseDefinition } from 'postman-collection'; @@ -107,21 +108,30 @@ export class NewmanQaseReporter { * @private */ private reporter: ReporterInterface; + /** * @type {Map} * @private */ - private pendingResultMap = new Map(); + private pendingResultMap: Map = new Map(); + /** * @type {Map} * @private */ - private timerMap = new Map(); + private timerMap: Map = new Map(); + /** * @type {Record[]} * @private */ - private parameters: Record[] = []; + private readonly parameters: Record[] = []; + + /** + * @type {boolean} + * @private + */ + private autoCollectParams: boolean; /** * @param {EventEmitter} emitter @@ -133,7 +143,7 @@ export class NewmanQaseReporter { emitter: EventEmitter, options: NewmanQaseOptionsType, collectionOptions: NewmanRunOptions, - configLoader = new ConfigLoader(), + configLoader = new ConfigLoader(configSchema), ) { const config = configLoader.load(); @@ -144,6 +154,8 @@ export class NewmanQaseReporter { reporterName: 'newman-reporter-qase', }); + this.autoCollectParams = config?.framework?.newman?.autoCollectParams ?? false; + this.parameters = this.getParameters(collectionOptions.iterationData); this.addRunnerListeners(emitter); } @@ -305,7 +317,11 @@ export class NewmanQaseReporter { const params = NewmanQaseReporter.getParameters(events); if (params.length === 0) { - return availableParameters; + if (this.autoCollectParams) { + return availableParameters; + } + + return {}; } return params.reduce>((filteredParams, param) => {