Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Chrome(Headless) randomly not running all tests and no errors reported. #213

Open
activist opened this issue Sep 19, 2019 · 3 comments
Open

Comments

@activist
Copy link

activist commented Sep 19, 2019

I have an issue where we have a set of tests that randomly does not run in Chrome/ChromeHeadless with no errors reported. It is hard to give specific number, but 50% of the time karma quits too early. It is just like karma is stopping when it feels like doing so.

When running with Firefox/FirefoxHeadless it always completes all off the tests.

Environment: Ubuntu (18.04/19.10)
Chrome version: 77.0.3865
Karma version: 4.3.0
karma-chrome-launcher@3.1.0

Example output:

Chrome 77.0.3865 (Linux 0.0.0): Executed 256 of 278 SUCCESS (0 secs / 2 mins 22.139 secs)
Chrome 77.0.3865 (Linux 0.0.0): Executed 256 of 278 SUCCESS (2 mins 34.995 secs / 2 mins 22.139 secs)
18 09 2019 13:05:31.719:DEBUG [launcher]: CAPTURED -> BEING_KILLED
18 09 2019 13:05:31.719:DEBUG [launcher]: BEING_KILLED -> BEING_FORCE_KILLED
TOTAL: 256 SUCCESS
18 09 2019 13:05:31.720:DEBUG [karma-server]: Run complete, exiting.
18 09 2019 13:05:31.720:DEBUG [launcher]: Disconnecting all browsers
18 09 2019 13:05:31.720:DEBUG [launcher]: BEING_FORCE_KILLED -> BEING_FORCE_KILLED
18 09 2019 13:05:31.788:DEBUG [launcher]: Process Chrome exited with code 0 and signal null
18 09 2019 13:05:31.788:DEBUG [temp-dir]: Cleaning temp dir /tmp/karma-20890304
18 09 2019 13:05:31.847:DEBUG [launcher]: Finished all browsers
18 09 2019 13:05:31.847:DEBUG [launcher]: BEING_FORCE_KILLED -> FINISHED
18 09 2019 13:05:31.848:DEBUG [launcher]: FINISHED -> FINISHED

Here we would expect 278 tests to run, but only 256 runs. Sometimes the number is far lower, so it is also seemingly random at which test karma feels like stopping and which tests have ran.

Here is the main part of karma-conf.js:

...
        reporters: ['imagecapture', 'progress', 'json-log'],
        port: 9876,  // karma web server port
        colors: true,
        logLevel: config.LOG_INFO,
        browsers: browsers,
        autoWatch: false,
        singleRun: true,
        concurrency: Infinity,
        plugins: [
            'karma-*',
            require('./karma-imagecapture-reporter.js')
        ],
        sharding: {
          specMatcher: /(spec|test|demo)s?\.js/i
        },
        jsonLogReporter: {
            outputPath: 'test/',
        },
        customLaunchers: {
            ChromeCI: {
                base: 'Chrome',
                flags: ['--no-sandbox']
            },
        },
... 

I might be relevant to know that we use or own karma-imagecapture-reporter to store images from svg/dom nodes and then later do a pixel-by-pixel comparison. It looks like this:

const fs = require('fs');

function ImageCaptureReporter(
    emitter
) {

    function prettyXML(svg) {
        svg = svg
            .replace(/>/g, '>\n')
            .replace(/<tspan([^>]*)>\n/g, '<tspan$1>')
            .replace(/<\/tspan>\n/g, '</tspan>');

        return svg;
    }

    emitter.on('browser_info', (browser, info) => {
        let data = info.data;
        let filename = info.filename;
        if (/\.svg$/.test(filename)) {
            fs.writeFileSync(filename, prettyXML(data));
        } else if (/\.png$/.test(filename)) {
            data = data.replace(/^data:image\/\w+;base64,/, '');
            let buf = new Buffer(data, 'base64');
            fs.writeFileSync(filename, buf);
        } 
    });
}

ImageCaptureReporter.$inject = [
    'emitter'
];

module.exports = {
    'reporter:imagecapture': ['type', ImageCaptureReporter]
};

Do you have any clues as to what the issue could be?

@johnjbarton
Copy link
Contributor

Do you have any clues as to what the issue could be?

In my experience the most likely cause is an error in async app or test code. For example a missing await on a promise. Maybe in beforeEach() code in one describe. This causes a race between the promise and the overall test run exiting. If the promise resolves, the test passes; if not the test exists with not enough results. Timing on different machines and different browsers give different results.

@kdevcse
Copy link

kdevcse commented Jun 4, 2020

Seeing this issue too.. it's the most bizarre thing.

@fatihdestegul
Copy link

fatihdestegul commented Jun 11, 2020

It is an old issue but did you try to increase following configs inside customLaunchers ?

  • browserNoActivityTimeout
  • processKillTimeout
  • browserSocketTimeout

Seems karma-launcer sends a SIGKILL because it exceeds to threshold.. @activist

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants