Транспортир утечки памяти тест на выносливость - PullRequest
0 голосов
/ 04 марта 2019

Я сделал очень маленький тест, используя Protractor, чтобы открыть свое приложение (сборка под углом) и начать нажимать на случайные ссылки в случайном порядке.Мы используем это, чтобы позволить веб-приложению работать в течение нескольких дней и проверять утечки памяти.

Через некоторое время память браузера (chrome) становится огромной, и когда я создаю дамп памяти, я нахожу 33k строк, содержащих всетот же кусок кода (показанный ниже).

Я попытался найти, откуда это происходит, и это привело меня к Webdriver, и код выглядит как что-то, введенное webdriver, чтобы вызвать способность щелчка мыши, но оттуда яЯ потерян.

Я делаю что-то не так или я должен очистить память где-то в моем тесте?

(Когда я обычно запускаю приложение в течение нескольких часов и открываю все страницы, это не происходитна всю эту строку)

"(function() { // Copyright (c) 2012 The Chromium Authors. All rights reserved. 
// Use of this source code is governed by a BSD-style license that can be 
// found in the LICENSE file. 

/**
 * Enum for WebDriver status codes.
 * @enum {number}
 */
var StatusCode = { STALE_ELEMENT_REFERENCE: 10, JAVA_SCRIPT_ERROR: 17, };

/**
 * Enum for node types.
 * @enum {number}
 */
var NodeType = { ELEMENT: 1, DOCUMENT: 9, };

/**
 * Dictionary key to use for holding an element ID.
 * @const
 * @type {string}
 */
var ELEMENT_KEY = 'ELEMENT';

/**
 * True if using W3C Element references.
 * @const
 * @type {boolean}
 */
var w3cEnabled = false;

/**
 * True if shadow dom is enabled.
 * @const
 * @type {boolean}
 */
var SHADOW_DOM_ENABLED = typeof ShadowRoot === 'function';

/**
 * Generates a unique ID to identify an element.
 * @void
 * @return {string} Randomly generated ID.
 */
function generateUUID() {
  var array = new Uint8Array(16);
  window.crypto.getRandomValues(array);
  array[6] = 0x40 | (array[6] & 0x0f);"

.... (continues for a lot more lines)

Тест, который я пытаюсь запустить:

import {browser, by, element} from 'protractor';

describe('Webclient', () => {
  const MAX_SAFE_TIMEOUT = Math.pow(2, 31) - 1;

  beforeAll(async function () {
    await browser.get('/');
  });

  it('Endurance test', (done) => {
    runTest();
  }, MAX_SAFE_TIMEOUT);
});

let counter = 0;

async function runTest() {

  try {
    const elements = await element.all(by.css('.header a, .sidebar-left a, .footer a, .content a'));
    let random = Math.floor(Math.random() * elements.length);

    while (!(await elements[random].isDisplayed())) {
      random = Math.floor(Math.random() * elements.length);
    }

    await elements[random].click();
    console.log('click counter:', counter++, await browser.getCurrentUrl());
  } catch (e) {
    // Do nothing, just continue
  }

  // Break the chain so that we don't get one big recursive function
  setTimeout(() => {
    runTest();
  }, 0);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...