17

Мы используем protractor для тестирования внутренних приложений AngularJS.Тесты производительности браузера через селен

Помимо функциональных тестов, мы проверяем регрессию производительности с помощью protractor-perf, которая основана на библиотеке nodejs browser-perf. Потому что, "Performance is a feature".

С protractor-perf мы можем измерить и утверждать различные характеристики производительности, делая действия браузера, for example:

browser.get('http://www.angularjs.org'); 

perf.start(); // Start measuring the metrics 
element(by.model('todoText')).sendKeys('write a protractor test'); 
element(by.css('[value="add"]')).click(); 
perf.stop(); // Stop measuring the metrics 

if (perf.isEnabled) { // Is perf measuring enabled ? 
    // Check for perf regressions, just like you check for functional regressions 
    expect(perf.getStats('meanFrameTime')).toBeLessThan(60); 
}; 

Теперь, другое внутреннее приложение, которое мы имеем набор селена на основе тестов, написанных на Python ,

Можно ли проверить регрессии производительности с помощью selenium-python или переписать тесты с использованием protractor, чтобы иметь возможность писать тесты производительности браузера?

+1

Надеюсь, что это может [помочь] (https://gist.github.com/klepikov/5457750) ... подробное обсуждение этого вопроса было дано в [GTAC - 2013] (https://www.youtube.com)./смотреть? v = 0_kAPWSZNY4). –

+1

@VivekSingh действительно. Идея, представленная во время этой конференции по автоматизации тестирования Google, является удивительной и очень связана с тем, о чем я прошу. Я попытаюсь развить идею в стиле python, и я надеюсь, что отвечу здесь. Большое спасибо. – alecxe

+0

Полезно знать, что это помогло ... ура ... –

ответ

16

Возможность ближе поближе к what browser-perf is doing путем сбора chrome performance logs и их анализа.

Для get performance logs, включите performance журналы щипая loggingPrefs нужные возможности:

from selenium import webdriver 
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities 

caps = DesiredCapabilities.CHROME 
caps['loggingPrefs'] = {'performance': 'ALL'} 
driver = webdriver.Chrome(desired_capabilities=caps) 

driver.get('https://stackoverflow.com') 

logs = [json.loads(log['message'])['message'] for log in driver.get_log('performance')] 

with open('devtools.json', 'wb') as f: 
    json.dump(logs, f) 

driver.close() 

В этот момент devtools.json файл будет содержать кучу следов записей:

[ 
    { 
    "params": { 
     "timestamp": 1419571233.19293, 
     "frameId": "16639.1", 
     "requestId": "16639.1", 
     "loaderId": "16639.2", 
     "type": "Document", 
     "response": { 
     "mimeType": "text/plain", 
     "status": 200, 
     "fromServiceWorker": false, 
     "encodedDataLength": -1, 
     "headers": { 
      "Access-Control-Allow-Origin": "*", 
      "Content-Type": "text/plain;charset=US-ASCII" 
     }, 
     "url": "data:,", 
     "statusText": "OK", 
     "connectionId": 0, 
     "connectionReused": false, 
     "fromDiskCache": false 
     } 
    }, 
    "method": "Network.responseReceived" 
    }, 
    { 
    "params": { 
     "timestamp": 1419571233.19294, 
     "encodedDataLength": 0, 
     "requestId": "16639.1" 
    }, 
    "method": "Network.loadingFinished" 
    }, 
    .. 
] 

Теперь возникает вопрос , Что с этим делать.

Первоначальный вариант, предложенный during the Google Test Automation Conference, должен представить журналы на webpagetest.org. Есть пример в java доступен here, но на данный момент мне не повезло реализовать его в Python.

В теории, отчет пользовательского интерфейса, созданный webpagetest.орг будет выглядеть следующим образом:

enter image description here

Они также предоставляют метрики в JSON/XML и другие форматы, которые могут быть дополнительно проанализированы.

Это действительно что-то, благодаря Вивеку Сингху за указывающий комментарий.


browser-perf также использует функцию ведения журнала для сбора журналов трассировки и анализа данных.

3

Выполнение проверки регрессии производительности с помощью Selenium. Однако, как вы уже заметили. Основная суть Selenium заключается в том, что он имитирует поведение пользователей. Это означает, что Selenium выполнит действие (например, нажав кнопку), если пользователь сможет выполнить одно и то же действие. Также, принимая во внимание определенный код, обходные пути (т. Е. Жесткие ожидания, различные проверки и пользовательский код), требующие даже возможности запуска сценария Selenium. Это означает, что «определение» тестирования производительности с использованием Selenium будет немного отличаться от традиционного тестирования производительности.

Что бы вы хотели сделать, это иметь таймер (запуск/останов) для каждого действия, выполняемого Селеном. Например: нажатие на кнопку и запись в файл для последующего использования.

Используя Selenium, вы можете создать базовую линию производительности и оттуда, чтобы сравнить каждый последовательный результат с базовым уровнем. Это даст вам статистику, которую вы затем можете использовать для дальнейшего анализа.

Selenium и Webdriver (Selenium 2.0) поставляются с этой функцией из коробки. Поэтому для этого нужно выполнить некоторую специальную кодировку.

+0

Это интересный и солидный момент. Это то, что я лично хотел бы отметить - 'selenium' - это просто инструмент автоматизации браузера, который имитирует действия пользователя на странице. Но этот инструмент 'browser-perf' определенно [делает многое поверх него] (https://github.com/axemclion/browser-perf/wiki/Architecture) - использует' about: tracing' для сбора показателей производительности , Я предполагаю, что я должен либо следовать предложенному вами подходу (придерживаться базовой линии), либо переключиться на 'protractor', что мы стали широко использовать в любом случае. Спасибо. – alecxe