Merge "Revert "Selenium: Use wdio-video-reporter to record videos of test run""

This commit is contained in:
jenkins-bot 2020-05-20 10:56:53 +00:00 committed by Gerrit Code Review
commit f8f275585d
4 changed files with 60 additions and 197 deletions

185
package-lock.json generated
View file

@ -276,70 +276,6 @@
"to-fast-properties": "^2.0.0"
}
},
"@ffmpeg-installer/darwin-x64": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/@ffmpeg-installer/darwin-x64/-/darwin-x64-4.1.0.tgz",
"integrity": "sha512-Z4EyG3cIFjdhlY8wI9aLUXuH8nVt7E9SlMVZtWvSPnm2sm37/yC2CwjUzyCQbJbySnef1tQwGG2Sx+uWhd9IAw==",
"dev": true,
"optional": true
},
"@ffmpeg-installer/ffmpeg": {
"version": "1.0.20",
"resolved": "https://registry.npmjs.org/@ffmpeg-installer/ffmpeg/-/ffmpeg-1.0.20.tgz",
"integrity": "sha512-wbgd//6OdwbFXYgV68ZyKrIcozEQpUKlvV66XHaqO2h3sFbX0jYLzx62Q0v8UcFWN21LoxT98NU2P+K0OWsKNA==",
"dev": true,
"requires": {
"@ffmpeg-installer/darwin-x64": "4.1.0",
"@ffmpeg-installer/linux-arm": "4.1.3",
"@ffmpeg-installer/linux-arm64": "4.1.4",
"@ffmpeg-installer/linux-ia32": "4.1.0",
"@ffmpeg-installer/linux-x64": "4.1.0",
"@ffmpeg-installer/win32-ia32": "4.1.0",
"@ffmpeg-installer/win32-x64": "4.1.0"
}
},
"@ffmpeg-installer/linux-arm": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/@ffmpeg-installer/linux-arm/-/linux-arm-4.1.3.tgz",
"integrity": "sha512-NDf5V6l8AfzZ8WzUGZ5mV8O/xMzRag2ETR6+TlGIsMHp81agx51cqpPItXPib/nAZYmo55Bl2L6/WOMI3A5YRg==",
"dev": true,
"optional": true
},
"@ffmpeg-installer/linux-arm64": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/@ffmpeg-installer/linux-arm64/-/linux-arm64-4.1.4.tgz",
"integrity": "sha512-dljEqAOD0oIM6O6DxBW9US/FkvqvQwgJ2lGHOwHDDwu/pX8+V0YsDL1xqHbj1DMX/+nP9rxw7G7gcUvGspSoKg==",
"dev": true,
"optional": true
},
"@ffmpeg-installer/linux-ia32": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/@ffmpeg-installer/linux-ia32/-/linux-ia32-4.1.0.tgz",
"integrity": "sha512-0LWyFQnPf+Ij9GQGD034hS6A90URNu9HCtQ5cTqo5MxOEc7Rd8gLXrJvn++UmxhU0J5RyRE9KRYstdCVUjkNOQ==",
"dev": true,
"optional": true
},
"@ffmpeg-installer/linux-x64": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/@ffmpeg-installer/linux-x64/-/linux-x64-4.1.0.tgz",
"integrity": "sha512-Y5BWhGLU/WpQjOArNIgXD3z5mxxdV8c41C+U15nsE5yF8tVcdCGet5zPs5Zy3Ta6bU7haGpIzryutqCGQA/W8A==",
"dev": true,
"optional": true
},
"@ffmpeg-installer/win32-ia32": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/@ffmpeg-installer/win32-ia32/-/win32-ia32-4.1.0.tgz",
"integrity": "sha512-FV2D7RlaZv/lrtdhaQ4oETwoFUsUjlUiasiZLDxhEUPdNDWcH1OU9K1xTvqz+OXLdsmYelUDuBS/zkMOTtlUAw==",
"dev": true,
"optional": true
},
"@ffmpeg-installer/win32-x64": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/@ffmpeg-installer/win32-x64/-/win32-x64-4.1.0.tgz",
"integrity": "sha512-Drt5u2vzDnIONf4ZEkKtFlbvwj6rI3kxw1Ck9fpudmtgaZIHD4ucsWB2lCZBXRxJgXR+2IMSti+4rtM4C4rXgg==",
"dev": true,
"optional": true
},
"@nodelib/fs.scandir": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz",
@ -427,27 +363,6 @@
"integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==",
"dev": true
},
"@wdio/allure-reporter": {
"version": "5.22.4",
"resolved": "https://registry.npmjs.org/@wdio/allure-reporter/-/allure-reporter-5.22.4.tgz",
"integrity": "sha512-iE6LOlrkBSt6JsKxsI2tzaUjUJx+dz9yHVl0yoBW/NYBzxE0sn/0jr8OR+lUV35GdIi90D59MMIrZ/BYS1occA==",
"dev": true,
"requires": {
"@wdio/reporter": "5.22.4",
"allure-js-commons": "^1.3.2"
},
"dependencies": {
"@wdio/reporter": {
"version": "5.22.4",
"resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-5.22.4.tgz",
"integrity": "sha512-y/HIKGJHsKXroWWH1B7upynoYmFMuAwJs3LEVwdnpiJIBF4DxzIrRGCY/SSA6U1a/+cRTdI5m1+vA1gcFxcmwQ==",
"dev": true,
"requires": {
"fs-extra": "^8.0.1"
}
}
}
},
"@wdio/cli": {
"version": "5.13.2",
"resolved": "https://registry.npmjs.org/@wdio/cli/-/cli-5.13.2.tgz",
@ -705,33 +620,6 @@
}
}
},
"allure-js-commons": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/allure-js-commons/-/allure-js-commons-1.3.2.tgz",
"integrity": "sha512-FTmoqP36ZjHFT4iLdYamyCFhyj1jqD6BIdiZ5pBlyafDJrFRV76XIXNxwRqbHpSw40o1vHzYi4vGpmREnhnHVw==",
"dev": true,
"requires": {
"file-type": "^7.7.1",
"fs-extra": "^6.0.1",
"js2xmlparser": "^3.0.0",
"mime": "^2.3.1",
"object-assign": "^4.1.1",
"uuid": "^3.0.0"
},
"dependencies": {
"fs-extra": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz",
"integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.2",
"jsonfile": "^4.0.0",
"universalify": "^0.1.0"
}
}
}
},
"ansi-align": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
@ -3010,12 +2898,6 @@
"integrity": "sha1-peeo/7+kk7Q7kju9TKiaU7Y7YSs=",
"dev": true
},
"file-type": {
"version": "7.7.1",
"resolved": "https://registry.npmjs.org/file-type/-/file-type-7.7.1.tgz",
"integrity": "sha512-bTrKkzzZI6wH+NXhyD3SOXtb2zXTw2SbwI2RxUlRcXVsnN7jNL5hJzVQLYv7FOQhxFkK4XWdAflEaWFpaLLWpQ==",
"dev": true
},
"fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
@ -4476,15 +4358,6 @@
"esprima": "^4.0.0"
}
},
"js2xmlparser": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-3.0.0.tgz",
"integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=",
"dev": true,
"requires": {
"xmlcreate": "^1.0.1"
}
},
"jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
@ -5746,8 +5619,7 @@
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
},
"minimist-options": {
"version": "4.0.2",
@ -5771,7 +5643,6 @@
"version": "0.5.5",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
"integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
"dev": true,
"requires": {
"minimist": "^1.2.5"
}
@ -9302,54 +9173,6 @@
"mwbot": "1.0.10"
}
},
"wdio-video-reporter": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/wdio-video-reporter/-/wdio-video-reporter-2.0.0.tgz",
"integrity": "sha512-glMpAQJcvtGwXGLNxJB1U9B8+NvXzaiFn7aiIhlfcsCPUboPt51VaxLTHu+pPTbFIfPEHAf43a862soHLwA6LQ==",
"dev": true,
"requires": {
"@ffmpeg-installer/ffmpeg": "^1.0.20",
"@wdio/allure-reporter": "^5.16.16",
"@wdio/reporter": "^5.15.2",
"fs-extra": "^6.0.1",
"mkdirp": "^0.5.1"
},
"dependencies": {
"@wdio/reporter": {
"version": "5.22.4",
"resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-5.22.4.tgz",
"integrity": "sha512-y/HIKGJHsKXroWWH1B7upynoYmFMuAwJs3LEVwdnpiJIBF4DxzIrRGCY/SSA6U1a/+cRTdI5m1+vA1gcFxcmwQ==",
"dev": true,
"requires": {
"fs-extra": "^8.0.1"
},
"dependencies": {
"fs-extra": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
"integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
"dev": true,
"requires": {
"graceful-fs": "^4.2.0",
"jsonfile": "^4.0.0",
"universalify": "^0.1.0"
}
}
}
},
"fs-extra": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz",
"integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.2",
"jsonfile": "^4.0.0",
"universalify": "^0.1.0"
}
}
}
},
"webdriver": {
"version": "5.13.2",
"resolved": "https://registry.npmjs.org/webdriver/-/webdriver-5.13.2.tgz",
@ -9601,12 +9424,6 @@
"integrity": "sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg==",
"dev": true
},
"xmlcreate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-1.0.2.tgz",
"integrity": "sha1-+mv3YqYKQT+z3Y9LA8WyaSONMI8=",
"dev": true
},
"xmldom": {
"version": "0.1.19",
"resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.19.tgz",

View file

@ -40,7 +40,6 @@
"qunit": "2.10.0",
"stylelint-config-wikimedia": "0.10.1",
"wdio-mediawiki": "file:tests/selenium/wdio-mediawiki",
"wdio-video-reporter": "2.0.0",
"webdriverio": "5.13.2"
}
}

View file

@ -37,7 +37,13 @@ environments this is probably set already. On macOS, set it to a dummy value lik
#### Video recording
Starting from WebdriverIO v5, [wdio-video-reporter](https://www.npmjs.com/package/wdio-video-reporter) NPM package is used to record videos of test runs. By default, videos for all tests are recorded and saved under `tests/selenium/log` directory.
To capture a video, the tests have to run in the context of an X11 server, with the `DISPLAY`
environment variable set to its display name. If the shell has no X11 server or if you want
to hide the output, you can also launch a virtual X11 display using Xvfb. Recording videos
is currently supported only on Linux, and is triggered by the `DISPLAY` value starting with
a colon (as Xvfb typically would). For example:
DISPLAY=:2 npm run selenium
#### Filter

View file

@ -1,7 +1,8 @@
const fs = require( 'fs' );
const path = require( 'path' );
const logPath = process.env.LOG_DIR || path.join( __dirname, '/log' );
const video = require( 'wdio-video-reporter' );
let ffmpeg;
// get current test title and clean it, to use it as file name
function fileName( title ) {
@ -94,16 +95,7 @@ exports.config = {
// See also: https://webdriver.io/docs/junit-reporter.html#configuration
[ 'junit', {
outputDir: logPath
} ],
[
// See also: https://github.com/presidenten/wdio-video-reporter/blob/master/README.md
video, {
// If true, also saves videos for successful test cases. Default: false.
saveAllVideos: true,
// Path to directory where videos will be stored
outputDir: logPath
}
]
} ]
],
// See also: http://mochajs.org/
mochaOpts: {
@ -114,12 +106,61 @@ exports.config = {
// =====
// Hooks
// =====
/**
* Executed before a Mocha test starts.
* @param {Object} test Mocha Test object
*/
beforeTest: function ( test ) {
if ( process.env.DISPLAY && process.env.DISPLAY.startsWith( ':' ) ) {
const videoPath = filePath( test, logPath, 'mp4' );
const { spawn } = require( 'child_process' );
ffmpeg = spawn( 'ffmpeg', [
'-f', 'x11grab', // grab the X11 display
'-video_size', '1280x1024', // video size
'-i', process.env.DISPLAY, // input file url
'-loglevel', 'error', // log only errors
'-y', // overwrite output files without asking
'-pix_fmt', 'yuv420p', // QuickTime Player support, "Use -pix_fmt yuv420p for compatibility with outdated media players"
videoPath // output file
] );
const logBuffer = function ( buffer, prefix ) {
const lines = buffer.toString().trim().split( '\n' );
lines.forEach( function ( line ) {
console.log( prefix + line );
} );
};
ffmpeg.stdout.on( 'data', ( data ) => {
logBuffer( data, 'ffmpeg stdout: ' );
} );
ffmpeg.stderr.on( 'data', ( data ) => {
logBuffer( data, 'ffmpeg stderr: ' );
} );
ffmpeg.on( 'close', ( code, signal ) => {
console.log( '\n\tVideo location:', videoPath, '\n' );
if ( code !== null ) {
console.log( `\tffmpeg exited with code ${code} ${videoPath}` );
}
if ( signal !== null ) {
console.log( `\tffmpeg received signal ${signal} ${videoPath}` );
}
} );
}
},
/**
* Executed after a Mocha test ends.
*
* @param {Object} test Mocha Test object
*/
afterTest: function ( test ) {
if ( ffmpeg ) {
// stop video recording
ffmpeg.kill( 'SIGINT' );
}
// if test passed, ignore, else take and save screenshot
if ( test.passed ) {
return;