@testomatio/reporter 0.6.0-beta.1 → 0.6.2
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/.eslintrc.js +2 -1
- package/.github/workflows/node.js.yml +1 -1
- package/Changelog.md +12 -0
- package/README.md +127 -4
- package/lib/adapter/cypress-plugin/index.js +2 -2
- package/lib/bin/reportXml.js +9 -8
- package/lib/bin/startTest.js +10 -2
- package/lib/junit-adapter/java.js +4 -4
- package/lib/junit-adapter/python.js +4 -4
- package/lib/junit-adapter/ruby.js +1 -3
- package/lib/util.js +5 -7
- package/lib/xmlReader.js +18 -14
- package/package.json +2 -1
- package/tests/data/codecept.xml +87 -87
package/.eslintrc.js
CHANGED
|
@@ -11,7 +11,7 @@ module.exports = {
|
|
|
11
11
|
SharedArrayBuffer: 'readonly',
|
|
12
12
|
},
|
|
13
13
|
parserOptions: {
|
|
14
|
-
ecmaVersion:
|
|
14
|
+
ecmaVersion: 2020,
|
|
15
15
|
},
|
|
16
16
|
rules: {
|
|
17
17
|
'max-len': ['error', { code: 120 }],
|
|
@@ -25,6 +25,7 @@ module.exports = {
|
|
|
25
25
|
'no-use-before-define': 0,
|
|
26
26
|
'object-curly-newline': 0,
|
|
27
27
|
'consistent-return': 0,
|
|
28
|
+
'no-await-in-loop': 0,
|
|
28
29
|
'no-param-reassign': 0,
|
|
29
30
|
'operator-linebreak': 0,
|
|
30
31
|
'prefer-destructuring': 0,
|
package/Changelog.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
# 0.6.2
|
|
2
|
+
|
|
3
|
+
* Added `--env-file` option to load env variables from env file
|
|
4
|
+
|
|
5
|
+
# 0.6.1
|
|
6
|
+
|
|
7
|
+
* Fixed creating RunGroup with JUnit reporter
|
|
8
|
+
|
|
9
|
+
# 0.6.0
|
|
10
|
+
|
|
11
|
+
* JUnit reporter support
|
|
12
|
+
|
|
1
13
|
# 0.5.10
|
|
2
14
|
|
|
3
15
|
* Fixed reporting Scenario Outline in Cypress-Cucumber
|
package/README.md
CHANGED
|
@@ -54,6 +54,9 @@ TESTOMATIO={API_KEY} npx start-test-run -c 'npx codeceptjs run-workers 2'
|
|
|
54
54
|
|
|
55
55
|
> Specify a command to run with `-c` option in `start-test-run`
|
|
56
56
|
|
|
57
|
+
Use `--env-file <envfile>` option to load environment variables from .env file. Inside env file TESTOMATIO credentials like `TESTOMATIO` api key or [S3 config](#attaching-test-artifacts) can be stored.
|
|
58
|
+
|
|
59
|
+
|
|
57
60
|
### Playwright
|
|
58
61
|
|
|
59
62
|
Add a reporter to Playwright config:
|
|
@@ -207,13 +210,13 @@ TESTOMATIO={API_KEY} npx @testomatio/reporter -c 'npx wdio wdio.conf.js'
|
|
|
207
210
|
|
|
208
211
|
## JUnit Reports
|
|
209
212
|
|
|
213
|
+
> **Notice** JUnit reports are supported since 0.6.0
|
|
214
|
+
|
|
210
215
|
Other frameworks and languages are supported via JUnit reports.
|
|
211
216
|
|
|
212
217
|
JUnit XML format is standard among test runners on various platforms. Testomat.io can load XML reports from test runners and create tests in a project from it. If your framework is not supported yet, generate JUnit report and upload it into Testomat.io
|
|
213
218
|
|
|
214
|
-
|
|
215
|
-
TESTOMATIO={API_KEY} npx @testomatio/reporter -c 'npx wdio wdio.conf.js'
|
|
216
|
-
```
|
|
219
|
+
Testomat.io will not only create a run report but also collect all information about tests, including source code, and create tests in a system as regular importer do. The only difference that normal process of Testomat.io import does not require executing tests on import, while importing via repoter requires to have tests executed and XML report provided.
|
|
217
220
|
|
|
218
221
|
Tested Frameworks:
|
|
219
222
|
|
|
@@ -223,6 +226,119 @@ Tested Frameworks:
|
|
|
223
226
|
* PHPUnit (PHP)
|
|
224
227
|
|
|
225
228
|
|
|
229
|
+
To import JUnit reports into Testomat.io **NodeJS >=14 is required**.
|
|
230
|
+
|
|
231
|
+
Package `@testomatio/reporter` should be installed:
|
|
232
|
+
|
|
233
|
+
```
|
|
234
|
+
npm i @testomatio/reporter@latest
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
For local development it is recommended to install @testomatio/reporter globally:
|
|
238
|
+
|
|
239
|
+
```
|
|
240
|
+
npm i -g @testomatio/reporter@latest
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
Run your test framework and generate a JUnit report.
|
|
244
|
+
|
|
245
|
+
Then import XML report into Testomat.io
|
|
246
|
+
|
|
247
|
+
```
|
|
248
|
+
TESTOMATIO={API_KEY} npx report-xml "{pattern}" --lang={lang}
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
* `pattern` - is a glob pattern to match all XML files from report. For instance, `"test/report/**.xml"` or just `report.xml`
|
|
252
|
+
* `--lang` option can be specified to identify source code of the project. Example: `--lang=Ruby` or `--lang=Java` or `--lang=Python`.
|
|
253
|
+
* `--java-tests` option is avaiable for Java projects, and can be set if path to tests is different then `src/test/java`. When this option is enable, `lang` option is automatically set to `java`
|
|
254
|
+
* `--env-file <envfile>` option to load environment variables from .env file. Inside env file TESTOMATIO credentials like `TESTOMATIO` api key or [S3 config](#attaching-test-artifacts) can be stored.
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
> *Notice:* All options from [Advanced Usage](#advanced-usage) are also available for JUnit reporter
|
|
258
|
+
|
|
259
|
+
Check the list of examples:
|
|
260
|
+
|
|
261
|
+
#### Example: Pytest
|
|
262
|
+
|
|
263
|
+
Run pytest tests and generate a report to `report.xml`:
|
|
264
|
+
|
|
265
|
+
```
|
|
266
|
+
pytest --junit-xml report.xml
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
Import report with this command
|
|
270
|
+
|
|
271
|
+
```
|
|
272
|
+
TESTOMATIO={API_KEY} npx report-xml report.xml --lang=python
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
#### Example: JUnit with Maven
|
|
276
|
+
|
|
277
|
+
Run tests via Maven, make sure JUnit report was configured in `pom.xml`.
|
|
278
|
+
|
|
279
|
+
```
|
|
280
|
+
mvn clean test
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
Import report with this command:
|
|
284
|
+
|
|
285
|
+
```
|
|
286
|
+
TESTOMATIO={API_KEY} npx report-xml "target/surefire-reports/*.xml" --java-tests
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
> You can specify `--java-test` option to set a path to tests if they are located in path other than `src/test/java`
|
|
290
|
+
|
|
291
|
+
#### Example: Ruby on Rails with Minitest
|
|
292
|
+
|
|
293
|
+
```ruby
|
|
294
|
+
# test_helper.rb:
|
|
295
|
+
|
|
296
|
+
reporters = [Minitest::Reporters::DefaultReporter.new(color: true)]
|
|
297
|
+
# enable JUnit reporter
|
|
298
|
+
reporters << Minitest::Reporters::JUnitReporter.new
|
|
299
|
+
|
|
300
|
+
Minitest::Reporters.use! reporters
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
Launch tests:
|
|
304
|
+
|
|
305
|
+
```
|
|
306
|
+
rails test
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
Import reports from `test/reports` directory:
|
|
310
|
+
|
|
311
|
+
```
|
|
312
|
+
TESTOMATIO={API_KEY} npx report-xml "test/reports/*.xml" --lang ruby
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
### Artifacts
|
|
316
|
+
|
|
317
|
+
Screenshots or videos from tests are uploaded if a test contains output with a path to file of following format:
|
|
318
|
+
|
|
319
|
+
```
|
|
320
|
+
file://path/to/screenshot.png
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
For instance, inside Java test you can use `System.out.println` to print a path to file that should be uploaded as a screenshot.
|
|
324
|
+
|
|
325
|
+
```java
|
|
326
|
+
System.out.println("file://" + pathToScreenshot);
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
This will produce XML report which contains path to a file:
|
|
330
|
+
|
|
331
|
+
```xml
|
|
332
|
+
<testcase>
|
|
333
|
+
<system-out><![CDATA[
|
|
334
|
+
file://path/to/scrrenshot.png
|
|
335
|
+
]]></system-out>
|
|
336
|
+
</testcase>
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
When uploaded XML report, all files from `file://` will be uploaded to corresponding tests.
|
|
340
|
+
|
|
341
|
+
|
|
226
342
|
## Advanced Usage
|
|
227
343
|
|
|
228
344
|
### Create Unmatched Tests
|
|
@@ -326,7 +442,14 @@ S3_FORCE_PATH_STYLE=true
|
|
|
326
442
|
|
|
327
443
|
> It is important to add S3_FORCE_PATH_STYLE var for minio setup
|
|
328
444
|
|
|
329
|
-
For local testing, it is recommended to store
|
|
445
|
+
For local testing, it is recommended to store configuration in `.env` file. If you load configuration from a test runner, use [dotenv](https://www.npmjs.com/package/dotenv) library to load it.
|
|
446
|
+
|
|
447
|
+
If you run a reporter via `start-test-run` or `report-xml` command use `--env-file` option to load variables from .env file:
|
|
448
|
+
|
|
449
|
+
```
|
|
450
|
+
npx start-test-run --env-file .env
|
|
451
|
+
npx report-xml --env-file .env
|
|
452
|
+
```
|
|
330
453
|
|
|
331
454
|
On CI set environment variables in CI config.
|
|
332
455
|
|
|
@@ -29,7 +29,7 @@ const testomatioReporter = on => {
|
|
|
29
29
|
const error = latestAttempt.error;
|
|
30
30
|
|
|
31
31
|
let title = test.title.pop();
|
|
32
|
-
|
|
32
|
+
const examples = title.match(/\(example (#\d+)\)/);
|
|
33
33
|
let example = null;
|
|
34
34
|
if (examples && examples[1]) example = { example: examples[1] };
|
|
35
35
|
title = title.replace(/\(example #\d+\)/, '').trim();
|
|
@@ -40,7 +40,7 @@ const testomatioReporter = on => {
|
|
|
40
40
|
const suiteId = parseSuite(suiteTitle);
|
|
41
41
|
|
|
42
42
|
if (error) {
|
|
43
|
-
error.inspect = function() {
|
|
43
|
+
error.inspect = function() { // eslint-disable-line func-names
|
|
44
44
|
if (this && this.codeFrame) {
|
|
45
45
|
return this.codeFrame.frame;
|
|
46
46
|
}
|
package/lib/bin/reportXml.js
CHANGED
|
@@ -1,31 +1,32 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
const program = require("commander");
|
|
3
|
-
|
|
3
|
+
const chalk = require("chalk");
|
|
4
4
|
const glob = require('glob');
|
|
5
5
|
|
|
6
6
|
const { APP_PREFIX } = require('../constants');
|
|
7
7
|
const XmlReader = require("../xmlReader");
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
// console.log(chalk.cyan.bold(` 🤩 xmlReader by Testomat.io v${version}`));
|
|
9
|
+
const { version } = require('../../package.json');
|
|
10
|
+
console.log(chalk.cyan.bold(` 🤩 Testomat.io XML Reporter v${version}`));
|
|
13
11
|
|
|
14
12
|
program
|
|
15
13
|
.arguments("<pattern>")
|
|
16
14
|
.option("-d, --dir <dir>", "Project directory")
|
|
17
15
|
.option("--java-tests [java-path]", "Load Java tests from path, by default: src/test/java")
|
|
18
16
|
.option("--lang <lang>", "Language used (python, ruby, java)")
|
|
17
|
+
.option("--env-file <envfile>", "Load environment variables from env file")
|
|
19
18
|
.action(async (pattern, opts) => {
|
|
20
19
|
if (!pattern.endsWith('.xml')) {
|
|
21
20
|
pattern += '.xml';
|
|
22
21
|
}
|
|
23
22
|
let { javaTests, lang } = opts;
|
|
23
|
+
if (opts.envFile) require('dotenv').config(opts.envFile);
|
|
24
24
|
if (javaTests === true) javaTests = 'src/test/java';
|
|
25
|
+
lang = lang?.toLowerCase();
|
|
25
26
|
const runReader = new XmlReader({ javaTests, lang });
|
|
26
27
|
const files = glob.sync(pattern, { cwd: opts.dir || process.cwd() });
|
|
27
28
|
if (!files.length) {
|
|
28
|
-
console.log(APP_PREFIX
|
|
29
|
+
console.log(APP_PREFIX, `Report can't be created. No XML files found 😥`);
|
|
29
30
|
process.exitCode = 1;
|
|
30
31
|
return;
|
|
31
32
|
}
|
|
@@ -39,11 +40,11 @@ program
|
|
|
39
40
|
await runReader.uploadData();
|
|
40
41
|
} catch (err) {
|
|
41
42
|
console.log(APP_PREFIX, 'Error updating status, skipping...', err);
|
|
43
|
+
process.exitCode = 1;
|
|
42
44
|
}
|
|
43
45
|
});
|
|
44
46
|
|
|
45
|
-
|
|
46
|
-
if (process.argv.length < 1) {
|
|
47
|
+
if (process.argv.length < 3) {
|
|
47
48
|
program.outputHelp();
|
|
48
49
|
}
|
|
49
50
|
|
package/lib/bin/startTest.js
CHANGED
|
@@ -5,15 +5,22 @@ const chalk = require('chalk');
|
|
|
5
5
|
const TestomatClient = require('../client');
|
|
6
6
|
const { APP_PREFIX, FINISHED } = require('../constants');
|
|
7
7
|
|
|
8
|
-
const
|
|
9
|
-
|
|
8
|
+
const { version } = require('../../package.json');
|
|
9
|
+
console.log(chalk.cyan.bold(` 🤩 Testomat.io Reporter v${version}`));
|
|
10
|
+
|
|
10
11
|
|
|
11
12
|
program
|
|
12
13
|
.option('-c, --command <cmd>', 'Test runner command')
|
|
13
14
|
.option('--launch', 'Start a new run and return its ID')
|
|
14
15
|
.option('--finish', 'Finish Run by its ID')
|
|
16
|
+
.option("--env-file <envfile>", "Load environment variables from env file")
|
|
15
17
|
.action(opts => {
|
|
18
|
+
|
|
16
19
|
const { command, launch, finish } = opts;
|
|
20
|
+
if (opts.envFile) require('dotenv').config(opts.envFile);
|
|
21
|
+
|
|
22
|
+
const apiKey = process.env['INPUT_TESTOMATIO-KEY'] || process.env.TESTOMATIO;
|
|
23
|
+
const title = process.env.TESTOMATIO_TITLE;
|
|
17
24
|
|
|
18
25
|
if (launch) {
|
|
19
26
|
console.log('Starting a new Run on Testomat.io...');
|
|
@@ -45,6 +52,7 @@ program
|
|
|
45
52
|
|
|
46
53
|
let exitCode = 0;
|
|
47
54
|
|
|
55
|
+
if (command) return;
|
|
48
56
|
const testCmds = command.split(' ');
|
|
49
57
|
console.log(APP_PREFIX, `🚀 Running`, chalk.green(command));
|
|
50
58
|
|
|
@@ -20,20 +20,20 @@ class JavaAdapter extends Adapter {
|
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
formatStack(t) {
|
|
23
|
-
|
|
23
|
+
const stack = super.formatStack(t);
|
|
24
24
|
|
|
25
25
|
const file = t.suite_title.split('.');
|
|
26
26
|
|
|
27
|
-
const fileLine = `at .*${file[file.length - 1]}\.java
|
|
27
|
+
const fileLine = `at .*${file[file.length - 1]}\.java:(\\d+)` // eslint-disable-line no-useless-escape
|
|
28
28
|
const regexp = new RegExp(fileLine,"g")
|
|
29
29
|
return stack.replace(regexp, `${this.opts.javaTests}${path.sep}${namespaceToFileName(t.suite_title)}:$1:`);
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
function namespaceToFileName(fileName) {
|
|
34
|
-
|
|
34
|
+
const fileParts = fileName.split('.')
|
|
35
35
|
fileParts[fileParts.length - 1] = fileParts[fileParts.length - 1]?.replace(/\$.*/, '')
|
|
36
|
-
return fileParts.join(path.sep)
|
|
36
|
+
return `${fileParts.join(path.sep) }.java`;
|
|
37
37
|
|
|
38
38
|
}
|
|
39
39
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const path = require('path');
|
|
2
|
-
const Adapter = require('./adapter');
|
|
3
2
|
const fs = require('fs');
|
|
3
|
+
const Adapter = require('./adapter');
|
|
4
4
|
|
|
5
5
|
class PythonAdapter extends Adapter {
|
|
6
6
|
|
|
@@ -27,11 +27,11 @@ class PythonAdapter extends Adapter {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
function namespaceToFileName(fileName) {
|
|
30
|
-
|
|
30
|
+
const fileParts = fileName.split('.')
|
|
31
31
|
|
|
32
32
|
while (fileParts.length > 0) {
|
|
33
|
-
const file = fileParts.join(path.sep)
|
|
34
|
-
if (fs.existsSync(fileParts.join(path.sep)
|
|
33
|
+
const file = `${fileParts.join(path.sep) }.py`;
|
|
34
|
+
if (fs.existsSync(`${fileParts.join(path.sep) }.py`)) {
|
|
35
35
|
return file;
|
|
36
36
|
}
|
|
37
37
|
fileParts.pop();
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
const path = require('path');
|
|
2
1
|
const Adapter = require('./adapter');
|
|
3
|
-
const fs = require('fs');
|
|
4
2
|
|
|
5
3
|
class RubyAdapter extends Adapter {
|
|
6
4
|
|
|
7
5
|
formatStack(t) {
|
|
8
6
|
const stack = super.formatStack(t);
|
|
9
|
-
return stack.replace(/\[(
|
|
7
|
+
return stack.replace(/\[(.*?:.\d*)\]/g, '\n$1')
|
|
10
8
|
}
|
|
11
9
|
}
|
|
12
10
|
|
package/lib/util.js
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
const { fstat } = require('fs');
|
|
2
|
-
const { includes, split } = require('lodash');
|
|
3
1
|
const { URL } = require('url');
|
|
4
2
|
const { sep } = require('path');
|
|
5
3
|
const chalk = require('chalk');
|
|
@@ -69,8 +67,8 @@ const fetchSourceCodeFromStackTrace = (stack = '') => {
|
|
|
69
67
|
.filter(l => isValid(l.split(':')[0]))
|
|
70
68
|
|
|
71
69
|
// // filter out 3rd party libs
|
|
72
|
-
.filter(l => !l.includes(
|
|
73
|
-
.filter(l => !l.includes(
|
|
70
|
+
.filter(l => !l.includes(`vendor${ sep}`))
|
|
71
|
+
.filter(l => !l.includes(`node_modules${ sep}`))
|
|
74
72
|
.filter(l => fs.existsSync(l.split(':')[0]))
|
|
75
73
|
.filter(l => fs.lstatSync(l.split(':')[0]).isFile())
|
|
76
74
|
|
|
@@ -99,7 +97,7 @@ const fetchSourceCode = (contents, opts = {}) => {
|
|
|
99
97
|
|
|
100
98
|
// remove special chars from title
|
|
101
99
|
if (!lineIndex && opts.title) {
|
|
102
|
-
const title = opts.title.replace(/[
|
|
100
|
+
const title = opts.title.replace(/[([@].*/g, '')
|
|
103
101
|
lineIndex = lines.findIndex(l => l.includes(title))
|
|
104
102
|
}
|
|
105
103
|
|
|
@@ -118,7 +116,7 @@ const fetchSourceCode = (contents, opts = {}) => {
|
|
|
118
116
|
if (opts.lang === 'php' && lines[i].includes(' private function ')) break;
|
|
119
117
|
if (opts.lang === 'php' && lines[i].includes(' protected function ')) break;
|
|
120
118
|
if (opts.lang === 'php' && lines[i].includes(' public function ')) break;
|
|
121
|
-
if (opts.lang === 'python' && lines[i].trim().match(
|
|
119
|
+
if (opts.lang === 'python' && lines[i].trim().match(/^@\w+/)) break;
|
|
122
120
|
if (opts.lang === 'python' && lines[i].includes(' def ')) break;
|
|
123
121
|
if (opts.lang === 'ruby' && lines[i].includes(' def ')) break;
|
|
124
122
|
if (opts.lang === 'ruby' && lines[i].includes(' test ')) break;
|
|
@@ -129,7 +127,7 @@ const fetchSourceCode = (contents, opts = {}) => {
|
|
|
129
127
|
if (opts.lang === 'ts' && lines[i].includes(' test(')) break;
|
|
130
128
|
if (opts.lang === 'js' && lines[i].includes(' it(')) break;
|
|
131
129
|
if (opts.lang === 'js' && lines[i].includes(' test(')) break;
|
|
132
|
-
if (opts.lang === 'java' && lines[i].trim().match(
|
|
130
|
+
if (opts.lang === 'java' && lines[i].trim().match(/^@\w+/)) break;
|
|
133
131
|
if (opts.lang === 'java' && lines[i].includes(' public void ')) break;
|
|
134
132
|
if (opts.lang === 'java' && lines[i].includes(' class ')) break;
|
|
135
133
|
}
|
package/lib/xmlReader.js
CHANGED
|
@@ -52,7 +52,7 @@ class XmlReader {
|
|
|
52
52
|
if (this.opts.javaTests || this.stats.language === 'java') {
|
|
53
53
|
this.adapter = new JavaAdapter(this.opts);
|
|
54
54
|
}
|
|
55
|
-
if (this.stats.language
|
|
55
|
+
if (this.stats.language === 'js') {
|
|
56
56
|
this.adapter = new JavaScriptAdapter(this.opts);
|
|
57
57
|
}
|
|
58
58
|
if (this.stats.language === 'python') {
|
|
@@ -76,7 +76,7 @@ class XmlReader {
|
|
|
76
76
|
console.log(jsonResult)
|
|
77
77
|
throw new Error("Format can't be parsed")
|
|
78
78
|
}
|
|
79
|
-
const { testsuite, name, tests, failures, errors
|
|
79
|
+
const { testsuite, name, tests, failures, errors } = jsonSuite;
|
|
80
80
|
|
|
81
81
|
const resultTests = processTestSuite(testsuite);
|
|
82
82
|
|
|
@@ -120,7 +120,7 @@ class XmlReader {
|
|
|
120
120
|
fetchSourceCode() {
|
|
121
121
|
this.tests.forEach(t => {
|
|
122
122
|
try {
|
|
123
|
-
|
|
123
|
+
const file = this.adapter.getFilePath(t)
|
|
124
124
|
if (!file) return;
|
|
125
125
|
|
|
126
126
|
if (!this.stats.language) {
|
|
@@ -135,7 +135,7 @@ class XmlReader {
|
|
|
135
135
|
const contents = fs.readFileSync(file).toString();
|
|
136
136
|
t.code = fetchSourceCode(contents, { ...t, lang: this.stats.language })
|
|
137
137
|
} catch (err) {
|
|
138
|
-
if (process.env
|
|
138
|
+
if (process.env.DEBUG) {
|
|
139
139
|
console.log(err)
|
|
140
140
|
}
|
|
141
141
|
}
|
|
@@ -173,20 +173,22 @@ class XmlReader {
|
|
|
173
173
|
}
|
|
174
174
|
|
|
175
175
|
formatStack(t) {
|
|
176
|
-
|
|
176
|
+
const stack = this.adapter.formatStack(t);
|
|
177
177
|
|
|
178
178
|
const sourcePart = fetchSourceCodeFromStackTrace(stack);
|
|
179
179
|
|
|
180
180
|
if (!sourcePart) return stack;
|
|
181
181
|
|
|
182
|
-
|
|
182
|
+
const separator = chalk.bold.red('################[ Failure ]################');
|
|
183
|
+
|
|
184
|
+
return `${stack}\n\n${separator}\n${fetchSourceCodeFromStackTrace(stack)}`;
|
|
183
185
|
}
|
|
184
186
|
|
|
185
187
|
async uploadArtifacts() {
|
|
186
188
|
if (!this.runId) return;
|
|
187
|
-
for (const
|
|
188
|
-
const files = fetchFilesFromStackTrace(
|
|
189
|
-
|
|
189
|
+
for (const test of this.tests.filter(t => !!t.stack)) {
|
|
190
|
+
const files = fetchFilesFromStackTrace(test.stack);
|
|
191
|
+
test.artifacts = await Promise.all(files.map(f => upload.uploadFileByPath(f, this.runId)));
|
|
190
192
|
}
|
|
191
193
|
}
|
|
192
194
|
|
|
@@ -197,9 +199,11 @@ class XmlReader {
|
|
|
197
199
|
api_key: this.requestParams.apiKey,
|
|
198
200
|
title: this.requestParams.title,
|
|
199
201
|
env: this.requestParams.env,
|
|
200
|
-
group_title: this.requestParams.
|
|
202
|
+
group_title: this.requestParams.group_title,
|
|
201
203
|
};
|
|
202
204
|
|
|
205
|
+
if (process.env.DEBUG) console.log("Run", runParams);
|
|
206
|
+
|
|
203
207
|
try {
|
|
204
208
|
const resp = await this.axios.post(this.url, runParams, {
|
|
205
209
|
maxContentLength: Infinity,
|
|
@@ -234,7 +238,7 @@ class XmlReader {
|
|
|
234
238
|
this.formatErrors();
|
|
235
239
|
this.formatTests();
|
|
236
240
|
|
|
237
|
-
if (process.env
|
|
241
|
+
if (process.env.DEBUG) {
|
|
238
242
|
console.log({
|
|
239
243
|
...this.stats,
|
|
240
244
|
tests: this.tests,
|
|
@@ -284,7 +288,7 @@ class XmlReader {
|
|
|
284
288
|
if (!isValidUrl(this.requestParams.url)) {
|
|
285
289
|
console.log(
|
|
286
290
|
APP_PREFIX,
|
|
287
|
-
chalk.red(`Error creating report on Testomat.io, report url '${
|
|
291
|
+
chalk.red(`Error creating report on Testomat.io, report url '${this.requestParams.url}' is invalid`),
|
|
288
292
|
);
|
|
289
293
|
return;
|
|
290
294
|
}
|
|
@@ -302,7 +306,7 @@ function reduceTestCases(prev, item) {
|
|
|
302
306
|
testCases = [testCases]
|
|
303
307
|
}
|
|
304
308
|
testCases.filter(t => !!t).forEach(testCaseItem => {
|
|
305
|
-
|
|
309
|
+
const file = testCaseItem.file || item.filepath || '';
|
|
306
310
|
|
|
307
311
|
let stack = '';
|
|
308
312
|
let message = '';
|
|
@@ -316,7 +320,7 @@ function reduceTestCases(prev, item) {
|
|
|
316
320
|
if (!message) message = stack.trim().split('\n')[0];
|
|
317
321
|
|
|
318
322
|
// prepend system output
|
|
319
|
-
stack = `${testCaseItem['system-out'] || testCaseItem
|
|
323
|
+
stack = `${testCaseItem['system-out'] || testCaseItem.log || ''}\n\n${stack}`.trim()
|
|
320
324
|
|
|
321
325
|
prev.push({
|
|
322
326
|
create: true,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@testomatio/reporter",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.2",
|
|
4
4
|
"description": "Testomatio Reporter Client",
|
|
5
5
|
"main": "./lib/reporter.js",
|
|
6
6
|
"repository": "git@github.com:testomatio/reporter.git",
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
"callsite-record": "^4.1.4",
|
|
13
13
|
"chalk": "^4.1.0",
|
|
14
14
|
"commander": "^4.1.1",
|
|
15
|
+
"dotenv": "^16.0.1",
|
|
15
16
|
"fast-xml-parser": "^4.0.8",
|
|
16
17
|
"glob": "^8.0.3",
|
|
17
18
|
"has-flag": "^5.0.1",
|
package/tests/data/codecept.xml
CHANGED
|
@@ -2,96 +2,96 @@
|
|
|
2
2
|
<testsuites>
|
|
3
3
|
<testsuite name="cli" tests="89" assertions="881" errors="0" failures="10" skipped="2" useless="0" time="20.333714">
|
|
4
4
|
|
|
5
|
-
<testcase name="runCestWithTwoFailedTest" class="RunCest" file="/
|
|
6
|
-
<testcase name="runHtml" class="RunCest" file="/
|
|
7
|
-
<testcase name="runTestWithArrayExamples" class="RunCest" file="/
|
|
8
|
-
<testcase name="throwErrorIfBootstrapNotFound" class="RunCest" file="/
|
|
9
|
-
<testcase name="runOneFile" class="RunCest" file="/
|
|
10
|
-
<testcase name="runOneGroupByAttr" class="RunCest" file="/
|
|
11
|
-
<testcase name="runOneGroupWithDataProviders" class="RunCest" file="/
|
|
12
|
-
<testcase name="filterCestsByDataProviderNumber" class="RunCest" file="/
|
|
13
|
-
<testcase name="runGherkinTest" class="RunCest" file="/
|
|
14
|
-
<testcase name="runTestWithSubSteps" class="RunCest" file="/
|
|
5
|
+
<testcase name="runCestWithTwoFailedTest" class="RunCest" file="tests/data/cli/RunCest.php" feature="run cest with two failed test" time="0.119537" assertions="4"/>
|
|
6
|
+
<testcase name="runHtml" class="RunCest" file="tests/data/cli/RunCest.php" feature="execute tests with html output" time="0.116880" assertions="1"/>
|
|
7
|
+
<testcase name="runTestWithArrayExamples" class="RunCest" file="tests/data/cli/RunCest.php" feature="run test with array examples" time="0.096469" assertions="4"/>
|
|
8
|
+
<testcase name="throwErrorIfBootstrapNotFound" class="RunCest" file="tests/data/cli/RunCest.php" feature="execute one test" time="0.078476" assertions="3"/>
|
|
9
|
+
<testcase name="runOneFile" class="RunCest" file="tests/data/cli/RunCest.php" feature="execute one test" time="0.082889" assertions="1"/>
|
|
10
|
+
<testcase name="runOneGroupByAttr" class="RunCest" file="tests/data/cli/RunCest.php" feature="run one group by attr" time="0.105880" assertions="2"/>
|
|
11
|
+
<testcase name="runOneGroupWithDataProviders" class="RunCest" file="tests/data/cli/RunCest.php" feature="run one group with data providers" time="0.107412" assertions="5"/>
|
|
12
|
+
<testcase name="filterCestsByDataProviderNumber" class="RunCest" file="tests/data/cli/RunCest.php" feature="filter cests by data provider number" time="0.087259" assertions="4"/>
|
|
13
|
+
<testcase name="runGherkinTest" class="RunCest" file="tests/data/cli/RunCest.php" feature="run gherkin test" time="0.107440" assertions="7"/>
|
|
14
|
+
<testcase name="runTestWithSubSteps" class="RunCest" file="tests/data/cli/RunCest.php" feature="run test with sub steps" time="0.000815" assertions="0">
|
|
15
15
|
<skipped/>
|
|
16
16
|
</testcase>
|
|
17
|
-
<testcase name="runWithDepends" class="RunCest" file="/
|
|
18
|
-
<testcase name="runTestsByShards" class="RunCest" file="/
|
|
19
|
-
<testcase name="runErrorTest" class="RunCest" file="/
|
|
20
|
-
<testcase name="runOneFileWithColors" class="RunCest" file="/
|
|
21
|
-
<testcase name="runTestsDoesntFail" class="RunCest" file="/
|
|
22
|
-
<testcase name="filterCestsByExampleNumber" class="RunCest" file="/
|
|
23
|
-
<testcase name="runTestWithAnnotationExamples" class="RunCest" file="/
|
|
24
|
-
<testcase name="runDependentCest" class="RunCest" file="/
|
|
25
|
-
<testcase name="runTestWithAnnotationDataprovider" class="RunCest" file="/
|
|
26
|
-
<testcase name="runGherkinScenarioWithMultipleStepDefinitions" class="RunCest" file="/
|
|
27
|
-
<testcase name="runOneGroup" class="RunCest" file="/
|
|
28
|
-
<testcase name="runTestsWithFilterDoesntFail" class="RunCest" file="/
|
|
29
|
-
<testcase name="runTestWithJsonExamples" class="RunCest" file="/
|
|
30
|
-
<testcase name="runWithBeforeAfter" class="RunCest" file="/
|
|
31
|
-
<testcase name="skipGroupOfCest" class="RunCest" file="/
|
|
32
|
-
<testcase name="testsWithConditionalFails" class="RunCest" file="/
|
|
33
|
-
<testcase name="runWithUnitSkipped" class="RunCest" file="/
|
|
34
|
-
<testcase name="runHtmlCheckReport" class="RunCest" file="/
|
|
35
|
-
<testcase name="runHtmlCheckReport" class="RunCest" file="/
|
|
36
|
-
<testcase name="runHtmlCheckReport" class="RunCest" file="/
|
|
37
|
-
<testcase name="runHtmlCheckReport" class="RunCest" file="/
|
|
38
|
-
<testcase name="runHtmlCheckReport" class="RunCest" file="/
|
|
39
|
-
<testcase name="runHtmlCheckReport" class="RunCest" file="/
|
|
40
|
-
<testcase name="runHtmlCheckReport" class="RunCest" file="/
|
|
41
|
-
<testcase name="runHtmlCheckReport" class="RunCest" file="/
|
|
42
|
-
<testcase name="runHtmlCheckReport" class="RunCest" file="/
|
|
43
|
-
<testcase name="runHtmlCheckReport" class="RunCest" file="/
|
|
44
|
-
<testcase name="runHtmlCheckReport" class="RunCest" file="/
|
|
45
|
-
<testcase name="runHtmlCheckReport" class="RunCest" file="/
|
|
46
|
-
<testcase name="runHtmlCheckReport" class="RunCest" file="/
|
|
47
|
-
<testcase name="runTestsWithSteps" class="RunCest" file="/
|
|
48
|
-
<testcase name="runWithDataprovider" class="RunCest" file="/
|
|
49
|
-
<testcase name="runXmlReport" class="RunCest" file="/
|
|
50
|
-
<testcase name="runTestsWithGrep" class="RunCest" file="/
|
|
51
|
-
<testcase name="runHtmlWithPhpBrowserCheckReport" class="RunCest" file="/
|
|
52
|
-
<testcase name="skipRunOneGroup" class="RunCest" file="/
|
|
53
|
-
<testcase name="runTestsWithFilter" class="RunCest" file="/
|
|
54
|
-
<testcase name="runGherkinScenarioOutline" class="RunCest" file="/
|
|
55
|
-
<testcase name="runTestsWithDependencyInjections" class="RunCest" file="/
|
|
56
|
-
<testcase name="runWithExamples" class="RunCest" file="/
|
|
57
|
-
<testcase name="runPhpUnitXmlReport" class="RunCest" file="/
|
|
58
|
-
<testcase name="runInvalidDataProvider" class="RunCest" file="/
|
|
59
|
-
<testcase name="runTestWithDataProviders" class="RunCest" file="/
|
|
60
|
-
<testcase name="runFailingGherkinTest" class="RunCest" file="/
|
|
61
|
-
<testcase name="showSameOrderOfFilesOnSeed" class="RunCest" file="/
|
|
62
|
-
<testcase name="runWithUnitIncomplete" class="RunCest" file="/
|
|
63
|
-
<testcase name="showSeedNumberOnShuffle" class="RunCest" file="/
|
|
64
|
-
<testcase name="filterTestsByDataProviderCaseNumber" class="RunCest" file="/
|
|
65
|
-
<testcase name="runTwoSuites" class="RunCest" file="/
|
|
66
|
-
<testcase name="runCustomBootstrap" class="RunCest" file="/
|
|
67
|
-
<testcase name="runOneTestFromCest" class="RunCest" file="/
|
|
68
|
-
<testcase name="runTestWithFailedScenario" class="RunCest" file="/
|
|
17
|
+
<testcase name="runWithDepends" class="RunCest" file="tests/data/cli/RunCest.php" feature="run with depends" time="0.083950" assertions="1"/>
|
|
18
|
+
<testcase name="runTestsByShards" class="RunCest" file="tests/data/cli/RunCest.php" feature="run tests by shards" time="0.273580" assertions="9"/>
|
|
19
|
+
<testcase name="runErrorTest" class="RunCest" file="tests/data/cli/RunCest.php" feature="run error test" time="0.098815" assertions="3"/>
|
|
20
|
+
<testcase name="runOneFileWithColors" class="RunCest" file="tests/data/cli/RunCest.php" feature="execute one test" time="0.084870" assertions="2"/>
|
|
21
|
+
<testcase name="runTestsDoesntFail" class="RunCest" file="tests/data/cli/RunCest.php" feature="run tests doesnt fail" time="0.089660" assertions="1"/>
|
|
22
|
+
<testcase name="filterCestsByExampleNumber" class="RunCest" file="tests/data/cli/RunCest.php" feature="filter cests by example number" time="0.099362" assertions="5"/>
|
|
23
|
+
<testcase name="runTestWithAnnotationExamples" class="RunCest" file="tests/data/cli/RunCest.php" feature="run test with annotation examples" time="0.082711" assertions="4"/>
|
|
24
|
+
<testcase name="runDependentCest" class="RunCest" file="tests/data/cli/RunCest.php" feature="run dependent cest" time="0.081131" assertions="1"/>
|
|
25
|
+
<testcase name="runTestWithAnnotationDataprovider" class="RunCest" file="tests/data/cli/RunCest.php" feature="run test with annotation dataprovider" time="0.160254" assertions="1"/>
|
|
26
|
+
<testcase name="runGherkinScenarioWithMultipleStepDefinitions" class="RunCest" file="tests/data/cli/RunCest.php" feature="run gherkin scenario with multiple step definitions" time="0.088234" assertions="4"/>
|
|
27
|
+
<testcase name="runOneGroup" class="RunCest" file="tests/data/cli/RunCest.php" feature="run one group" time="0.076610" assertions="3"/>
|
|
28
|
+
<testcase name="runTestsWithFilterDoesntFail" class="RunCest" file="tests/data/cli/RunCest.php" feature="run tests with filter doesnt fail" time="0.159520" assertions="2"/>
|
|
29
|
+
<testcase name="runTestWithJsonExamples" class="RunCest" file="tests/data/cli/RunCest.php" feature="run test with json examples" time="0.082773" assertions="4"/>
|
|
30
|
+
<testcase name="runWithBeforeAfter" class="RunCest" file="tests/data/cli/RunCest.php" feature="run with before after" time="0.078491" assertions="4"/>
|
|
31
|
+
<testcase name="skipGroupOfCest" class="RunCest" file="tests/data/cli/RunCest.php" feature="skip group of cest" time="0.170683" assertions="5"/>
|
|
32
|
+
<testcase name="testsWithConditionalFails" class="RunCest" file="tests/data/cli/RunCest.php" feature="tests with conditional fails" time="0.097338" assertions="4"/>
|
|
33
|
+
<testcase name="runWithUnitSkipped" class="RunCest" file="tests/data/cli/RunCest.php" feature="run with unit skipped" time="0.097461" assertions="1"/>
|
|
34
|
+
<testcase name="runHtmlCheckReport" class="RunCest" file="tests/data/cli/RunCest.php" feature="verify that all steps are rendered correctly in HTML report (' . $test . ') | "CodeceptionIssue4413Cest:twoCommentStepsInARow"" time="0.073369" assertions="2"/>
|
|
35
|
+
<testcase name="runHtmlCheckReport" class="RunCest" file="tests/data/cli/RunCest.php" feature="verify that all steps are rendered correctly in HTML report (' . $test . ') | "CodeceptionIssue4413Cest:twoCommentStepsInARowViaPageObjectActor"" time="0.072299" assertions="2"/>
|
|
36
|
+
<testcase name="runHtmlCheckReport" class="RunCest" file="tests/data/cli/RunCest.php" feature="verify that all steps are rendered correctly in HTML report (' . $test . ') | "CodeceptionIssue4413Cest:twoCommentStepsWithOneSubStepInBetween"" time="0.096977" assertions="2"/>
|
|
37
|
+
<testcase name="runHtmlCheckReport" class="RunCest" file="tests/data/cli/RunCest.php" feature="verify that all steps are rendered correctly in HTML report (' . $test . ') | "CodeceptionIssue4413Cest:commentStepsWithDifferentSubStepsInBetweenAndAfter"" time="0.076719" assertions="2"/>
|
|
38
|
+
<testcase name="runHtmlCheckReport" class="RunCest" file="tests/data/cli/RunCest.php" feature="verify that all steps are rendered correctly in HTML report (' . $test . ') | "CodeceptionIssue4413Cest:differentSubSteps"" time="0.075144" assertions="2"/>
|
|
39
|
+
<testcase name="runHtmlCheckReport" class="RunCest" file="tests/data/cli/RunCest.php" feature="verify that all steps are rendered correctly in HTML report (' . $test . ') | "CodeceptionIssue4413Cest:commentStepsWithDifferentSubStepsOnceNestedInBetweenAndAfter"" time="0.092805" assertions="2"/>
|
|
40
|
+
<testcase name="runHtmlCheckReport" class="RunCest" file="tests/data/cli/RunCest.php" feature="verify that all steps are rendered correctly in HTML report (' . $test . ') | "CodeceptionIssue4413Cest:commentStepsWithDifferentSubStepsOnceNestedInBetweenAndAfter2"" time="0.098153" assertions="2"/>
|
|
41
|
+
<testcase name="runHtmlCheckReport" class="RunCest" file="tests/data/cli/RunCest.php" feature="verify that all steps are rendered correctly in HTML report (' . $test . ') | "CodeceptionIssue4413Cest:nestedSubStepFollowedByOtherSubStep"" time="0.078239" assertions="2"/>
|
|
42
|
+
<testcase name="runHtmlCheckReport" class="RunCest" file="tests/data/cli/RunCest.php" feature="verify that all steps are rendered correctly in HTML report (' . $test . ') | "CodeceptionIssue4413Cest:nestedSubStepFollowedByOtherSubStep2"" time="0.095552" assertions="2"/>
|
|
43
|
+
<testcase name="runHtmlCheckReport" class="RunCest" file="tests/data/cli/RunCest.php" feature="verify that all steps are rendered correctly in HTML report (' . $test . ') | "CodeceptionIssue4413Cest:twoIdentialSubStepsInARow"" time="0.077251" assertions="2"/>
|
|
44
|
+
<testcase name="runHtmlCheckReport" class="RunCest" file="tests/data/cli/RunCest.php" feature="verify that all steps are rendered correctly in HTML report (' . $test . ') | "CodeceptionIssue4413Cest:twoIdentialSubStepsInARowFollowedByAnotherSubStep"" time="0.078100" assertions="2"/>
|
|
45
|
+
<testcase name="runHtmlCheckReport" class="RunCest" file="tests/data/cli/RunCest.php" feature="verify that all steps are rendered correctly in HTML report (' . $test . ') | "CodeceptionIssue4413Cest:twoIdentialSubStepsWithAnotherSubStepInBetween"" time="0.096649" assertions="2"/>
|
|
46
|
+
<testcase name="runHtmlCheckReport" class="RunCest" file="tests/data/cli/RunCest.php" feature="verify that all steps are rendered correctly in HTML report (' . $test . ') | "CodeceptionIssue4413Cest:subStepFollowedByTwoIdentialSubSteps"" time="0.097845" assertions="2"/>
|
|
47
|
+
<testcase name="runTestsWithSteps" class="RunCest" file="tests/data/cli/RunCest.php" feature="run tests with steps" time="0.097513" assertions="1"/>
|
|
48
|
+
<testcase name="runWithDataprovider" class="RunCest" file="tests/data/cli/RunCest.php" feature="run with dataprovider" time="0.101674" assertions="1"/>
|
|
49
|
+
<testcase name="runXmlReport" class="RunCest" file="tests/data/cli/RunCest.php" feature="check xml reports" time="0.100334" assertions="5"/>
|
|
50
|
+
<testcase name="runTestsWithGrep" class="RunCest" file="tests/data/cli/RunCest.php" feature="run tests with grep" time="0.177239" assertions="3"/>
|
|
51
|
+
<testcase name="runHtmlWithPhpBrowserCheckReport" class="RunCest" file="tests/data/cli/RunCest.php" feature="execute tests with PhpBrowser with html output and check html" time="0.282488" assertions="5"/>
|
|
52
|
+
<testcase name="skipRunOneGroup" class="RunCest" file="tests/data/cli/RunCest.php" feature="skip run one group" time="0.098319" assertions="3"/>
|
|
53
|
+
<testcase name="runTestsWithFilter" class="RunCest" file="tests/data/cli/RunCest.php" feature="run tests with filter" time="0.086682" assertions="2"/>
|
|
54
|
+
<testcase name="runGherkinScenarioOutline" class="RunCest" file="tests/data/cli/RunCest.php" feature="run gherkin scenario outline" time="0.103988" assertions="1"/>
|
|
55
|
+
<testcase name="runTestsWithDependencyInjections" class="RunCest" file="tests/data/cli/RunCest.php" feature="run tests with dependency injections" time="0.080304" assertions="7"/>
|
|
56
|
+
<testcase name="runWithExamples" class="RunCest" file="tests/data/cli/RunCest.php" feature="run with examples" time="0.100186" assertions="1"/>
|
|
57
|
+
<testcase name="runPhpUnitXmlReport" class="RunCest" file="tests/data/cli/RunCest.php" feature="check phpunit xml reports" time="0.101651" assertions="10"/>
|
|
58
|
+
<testcase name="runInvalidDataProvider" class="RunCest" file="tests/data/cli/RunCest.php" feature="run invalid data provider" time="0.111115" assertions="4"/>
|
|
59
|
+
<testcase name="runTestWithDataProviders" class="RunCest" file="tests/data/cli/RunCest.php" feature="run test with data providers" time="0.095058" assertions="5"/>
|
|
60
|
+
<testcase name="runFailingGherkinTest" class="RunCest" file="tests/data/cli/RunCest.php" feature="run failing gherkin test" time="0.076423" assertions="2"/>
|
|
61
|
+
<testcase name="showSameOrderOfFilesOnSeed" class="RunCest" file="tests/data/cli/RunCest.php" feature="show same order of files on seed" time="0.306368" assertions="3"/>
|
|
62
|
+
<testcase name="runWithUnitIncomplete" class="RunCest" file="tests/data/cli/RunCest.php" feature="run with unit incomplete" time="0.097535" assertions="1"/>
|
|
63
|
+
<testcase name="showSeedNumberOnShuffle" class="RunCest" file="tests/data/cli/RunCest.php" feature="show seed number on shuffle" time="0.223366" assertions="2"/>
|
|
64
|
+
<testcase name="filterTestsByDataProviderCaseNumber" class="RunCest" file="tests/data/cli/RunCest.php" feature="filter tests by data provider case number" time="0.100420" assertions="5"/>
|
|
65
|
+
<testcase name="runTwoSuites" class="RunCest" file="tests/data/cli/RunCest.php" feature="run two suites" time="0.098478" assertions="3"/>
|
|
66
|
+
<testcase name="runCustomBootstrap" class="RunCest" file="tests/data/cli/RunCest.php" feature="execute one test" time="0.095968" assertions="3"/>
|
|
67
|
+
<testcase name="runOneTestFromCest" class="RunCest" file="tests/data/cli/RunCest.php" feature="run one test from cest" time="0.073993" assertions="2"/>
|
|
68
|
+
<testcase name="runTestWithFailedScenario" class="RunCest" file="tests/data/cli/RunCest.php" feature="run test with failed scenario" time="0.000200" assertions="0">
|
|
69
69
|
<skipped/>
|
|
70
70
|
</testcase>
|
|
71
|
-
<testcase name="runPhpUnitXmlReportsInStrictMode" class="RunCest" file="/
|
|
72
|
-
<testcase name="runBootstrapInGlobalConfig" class="RunCest" file="/
|
|
73
|
-
<testcase name="reportersConfigurationSectionIsNotSupported" class="RunCest" file="/
|
|
74
|
-
<testcase name="runFailedTestAndCheckOutput" class="RunCest" file="/
|
|
75
|
-
<testcase name="runTestWithFailFastDefault" class="RunCest" file="/
|
|
76
|
-
<testcase name="runTestWithComplexExample" class="RunCest" file="/
|
|
77
|
-
<testcase name="runTestWithAnnotationExamplesFromGroupFileTest" class="RunCest" file="/
|
|
78
|
-
<testcase name="filterTestsByDataProviderCaseNumberRange" class="RunCest" file="/
|
|
79
|
-
<testcase name="runSuiteWhenNameMatchesExistingDirectory" class="RunCest" file="/
|
|
80
|
-
<testcase name="runBootstrapInSuiteConfig" class="RunCest" file="/
|
|
81
|
-
<testcase name="runOneTestFromUnit" class="RunCest" file="/
|
|
82
|
-
<testcase name="reportsCorrectFailedStep" class="RunCest" file="/
|
|
83
|
-
<testcase name="overrideModuleOptions" class="RunCest" file="/
|
|
84
|
-
<testcase name="runTestWithException" class="RunCest" file="/
|
|
85
|
-
<testcase name="runWithCustomOutputPath" class="RunCest" file="/
|
|
86
|
-
<testcase name="filterTestsByDataProviderCaseName" class="RunCest" file="/
|
|
87
|
-
<testcase name="filterTestsWithoutSpecifyingSuite" class="RunCest" file="/
|
|
88
|
-
<testcase name="runXmlReportsInStrictMode" class="RunCest" file="/
|
|
89
|
-
<testcase name="runCustomReport" class="RunCest" file="/
|
|
90
|
-
<testcase name="runDependentTest" class="RunCest" file="/
|
|
91
|
-
<testcase name="runTestWithFailFastCustom" class="RunCest" file="/
|
|
92
|
-
<testcase name="runTestWithCustomSetupMethod" class="RunCest" file="/
|
|
93
|
-
<testcase name="runCompactReport" class="RunCest" file="/
|
|
94
|
-
<testcase name="skipSuites" class="RunCest" file="/
|
|
71
|
+
<testcase name="runPhpUnitXmlReportsInStrictMode" class="RunCest" file="tests/data/cli/RunCest.php" feature="check phpunit xml in strict mode" time="0.080945" assertions="10"/>
|
|
72
|
+
<testcase name="runBootstrapInGlobalConfig" class="RunCest" file="tests/data/cli/RunCest.php" feature="execute one test" time="0.099138" assertions="3"/>
|
|
73
|
+
<testcase name="reportersConfigurationSectionIsNotSupported" class="RunCest" file="tests/data/cli/RunCest.php" feature="reporters configuration section is not supported" time="0.200293" assertions="3"/>
|
|
74
|
+
<testcase name="runFailedTestAndCheckOutput" class="RunCest" file="tests/data/cli/RunCest.php" feature="run failed test and check output" time="0.092119" assertions="4"/>
|
|
75
|
+
<testcase name="runTestWithFailFastDefault" class="RunCest" file="tests/data/cli/RunCest.php" feature="run test with fail fast default" time="0.193308" assertions="4"/>
|
|
76
|
+
<testcase name="runTestWithComplexExample" class="RunCest" file="tests/data/cli/RunCest.php" feature="run test with complex example" time="0.084370" assertions="5"/>
|
|
77
|
+
<testcase name="runTestWithAnnotationExamplesFromGroupFileTest" class="RunCest" file="tests/data/cli/RunCest.php" feature="run test with annotation examples from group file test" time="0.091098" assertions="1"/>
|
|
78
|
+
<testcase name="filterTestsByDataProviderCaseNumberRange" class="RunCest" file="tests/data/cli/RunCest.php" feature="filter tests by data provider case number range" time="0.074344" assertions="5"/>
|
|
79
|
+
<testcase name="runSuiteWhenNameMatchesExistingDirectory" class="RunCest" file="tests/data/cli/RunCest.php" feature="run suite when name matches existing directory" time="0.069087" assertions="1"/>
|
|
80
|
+
<testcase name="runBootstrapInSuiteConfig" class="RunCest" file="tests/data/cli/RunCest.php" feature="execute one test" time="0.080465" assertions="3"/>
|
|
81
|
+
<testcase name="runOneTestFromUnit" class="RunCest" file="tests/data/cli/RunCest.php" feature="run one test from unit" time="0.083712" assertions="3"/>
|
|
82
|
+
<testcase name="reportsCorrectFailedStep" class="RunCest" file="tests/data/cli/RunCest.php" feature="reports correct failed step" time="0.083000" assertions="2"/>
|
|
83
|
+
<testcase name="overrideModuleOptions" class="RunCest" file="tests/data/cli/RunCest.php" feature="override module options" time="0.166803" assertions="2"/>
|
|
84
|
+
<testcase name="runTestWithException" class="RunCest" file="tests/data/cli/RunCest.php" feature="run test with exception" time="0.087845" assertions="4"/>
|
|
85
|
+
<testcase name="runWithCustomOutputPath" class="RunCest" file="tests/data/cli/RunCest.php" feature="run with custom output path" time="0.085757" assertions="7"/>
|
|
86
|
+
<testcase name="filterTestsByDataProviderCaseName" class="RunCest" file="tests/data/cli/RunCest.php" feature="filter tests by data provider case name" time="0.092092" assertions="5"/>
|
|
87
|
+
<testcase name="filterTestsWithoutSpecifyingSuite" class="RunCest" file="tests/data/cli/RunCest.php" feature="filter tests without specifying suite" time="0.075297" assertions="1"/>
|
|
88
|
+
<testcase name="runXmlReportsInStrictMode" class="RunCest" file="tests/data/cli/RunCest.php" feature="check xml in strict mode" time="0.084044" assertions="5"/>
|
|
89
|
+
<testcase name="runCustomReport" class="RunCest" file="tests/data/cli/RunCest.php" feature="run custom report" time="0.080532" assertions="2"/>
|
|
90
|
+
<testcase name="runDependentTest" class="RunCest" file="tests/data/cli/RunCest.php" feature="run dependent test" time="0.178287" assertions="2"/>
|
|
91
|
+
<testcase name="runTestWithFailFastCustom" class="RunCest" file="tests/data/cli/RunCest.php" feature="run test with fail fast custom" time="0.168278" assertions="2"/>
|
|
92
|
+
<testcase name="runTestWithCustomSetupMethod" class="RunCest" file="tests/data/cli/RunCest.php" feature="run test with custom setup method" time="0.083309" assertions="1"/>
|
|
93
|
+
<testcase name="runCompactReport" class="RunCest" file="tests/data/cli/RunCest.php" feature="run compact report" time="0.074003" assertions="1"/>
|
|
94
|
+
<testcase name="skipSuites" class="RunCest" file="tests/data/cli/RunCest.php" feature="skip suites" time="0.064021" assertions="4"/>
|
|
95
95
|
<testcase name="runAllSnapshotTests" class="SnapshotCest" file="tests/data/cli/SnapshotCest.php" feature="run all snapshot tests" time="0.058300" assertions="1">
|
|
96
96
|
<failure type="PHPUnit\Framework\AssertionFailedError">SnapshotCest: Run all snapshot tests
|
|
97
97
|
Result code was 1.
|
|
@@ -147,4 +147,4 @@ tests/data/cli/SnapshotCest.php:92
|
|
|
147
147
|
</failure>
|
|
148
148
|
</testcase>
|
|
149
149
|
</testsuite>
|
|
150
|
-
</testsuites>
|
|
150
|
+
</testsuites>
|