Marco de prueba automatizado [Competencia de marcos de prueba automatizados]

Cypress 与 Selenium / WebDriver

Arquitectura Selenium / WebDriver

Se basa en el diseño de la arquitectura Cliente / Servidor, y su diagrama de arquitectura se muestra a continuación.
Inserte la descripción de la imagen aquí

Enlaces de idioma / cliente

También llamado ClientLibrary, es una serie de archivos jar del framework Selenium, que se pueden escribir en diferentes lenguajes de programación, y debido a su existencia, el código de prueba escrito en cada lenguaje se puede analizar correctamente.

Controlador de navegador WebDriver

WebDriver se utiliza para administrar y controlar completamente el navegador, distinguir diferentes controladores de acuerdo con diferentes navegadores

Protocolo JSON Wire para transmisión HTTP

JSON (JavaScript Object Notation) es un estándar abierto para transmitir datos entre el servidor y el cliente en la Web. El
protocolo JSON Wire es una especificación abstracta que define cómo las operaciones de los usuarios en scripts automatizados deben asignarse a solicitudes de Selenium o HTTP y En la respuesta, la información se puede transmitir entre servidores HTTP a través del protocolo JSON Wire, y Language Bindings y WebDriver transmiten datos JSON a través del protocolo HTTP.

Multi navegador

Selenium / WebDriver es compatible con casi todos los navegadores convencionales y controla el navegador a través del controlador del navegador

Proceso de ejecución de código de selenio

from selenium import webdriver
driver = webdriver.Chrome()
dirver.get("http://www.baidu.com")

Entonces, ¿qué sucede cuando se ejecuta este código?

  • Los enlaces de lenguaje de Selenium se comunican primero con la API de Selenium (una API de Selenium WebDriver más orientada a objetos encapsulada basada en la API nativa del navegador, que puede manipular directamente elementos en la página del navegador)
  • La API de Selenium usa el protocolo JSON Wire para transferir el código a Language Bindings para convertirlo en JSON Payloads y enviarlo al controlador del navegador.
  • El controlador del navegador tiene un servidor HTTP incorporado para recibir solicitudes HTTP. Cuando el servidor HTTP recibe las cargas útiles JSON enviadas, el controlador del navegador las convertirá en solicitudes HTTP y luego las enviará al navegador real a través del protocolo HTTP. llevado a cabo
  • Una vez que los comandos del script de Selenium se ejecutan en el navegador, los resultados de la ejecución se devuelven al controlador del navegador a través de solicitudes HTTP.
  • El controlador del navegador devuelve el resultado al IDE a través del protocolo JSON Wire, para que podamos ver el resultado de la ejecución.

La ejecución de Selenium / WebDriver es lenta

No es difícil ver en el proceso de ejecución del código que el código se convierte varias veces y se transmite a través de la red. Incluso si el código se ejecuta localmente, la comunicación entre WebDriver y el navegador debe transmitirse a través de la red. En este caso, todas las solicitudes se enviarán a El host local, seguido de la interfaz de bucle invertido (la interfaz de bucle invertido se utiliza para verificar errores y ejecutar los servicios de red internos de la máquina), la comunicación de red comenzará desde la tercera capa del modelo OSI, la capa de red, y pasará a través de la capa de transporte, capa de sesión, Cuando la capa de presentación llega a la capa de aplicación, solo se omiten la capa física y la capa de enlace de datos. Para el navegador, el tiempo que tarda una solicitud en regresar del host local a la interfaz de bucle de retorno determina la eficiencia de la ejecución del código. Esto es la ejecución de Selenium / WebDriver Causa raíz lenta

Comparación de Cypress y Selenium / WebDriver

Modo de navegador de Drive

A diferencia de Selenium / WebDriver, que utiliza comandos que se ejecutan fuera del navegador para controlar el navegador en el modo de llamada remota, los comandos de Cypress se ejecutan en la misma instancia del navegador que la aplicación bajo prueba.

Rango de prueba

A diferencia de Selenium / WebDriver, que solo puede probar la capa de interfaz de usuario, Cypress puede probar la capa de interfaz de usuario / capa de interfaz / prueba de unidad. Para la pirámide de prueba, cuanto mayor sea la inversión, menor será el beneficio.
Inserte la descripción de la imagen aquí

Marco de prueba completo y biblioteca de pruebas

Cypress tiene un marco de prueba completo, mientras que Selenium / WebDriver es solo una biblioteca. La comparación detallada se muestra en la siguiente tabla:

Dimensión de contraste Ciprés Selenio / WebDriver
Marco completo si No, solo biblioteca
TODO EN UNO si No
Biblioteca de aserciones incorporada si No
Viene con Mock si No
Corredor de prueba incorporado si No
Velocidad de carrera rápido Relativamente lento
Espere mientras busca elementos Espera automática no apoyo
Modo sin cabeza colocarse colocarse
Captura de pantalla en tiempo de ejecución colocarse colocarse
Grabación de pantalla durante el tiempo de ejecución colocarse no apoyo
Ejecución de la prueba de reproducción colocarse no apoyo
Prueba concurrente Soporte (cargado) colocarse
Ejecutar pruebas de forma remota no apoyo Soporte de Selenium Grid
Lenguaje de escritura JavaScript Soporte multilenguaje
Compatibilidad con varios navegadores colocarse colocarse
comunidad Contenido perfecto regular

Cypress es un marco de prueba completo. Viene con un corredor de prueba (Test Runner), un marco de prueba unitario (Mocha) y una biblioteca de afirmaciones (Chai-jQuery). Lo único que se debe hacer es escribir el código de prueba, TODO EN UNO, a partir de los resultados de la comparación Se encuentra que Cypress no admite la operación concurrente, pero brinda la capacidad de ejecutar scripts de prueba en paralelo en máquinas virtuales y resultados de pruebas móviles; el lenguaje de scripting actualmente solo es compatible con JavaScript, que puede ser una de las razones del rango de uso deficiente, y antes de Cypress 4.0 Los navegadores que solo admiten el núcleo de Chromium, como Chrome, Electron y otros navegadores, son compatibles con Firefox y Microsoft Edge desde 4.0

Comparación de cipreses y karmas

// 安装Karma
npm install karma --save-dev
// 安装插件
npm install karma-jasmine karma-chrome-launcher jasmine-core --save-dev
// 运行Karma
./node_modules/karma/bin/karma start
Dimensión de contraste Ciprés Karma
Marco completo si No, solo Test Runner
TODO EN UNO si No
Biblioteca de aserciones incorporada si No
Viene con Mock si No
Corredor de prueba incorporado si si

Comparación de Cypress y Nightwatch

// 安装Node.js
// 安装Nightwatch
npm install nightwatch --save-dev
// 安装WebDriver
npm install geckodriver --save-dev
npm install chromedriver --save-dev
npm install safaridriver --save-dev
safaridriver --enable
npm install selenium-standalone --dave-dev
// 配置nightwatch.json,nightwatch.conf.js等参考
//https://nightwatchjs.org/gettingstarted//configuration
Dimensión de contraste Ciprés Vision nocturna
Marco completo si si
TODO EN UNO si Sí (instalación y configuración problemáticas)
Marco subyacente Investigación y desarrollo independientes, operación rápida. Velocidad de ejecución lenta basada en WebDriver
Ámbito de aplicación UI 、 API 、 UnitTest UI
Mantenimiento de guiones sencillo Difícil de mantener
Visita de regreso para ejecución de prueba si No
Compatibilidad con varios navegadores si si

Comparación de cipreses y transportadores

// 全局安装Protractor
npm install -g protractor
// 这将安装两个命令行工具protractor和webdriver-manager
// 验证安装
protractor --version
// 下载必要的binaries
webdriver-manager update
// 启动Selenium Server
webdriver-manager start
// 编写好测试用例,例如文件名为test.js,然后将其配置到配置文件conf.js中
exports.config={
    
    
	seleniumAddress:'http://localhost:4444/wd/hub',
	specs:['test.js']
};
// 运行测试
protractor conf.js
Dimensión de contraste Ciprés Transportador
Marco completo si si
TODO EN UNO si si
Marco subyacente Investigación y desarrollo independientes, operación rápida. Velocidad de ejecución lenta basada en WebDriverJS
Marco de prueba unitaria El moca se usa en la capa inferior y no se puede reemplazar Jasmine se usa de forma predeterminada y se permite el reemplazo
Ámbito de aplicación Los programas desarrollados en varios idiomas se pueden probar Utilizado principalmente en programas angulares
Visita de regreso para ejecución de prueba si No
Compatibilidad con varios navegadores si si
// 以下代码打开helloqa.com并验证title
// 网站不是基于Angular开发,因此代码需要做如下修改
// browser.waitForAngularEnabled(false);
describe('Protractor Demo App', function(){
    
    
	it('should have a title', function(){
    
    
		browser.waitForAngularEnabled(false);
		browser.get('http://helloqa.com');
		expect(browser.getTitle()).to.have.string('davieyang');;
	});
});

Comparación de Cypress y TestCafe

// 确定本机安装了Node.js和npm后
npm install testcafe --save-dev
npm install -g testcafe
// 运行测试
testcafe chrome{
    
    path-to-testfile/}testfile
Dimensión de contraste Ciprés TestCafe
Marco completo si si
TODO EN UNO si si
Marco subyacente Investigación y desarrollo independientes, operación rápida. Investigación y desarrollo independientes, trabajo a través de Proxy Server
Conveniencia de la organización de casos de prueba Basado en Mocha, fácil de organizar y escribir El método de escritura de casos de prueba es diferente del dispositivo convencional y el costo de aprendizaje es alto
Corredor de prueba incorporado si Sí, pero solo TestRunner
Visita de regreso para ejecución de prueba si No
Compatibilidad con varios navegadores si si
Prueba de funcionamiento La prueba se ejecuta en el navegador. La prueba se ejecuta en node.js, que es fácil de configurar y borrar los accesorios de la base de datos

Comparación de cipreses y titiriteros

npm i puppeteer
yarn add puppeteer
// 编写测试,访问helloqa站点并截图
const puppeteer=require('puppeteer');
	(async()=>{
    
    
		const browser = await puppeteer.launch();
		const page = await browser.newPage();
		await page.goto('https://www.helloqa.com');
		await page.screenshot({
    
    'path:testtExample.png'});
		await browser.close();
	})();
// 运行测试
node testExample.js
Dimensión de contraste Ciprés TestCafe
Marco completo si si
Hay un IDE si No
Ámbito de aplicación La solución perfecta de e2e Se utiliza principalmente para rastreo y pruebas rápidas.
Biblioteca de aserciones incorporada si No
Visita de regreso para ejecución de prueba si No
Compatibilidad con varios navegadores si si

Limitaciones de Cypress

  • Cypress no se recomienda para rastreo de sitios web o pruebas de rendimiento.
  • Cypress no admite pruebas de etiquetas múltiples
  • Cypress no admite la apertura de dos o más navegadores al mismo tiempo
  • Cada caso de prueba de Cypress debe seguir la política del mismo origen, es decir, el protocolo es el mismo, el nombre de dominio es el mismo y el puerto es el mismo; de lo contrario, se informará un error automáticamente
  • Actualmente solo es compatible con Chrome, Firefox, Microsoft Edge y Electron
  • No es compatible con dispositivos móviles
  • Soporte limitado para iframes
  • No se puede usar cy.route () en window.fetch
  • Sin soporte de DOM de sombra

Cyrepss tiene una versión gratuita y una de pago. Está dirigido a organizaciones que necesitan mejorar aún más la eficiencia de las pruebas y analizar los resultados de las pruebas de manera más eficaz. La versión de pago también tiene un Tablero de control basado en la integración continua.

Supongo que te gusta

Origin blog.csdn.net/dawei_yang000000/article/details/109911583
Recomendado
Clasificación