Test automation. Intro

Agenda

  • Node.js testing Frameworks
  • Selenium

Node.js Frameworks

  • node:test
  • mocha+chai
  • ava
  • jest
  • nyc
  • karma
  • jasmine
  • playwright

API

  • Assertions
  • Expectations/Matchers

Assertions

import assert from 'node:assert';

assert.deepEqual(5, 3, 'not equal')

// This fails because 1 !== '1'.
assert.deepStrictEqual({ a: 1 }, { a: '1' });

Matchers

  • toBeNull matches only null
  • toBeUndefined matches only undefined
  • toBeDefined
  • toBeTruthy
  • toBeFalsy
  • toBeGreaterThan(OrEqual)
  • toBeLessThan(OrEqual)
  • toBeCloseTo
  • toContain
  • toThrow
  • extend

Matchers

test('object assignment', () => {
  const data = {one: 1};
  data['two'] = 2;
  expect(data).toEqual({one: 1, two: 2});
});

test('two plus two is four', () => {
  expect(2 + 2).toBe(4);
});

test('null', () => {
  const n = null;
  expect(n).toBeNull();
  expect(n).toBeDefined();
  expect(n).not.toBeUndefined();
  expect(n).not.toBeTruthy();
  expect(n).toBeFalsy();
});

test('adding floating point numbers', () => {
  const value = 0.1 + 0.2;
  //expect(value).toBe(0.3);           This won't work because of rounding error
  expect(value).toBeCloseTo(0.3); // This works.
});

Отличие

assertion matcher/expectation
комплексный простой
не кастомизируемый кастомизируемый

Для эмуляции поведения

  • selenium - browsers
  • appium - mobile
  • cypress - browsers
  • puppeteer - browsers
  • playwright - browsers
  • testcafe - browsers
  • k6 - load testing
  • autocannon - load testing
  • wdio

Selenium

Библиотека для эмулирования поведения пользователя

W3C Recommendation

Что такое Selenium

Win/Mac/Linux

Webdriver

Browser Driver

Что такое selenium

Как начать

npm install selenium-webdriver

Как начать

const {By, Builder, Browser} = require('selenium-webdriver');
const assert = require("assert");

let driver;

test.beforeEach(() => {
  driver = await new Builder().forBrowser(Browser.CHROME).build();
})
test('first test', async () => {
    
    await driver.get('https://www.selenium.dev/selenium/web/web-form.html');
  
    let title = await driver.getTitle();
    assert.equal("Web form", title);
  
    await driver.manage().setTimeouts({implicit: 500});
  
    let textBox = await driver.findElement(By.name('my-text'));
    let submitButton = await driver.findElement(By.css('button'));
  
    await textBox.sendKeys('Selenium');
    await submitButton.click();
  
    let message = await driver.findElement(By.id('message'));
    let value = await message.getText();
    assert.equal("Received!", value);
})

test.afterEach(async () => {
    await driver.quit();
})

Selectors: CSS, XPath

Waits

Links