mirror of
https://github.com/usebruno/bruno.git
synced 2026-06-29 23:54:24 +00:00
feat: Include pre-request and post-response tests in JUnit reports (#6284)
* enhance: JUnit output to include preRequest and postResponse test results * fix: lint
This commit is contained in:
@@ -11,8 +11,10 @@ const makeJUnitOutput = async (results, outputPath) => {
|
||||
|
||||
results.forEach((result) => {
|
||||
const assertionTestCount = result.assertionResults ? result.assertionResults.length : 0;
|
||||
const preRequestTestCount = result.preRequestTestResults ? result.preRequestTestResults.length : 0;
|
||||
const testCount = result.testResults ? result.testResults.length : 0;
|
||||
const totalTests = assertionTestCount + testCount;
|
||||
const postResponseTestCount = result.postResponseTestResults ? result.postResponseTestResults.length : 0;
|
||||
const totalTests = assertionTestCount + preRequestTestCount + testCount + postResponseTestCount;
|
||||
|
||||
const suite = {
|
||||
'@name': result.name,
|
||||
@@ -44,6 +46,24 @@ const makeJUnitOutput = async (results, outputPath) => {
|
||||
suite.testcase.push(testcase);
|
||||
});
|
||||
|
||||
result.preRequestTestResults
|
||||
&& result.preRequestTestResults.forEach((test) => {
|
||||
const testcase = {
|
||||
'@name': test.description,
|
||||
'@status': test.status,
|
||||
'@classname': result.request.url,
|
||||
'@time': (result.runtime / totalTests).toFixed(3)
|
||||
};
|
||||
|
||||
if (test.status === 'fail') {
|
||||
suite['@failures']++;
|
||||
|
||||
testcase.failure = [{ '@type': 'failure', '@message': test.error }];
|
||||
}
|
||||
|
||||
suite.testcase.push(testcase);
|
||||
});
|
||||
|
||||
result.testResults
|
||||
&& result.testResults.forEach((test) => {
|
||||
const testcase = {
|
||||
@@ -62,6 +82,24 @@ const makeJUnitOutput = async (results, outputPath) => {
|
||||
suite.testcase.push(testcase);
|
||||
});
|
||||
|
||||
result.postResponseTestResults
|
||||
&& result.postResponseTestResults.forEach((test) => {
|
||||
const testcase = {
|
||||
'@name': test.description,
|
||||
'@status': test.status,
|
||||
'@classname': result.request.url,
|
||||
'@time': (result.runtime / totalTests).toFixed(3)
|
||||
};
|
||||
|
||||
if (test.status === 'fail') {
|
||||
suite['@failures']++;
|
||||
|
||||
testcase.failure = [{ '@type': 'failure', '@message': test.error }];
|
||||
}
|
||||
|
||||
suite.testcase.push(testcase);
|
||||
});
|
||||
|
||||
if (result?.skipped) {
|
||||
suite['@skipped'] = 1;
|
||||
} else if (result.error) {
|
||||
|
||||
@@ -132,4 +132,69 @@ describe('makeJUnitOutput', () => {
|
||||
expect(failcase.error[0]['@type']).toBe('error');
|
||||
expect(failcase.error[0]['@message']).toBe('timeout of 2000ms exceeded');
|
||||
});
|
||||
|
||||
it('should include preRequestTestResults and postResponseTestResults in the junit output', () => {
|
||||
const results = [
|
||||
{
|
||||
name: 'Tests/Suite A',
|
||||
request: {
|
||||
method: 'GET',
|
||||
url: 'https://ima.test'
|
||||
},
|
||||
preRequestTestResults: [
|
||||
{
|
||||
description: 'A test from Pre Request Script',
|
||||
status: 'pass'
|
||||
}
|
||||
],
|
||||
testResults: [
|
||||
{
|
||||
description: 'A test from Tests tab',
|
||||
status: 'pass'
|
||||
}
|
||||
],
|
||||
postResponseTestResults: [
|
||||
{
|
||||
description: 'A test from Post Response Script',
|
||||
status: 'pass'
|
||||
},
|
||||
{
|
||||
description: 'A failing test from Post Response Script',
|
||||
status: 'fail',
|
||||
error: 'expected 200 to equal 404'
|
||||
}
|
||||
],
|
||||
runtime: 1.2345678
|
||||
}
|
||||
];
|
||||
|
||||
makeJUnitOutput(results, '/tmp/testfile.xml');
|
||||
expect(createStub).toBeCalled;
|
||||
|
||||
const junit = xmlbuilder.create.mock.calls[0][0];
|
||||
|
||||
expect(junit.testsuites).toBeDefined;
|
||||
expect(junit.testsuites.testsuite.length).toBe(1);
|
||||
expect(junit.testsuites.testsuite[0].testcase.length).toBe(4);
|
||||
expect(junit.testsuites.testsuite[0]['@tests']).toBe(4);
|
||||
|
||||
const testcase1 = junit.testsuites.testsuite[0].testcase[0];
|
||||
expect(testcase1['@name']).toBe('A test from Pre Request Script');
|
||||
expect(testcase1['@status']).toBe('pass');
|
||||
|
||||
const testcase2 = junit.testsuites.testsuite[0].testcase[1];
|
||||
expect(testcase2['@name']).toBe('A test from Tests tab');
|
||||
expect(testcase2['@status']).toBe('pass');
|
||||
|
||||
const testcase3 = junit.testsuites.testsuite[0].testcase[2];
|
||||
expect(testcase3['@name']).toBe('A test from Post Response Script');
|
||||
expect(testcase3['@status']).toBe('pass');
|
||||
|
||||
const failcase = junit.testsuites.testsuite[0].testcase[3];
|
||||
expect(failcase['@name']).toBe('A failing test from Post Response Script');
|
||||
expect(failcase['@status']).toBe('fail');
|
||||
expect(failcase.failure).toBeDefined;
|
||||
expect(failcase.failure[0]['@type']).toBe('failure');
|
||||
expect(failcase.failure[0]['@message']).toBe('expected 200 to equal 404');
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user