¿Cómo fragmentar archivos de prueba en el transportador?

Protractor es un marco de prueba de extremo a extremo desarrollado para aplicaciones Angular y AngularJS. Ejecuta pruebas contra la aplicación interactuando con ella como lo haría un usuario real, ejecutándose en un navegador real. En este artículo, vamos a discutir cómo podemos fragmentar conjuntos de pruebas en transportador.

Requisito previo: instalación y configuración del transportador

Fragmentación de suites de prueba significa ejecutar las suites de prueba en paralelo. Supongamos que hay dos suites de prueba, por lo que la fragmentación en paralelo de estas dos suites de prueba significaría que se crearían dos instancias de Chrome y las dos suites de prueba se ejecutarían en las dos instancias diferentes de Chrome por separado (es decir, se ejecutarán independientemente de cada una). otro) mientras que si los dos conjuntos de pruebas se hubieran ejecutado en serie, solo se creará una instancia de Chrome y luego el segundo conjunto de pruebas tendría que esperar a que se complete el primer conjunto de pruebas para ejecutarse (es decir, no podrían ejecutarse de forma independiente) . Ahora, como la fragmentación ayuda a que los conjuntos de pruebas se ejecuten en paralelo, disminuiría el tiempo de ejecución y aumentaría la eficiencia de la prueba.

A continuación se muestra la representación del diagrama de flujo de la explicación anterior:

Ejecución de pruebas en paralelo

Ejecución de pruebas en serie

Acercarse:

  • Vamos a crear un programa de prueba básico en el que vamos a ver cómo fragmentamos las suites de prueba.
  • Todas las pruebas de Protractor tendrán un archivo que contendrá la configuración y este será el archivo inicial que iniciará la prueba.
  • Vamos a crear este archivo con el nombre conf.js.
  • Para la fragmentación, declare dos capacidades en el bloque de capacidades del archivo conf.js.
    • shardTestFiles: permite que se ejecuten diferentes especificaciones en paralelo. Si se configura como verdadero, las especificaciones se fragmentarán por archivo (es decir, todos los archivos que ejecutará este conjunto de capacidades se ejecutarán en paralelo). El valor predeterminado es falso.
    • maxInstances: número máximo de instancias de navegador que se pueden ejecutar en paralelo para este conjunto de capacidades. Esto solo es necesario si shardTestFiles es verdadero. El valor predeterminado es 1.

Paso 1: primero debemos crear un archivo conf.js que contenga la configuración que se usará con Protractor.

conf.js

// An example configuration file to
// illustrate sharding
exports.config = {
  directConnect: true,
  
  // Capabilities to be passed to the 
  // webdriver instance for sharding
  capabilities: {
    'browserName': 'chrome',
  
    // Sharding
    'shardTestFiles': true,
    'maxInstances': 2, 
  },
  
  // Framework to use. Jasmine is
  // recommended
  framework: 'jasmine',
  
  // Spec patterns are relative to the
  // current working directory when
  // protractor is called.
  specs: ['test1.js','test2.js'],
  SELENIUM_PROMISE_MANAGER: false,
  // Options to be passed to Jasmine.
  jasmineNodeOpts: {
    defaultTimeoutInterval: 30000
  }
};

Paso 2: Crearemos los dos archivos HTML llamados index1.html e index2.html.

index1.html

<!DOCTYPE html>
<html>
  
<head>
    <title>
        fade-in effect on page load using JavaScript
    </title>
  
    <script type="text/javascript">
        var opacity = 0;
        var intervalID = 0;
        window.onload = fadeIn;
  
        function fadeIn() {
            setInterval(show, 200);
        }
  
        function show() {
            var body = document.getElementById("fade-in");
            opacity = Number(window.getComputedStyle(body)
                .getPropertyValue("opacity"));
            if (opacity < 1) {
                opacity = opacity + 0.1;
                body.style.opacity = opacity
            } else {
                clearInterval(intervalID);
            }
        }
    </script>
</head>
  
<body>
      
    <!-- The element to be tested -->
    <div id="fade-in" style="opacity: 0;">
        Inner text
    </div>
</body>
  
</html>

index2.html

<!DOCTYPE html>
<html>
  
<body>
    <!-- The element to be tested -->
    <div id="hidden-div" style="display: none;">
        Inner text
    </div>
</body>
  
</html>

Paso 3: Crearemos el archivo test1.js. En este archivo, vamos a acceder al archivo index1.html y luego vamos a esperar a que el elemento se desvanezca por completo. El navegador es un global creado por Protractor, que se usa para los comandos a nivel del navegador, como la navegación con browser.get() método. La sintaxis describe e it proviene del marco Jasmine, donde describe es una descripción de su prueba mientras define los pasos para la prueba.

test1.js

describe('Protractor Demo App', function () {
  it('should have a title', async function () {
  
    // Disable waiting for Angular render update
    await browser.waitForAngularEnabled(false)
  
    // Get the HTML file that has to be tested
    await browser.get('index1.html');
      
    // Get the fade in element
    let fadeIn = element(by.id('fade-in'));
      
    // Wait for the fade in process to complete
    await browser.driver.wait(async function() {
      return await fadeIn.getCssValue('opacity') === '1';
    }, 30000, "Taking too long to fade in");
  });
});

Del mismo modo, crearemos el archivo test2.js. En este archivo, accederemos al archivo index2.html y luego verificaremos si el elemento está oculto o no. El navegador es un global creado por Protractor, que se utiliza para los comandos a nivel de navegador, como la navegación con el método browser.get(). La descripción y su sintaxis provienen del marco Jasmine, donde describe es una descripción de su prueba mientras define los pasos para la prueba.

test2.js

describe('Protractor Demo App', function () {
  it('should have a title', async function () {
    
      // Disable waiting for Angular render update
      await browser.waitForAngularEnabled(false)
    
      // Get the HTML file that has to be tested
      await browser.get('index2.html');
    
      // Test if the element is hidden
      let hiddenDiv = element(by.id('hidden-div'));
    
      // This test will pass only when
      // element is hidden
      expect(hiddenDiv.isDisplayed()).toBe(false);
  });
});

Paso 4: Finalmente, ejecutaremos el archivo de configuración usando el comando que se indica a continuación. Esto ejecutará el archivo de configuración y la prueba se ejecutará como se muestra en el resultado a continuación.

protractor conf.js

Producción:

Publicación traducida automáticamente

Artículo escrito por shahbazalam75508 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *