python - spanish - Pruebas de rendimiento del navegador a través de selenio.
protractor tutorial español (2)
Es posible hacer pruebas de regresión de rendimiento con Selenium. Sin embargo, como ya habrás notado. La esencia central de Selenium es que imita el comportamiento del usuario. Esto significa que Selenium solo realizará la acción (por ejemplo, al hacer clic en el botón) si el usuario puede realizar la misma acción. También teniendo en cuenta ciertos códigos, soluciones temporales (es decir, esperas duras, varias verificaciones y códigos personalizados), se requieren incluso para poder ejecutar el script de Selenium. Esto significa que la "definición" de las pruebas de rendimiento con Selenium será ligeramente diferente en comparación con las pruebas de rendimiento tradicionales.
Lo que querrá hacer es tener un temporizador (inicio / parar) para cada acción que esté realizando Selenium. Por ejemplo: al hacer clic en un botón y registrarlo en un archivo para su uso posterior.
Usando Selenium puede crear una línea de base de rendimiento y de ahí en adelante comparar cada resultado consecutivo con la línea de base. Esto le dará estadísticas que luego puede usar para un análisis más detallado.
Selenium ni Webdriver (Selenium 2.0) vienen con esta característica fuera de la caja. Entonces, para que esto funcione, es necesario que se produzca una codificación personalizada.
Estamos utilizando un protractor
para probar las aplicaciones internas de AngularJS.
Además de las pruebas funcionales, verificamos las regresiones de rendimiento con la ayuda de protractor-perf
que se basa en la biblioteca nodejs browser-perf
. Porque, "El rendimiento es una característica" .
Con protractor-perf
podemos medir y hacer valer diferentes características de rendimiento mientras realizamos acciones del navegador, por ejemplo :
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);
};
Ahora, para otra aplicación interna, tenemos un conjunto de pruebas basadas en selenio escritas en Python.
¿Es posible verificar las regresiones de rendimiento con selenio-python, o debo reescribir las pruebas usando el protractor
para poder escribir pruebas de rendimiento del navegador?
Existe la posibilidad de acercarse a lo que hace browser-perf
al recopilar los registros de rendimiento de Chrome y analizarlos.
Para obtener los registros de rendimiento , active los registros de performance
mediante el ajuste de la capacidad deseada de registro y las 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://.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()
En este punto, el archivo devtools.json
contendría un montón de registros de rastreo:
[
{
"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"
},
..
]
Ahora, la pregunta es, qué hacer con él.
Una opción que se sugirió inicialmente durante la Conferencia de Automatización de Pruebas de Google es enviar los registros a webpagetest.org . Hay un ejemplo en java disponible help , pero, por el momento, no tuve la suerte de implementarlo en Python.
En teoría, el informe de UI generado por webpagetest.org se vería así:
También proporcionan las métricas en JSON / XML y otros formatos que pueden analizarse más a fondo.
Esto es realmente algo, gracias a Vivek Singh por el comentario señalador.
browser-perf también utiliza la funcionalidad de registro para recoger los registros de seguimiento y analiza los datos.