天天看點

盤點13個優秀的前端測試開源架構

大家好,我是Echa。

春節初五,五路财神來運财,東南西北中,财運聚你家。祝粉絲們住在黃金屋,遍種搖錢樹,盛放幸福花,結滿富貴果,處處都是聚寶盤,條條大路通财路!

迎财神,接财神,财神來了請進門。财神财神着錦衣,送大家貌美如花妻;财神财神系玉帶,願大家升職加薪快;财神手拿金元寶,保大家一生運勢高!

關于前端測試這塊,小編記得2022年11月份的時候有釋出一篇:11個值得推薦的前端性能測試工具 有興趣的小夥伴可以回頭看看,小編推薦的是絕對曬幹的幹貨,沒曬幹從來不分享出來。

今天小編繼續分享13個優秀的前端測試開源架構,希望對從事前端的程式員以及測試崗位的測試員有所幫助。在前端測試中,架構可以把測試代碼抽離出來,作為一個整體結構化地去設計測試用例,放到專門的測試檔案中,也可以實作自動運作以及顯示測試結果。

創作不易,喜歡的老鐵們加個關注,點個贊,打個賞,後面會不定期更新幹貨和技術相關的資訊,速速收藏,謝謝!你們的一個小小舉動就是對小編的認可,更是創作的動力。

小編總結前端測試通常可以分為以下三種:

  1. 單元測試:将代碼的各個部分分開,對軟體中的最小可測試單元進行檢查和驗證;
  2. 內建測試:測試多個單元能否協調工作;
  3. 端到端測試(E2E):從頭到尾測試整個軟體産品,以確定應用程式流按預期運作。

全文大綱

  1. Jest
  2. Mocha
  3. Cypress
  4. Storybook
  5. Jasmine
  6. React Testing Library
  7. Playwright
  8. Vitest
  9. AVA
  10. Selenium
  11. Puppeteer
  12. WebdriverIO
  13. TestCafe

2022 年度 StateOfJS 官方調查結果正式公布!StateOfJS 是前端生态圈中非常有影響力的且規模較大的資料調查,前端測試架構受歡迎度排行榜,總共從四個次元(滿意度、關注度、使用度、認知度)去分析,具體如下圖:

盤點13個優秀的前端測試開源架構

StateOfJS官方滿意度

盤點13個優秀的前端測試開源架構

StateOfJS官方關注度

盤點13個優秀的前端測試開源架構

StateOfJS使用度

盤點13個優秀的前端測試開源架構

Jest

官方網址:https://jestjs.io/

Github:https://github.com/facebook/jest

Jest 是一個令人愉快的 JavaScript 測試架構,專注于 簡潔明快。

Jest 是由 Facebook 開發的 JavaScript 測試架構。它是測試 React 的首選,并且得到了 React 社群的支援和開發。

Jest 具有以下特點:

  • 相容性:除了可以測試 React 應用,還可以輕松內建到其他應用中,與 Angular、Node、Vue 和其他基于babel的項目相容。
  • 自動模拟:當在測試檔案中導入庫時,Jest 會自動模拟這些庫以幫助我們輕松地使用它們。
  • 擴充 API:Jest 提供了廣泛的 API,除非确實需要,否則不需要包含額外的庫。
  • 計時器模拟:Jest 具有時間模拟系統,非常适合應用中的快進逾時,并有助于在運作測試時節省時間。
  • 活躍社群:Jest 擁有很活躍的社群,可以幫助我們在需要時快速找到解決方案。
  • 零配置:Jest 的目标是在大部分 JavaScript 項目上實作開箱即用, 無需配置。
  • 快照:能夠輕松追蹤大型對象的測試。 快照可以與測試代碼放在一起,也可以內建進代碼 行内。
  • 隔離:測試程式擁有自己獨立的程序 以最大限度地提高性能。
  • 優秀的 api:從 it 到 expect - Jest 将整個工具包放在同一個 地方。好書寫、好維護、非常友善。

測試代碼:

// __tests__/sum-test.js
jest.dontMock('../sum');

describe('sum', function() {
 it('adds 1 + 2 to equal 3', function() {
   var sum = require('../sum');
   expect(sum(1, 2)).toBe(3);
 });
});           

如下圖:

盤點13個優秀的前端測試開源架構

Mocha

官方網址:https://mochajs.org/

Github:https://github.com/mochajs/mocha

Mocha 是一個功能豐富的 JavaScript 測試架構,可以運作在 Node.js 和浏覽器中,使異步測試變得簡單有趣。Mocha 測試連續運作,允許靈活和準确的報告,同時将未捕獲的異常映射到正确的測試用例。

Mocha 不支援開箱即用的斷言、模拟等,需要通過元件/插件來添加這些功能。與 Mocha 搭配的最流行的斷言庫包括 Chai、Assert、Should.js 和 Better-assert。

Mocha 具有以下特點:

  • 使用簡單:對于不包含複雜斷言或測試邏輯的較小項目,Mocha 是一個簡單的解決方案。
  • ES子產品支援:Mocha 支援将測試編寫為 ES 子產品,而不僅是使用 CommonJS。

當然,Mocha 也是有缺點的:

  • 設定難度大:必須使用額外的斷言庫,這确實意味着它比其他庫更難設定。
  • 與插件的潛在不一緻:Mocha 将測試結構包含為 globals,不必在每個檔案中都使用 includeor 來節省時間。require 缺點是插件可能會要求無論如何都包含這些,進而導緻不一緻。
  • 不支援任意轉譯器:在 v6.0.0 之前,Mocha 有一個允許使用任意轉譯器的特性,比如 coffee-script 等,但現在已經棄用。

測試代碼:

var assert = require('assert');
describe('Array', function () {
  describe('#indexOf()', function () {
    it('should return -1 when the value is not present', function () {
      assert.equal([1, 2, 3].indexOf(4), -1);
    });
  });
});           

如下圖:

盤點13個優秀的前端測試開源架構
盤點13個優秀的前端測試開源架構

Cypress

官方網址:https://cypress.io/

Github:https://github.com/cypress-io/cypress

Cypress 是為現代 Web 建構的下一代前端測試工具。借助 Cypress,開發人員可以編寫端到端測試、內建測試和單元測試。Cypress 完全可以在真正的浏覽器(Chrome、Firefox 和 Edge)中運作,不需要驅動程式二進制檔案。自動化代碼和應用代碼共享同一個平台,讓開發人員可以完全控制被測應用。Cypress 以其端到端測試功能而聞名,這意味着可以遵循預定義的使用者行為,并讓該工具在每次部署新代碼時報告潛在差異。

Cypress 具有以下特點:

  • 端到端測試:由于 Cypress 在真實浏覽器中運作,是以可以依賴它進行端到端使用者測試。
  • 時間軸快照測試:在執行時,Cypress 會拍下那一刻的快照,并允許開發人員或 QA 測試人員檢視特定步驟發生的情況。
  • 穩定可靠:與其他測試架構相比,Cypress 提供了穩定可靠的測試執行結果。
  • 文檔和社群:從零到運作,Cypress 包含所有必要的資訊以幫助開發人員加快速度,并且它還有一個活躍的社群。
  • 速度快:Cypress 的測試執行速度很快,響應時間不短 20 毫秒。

不過,需要注意的是,Cypress 隻能在單個浏覽器中運作測試。

測試代碼:

describe('My First Test', () => {
  it('Gets, types and asserts', () => {
    cy.visit('https://example.cypress.io')

    cy.contains('type').click()

    // Should be on a new URL which
    // includes '/commands/actions'
    cy.url().should('include', '/commands/actions')

    // Get an input, type into it
    cy.get('.action-email').type('[email protected]')

    //  Verify that the value has been updated
    cy.get('.action-email').should('have.value', '[email protected]')
  })
})           

如下圖:

盤點13個優秀的前端測試開源架構
盤點13個優秀的前端測試開源架構

Storybook

官方網址:https://storybook.js.org/

Github:https://github.com/storybookjs/storybook

Storybook與其他 JavaScript 測試架構不同,Storybook 是一個 UI 測試工具,它為測試元件提供了一個隔離的環境。Storybook 還附帶工具、Test runner 以及與更大的 JavaScript 生态系統的友善內建,以擴充 UI 測試覆寫範圍。

可以通過多種方式使用 Storybook 進行 UI 測試:

  • 視覺測試:捕獲每個故事的螢幕截圖,然後将其與基線進行比較以檢測外觀和內建問題。
  • 輔助功能測試:發現與視覺、聽覺、移動、認知、語言或神經障礙相關的可用性問題。
  • 互動測試:通過模拟使用者行為、觸發事件并確定狀态按預期更新來驗證元件功能。
  • 快照測試:檢測渲染标記中的更改以顯示表面渲染錯誤或警告。
  • 将其他測試中的故事導入 QA 甚至更多 UI 特性。

測試代碼:

// stories/userStory.js
import { storiesOf } from "@storybook/react";
import { userHooks } from '../src/index'
import React from 'react';

const Demo = () => {
    const result = userHooks();
    return (
        <div>
            <p>{result}</p>
        </div>
    )
}

storiesOf("user", module).add('Demo', Demo);           

如下圖:

盤點13個優秀的前端測試開源架構

Jasmine

官方網址:http://jasmine.github.io/

Github:https://github.com/jasmine/jasmine

Jasmine 是一個簡易的 JavaScript 單元測試架構,其不依賴于任何浏覽器、DOM、或者是任何 JavaScript 而存在。它适用于所有網站、Node.js 項目,或者是任何能夠在 JavaScript 上面運作的程式。Jasmine 以行為驅動開發 (BDD) 工具而聞名。BDD 涉及在編寫實際代碼之前編寫測試(與測試驅動開發 (TDD)相反)。

Jasmine 具有以下特點:

  • API 簡單:它提供了簡潔且易于了解的文法,以及用于編寫單元測試的豐富而直接的 API 。
  • 開箱即用:不需要額外的斷言或模拟庫,開箱即用。
  • 速度快:由于不依賴任何外部庫,是以速度相對較快。
  • 多語言:不僅用于編寫 JS 測試,也可以用于 Ruby(通過Jasmine-gem)或 Python(通過Jsmin-py)

當然,Jasmine 也是有有缺點的:

  • 污染全局環境:預設情況下,它會建立測試全局變量(關鍵字如“describe”或“test”),是以不必在測試中導入它們。在特定情況下,這可能會成為不利因素。
  • 編寫異步測試具有挑戰性:使用 Jasmine 測試異步函數比較困難。

測試代碼:

describe("A suite is just a function", function() {
  let a;

  it("and so is a spec", function() {
    a = true;

    expect(a).toBe(true);
  });
});           

如下圖:

盤點13個優秀的前端測試開源架構

React Testing Library

官方網址:https://testing-library.com/react

Github:https://github.com/testing-library/react-testing-library

React Testing Library 基于 DOM Testing Library 的基礎上添加一些 API,主要用于測試 React 元件。該庫在使用過程并不關注元件的内部實作,而是更關注測試。該庫基于 react-dom 和 react-dom/test-utils,是以上兩者的輕量實作。

React Testing Library 不像 Jest 那樣是一個 Test runner。事實上,它們可以協同工作。React Testing Library 是一組工具和功能,可幫助通路 DOM 并對其執行操作,即将元件渲染到虛拟 DOM 中,搜尋并與之互動。

React Testing Library 具有以下特點:

  • React 官方推薦:可以在 React 的官方文檔中找到使用此庫的參考和建議。
  • 尺寸小:它是專門為測試 React 應用/元件而編寫的。

測試代碼:

__tests__/fetch.test.jsx
import React from 'react'
import {rest} from 'msw'
import {setupServer} from 'msw/node'
import {render, fireEvent, waitFor, screen} from '@testing-library/react'
import '@testing-library/jest-dom'
import Fetch from '../fetch'

const server = setupServer(
  rest.get('/greeting', (req, res, ctx) => {
    return res(ctx.json({greeting: 'hello there'}))
  }),
)

beforeAll(() => server.listen())
afterEach(() => server.resetHandlers())
afterAll(() => server.close())

test('loads and displays greeting', async () => {
  render(<Fetch url="/greeting" />)

  fireEvent.click(screen.getByText('Load Greeting'))

  await waitFor(() => screen.getByRole('heading'))

  expect(screen.getByRole('heading')).toHaveTextContent('hello there')
  expect(screen.getByRole('button')).toBeDisabled()
})

test('handles server error', async () => {
  server.use(
    rest.get('/greeting', (req, res, ctx) => {
      return res(ctx.status(500))
    }),
  )

  render(<Fetch url="/greeting" />)

  fireEvent.click(screen.getByText('Load Greeting'))

  await waitFor(() => screen.getByRole('alert'))

  expect(screen.getByRole('alert')).toHaveTextContent('Oops, failed to fetch!')
  expect(screen.getByRole('button')).not.toBeDisabled()
})

           

如下圖:

盤點13個優秀的前端測試開源架構

Playwright

官方網址:https://playwright.dev/

Github: https://github.com/microsoft/playwright

Playwright 是一個用于端到端測試的自動化架構。該架構由 Microsoft 建構和維護,旨在跨主要浏覽器引擎(Chromium、Webkit 和 Firefox)運作。它實際上是早期 Puppeteer 項目的一個分支。主要差別在于,Playwright 是專門為開發人員和測試人員進行 E2E 測試而編寫的。Playwright 還可以與主要的 CI/CD 伺服器一起使用,如 TravisCI、CircleCI、Jenkins、Appveyor、GitHub Actions 等。

Playwright 具有以下特點:

  • 多語言:Playwright 支援 JavaScript、Java、Python 和 .NET C# 等多種語言;
  • 多個 Test Runner 支援:可以被 Mocha、Jest 和 Jasmine 使用;
  • 跨浏覽器:該架構的主要目标是支援所有主流浏覽器。
  • 模拟和原生事件支援:可以模拟移動裝置、地理位置和權限,還支援利用滑鼠和鍵盤的原生輸入事件。

當然,Playwright 也有一些缺點:

  • 仍處于早期階段:相當較新,社群支援有限;
  • 不支援真實裝置:不支援用于移動浏覽器測試的真實裝置,但支援模拟器。

測試代碼:

import { test, expect } from '@playwright/test';

test('my test', async ({ page }) => {
  await page.goto('https://playwright.dev/');

  // Expect a title "to contain" a substring.
  await expect(page).toHaveTitle(/Playwright/);

  // Expect an attribute "to be strictly equal" to the value.
  await expect(page.locator('text=Get Started').first()).toHaveAttribute('href', '/docs/intro');

  await page.click('text=Get Started');
  // Expect some text to be visible on the page.
  await expect(page.locator('text=Introduction').first()).toBeVisible();
});           

如下圖:

盤點13個優秀的前端測試開源架構

Vitest

官方網址:https://vitest.dev/

Github: https://github.com/avajs/ava

Vitest 是一個由 Vite 提供支援的極速單元測試架構。其和 Vite 的配置、轉換器、解析器和插件保持一緻、開箱即用的 TypeScript / JSX 支援、支援 Smart 和 instant watch 模式,如同用于測試的 HMR、内置 Tinyspy 用于模拟、打标和監察等。Vitest 非常關心性能,使用 Worker 線程盡可能并行運作,帶來更好的開發者體驗。

Vitest 具有以下特點:

  • Vite 支援:重複使用 Vite 的配置、轉換器、解析器和插件,在應用和測試中保持一緻。
  • 相容 Jest:擁有預期、快照、覆寫等 - 從 Jest 遷移很簡單。
  • 智能即時浏覽模式:智能檔案監聽模式,就像是測試的 HMR。
  • ESM, TypeScript, JSX:由 esbuild 提供的開箱即用 ESM、TypeScript 和 JSX 支援。
  • 源内測試:提供了一種在源代碼中運作測試以及實作的方法,類似于 Rust 的子產品測試。

不過,Vitest 仍處于早期階段(最新版本為 0.28.1)。盡管 Vitest 背後的團隊在建立此工具方面做了大量工作,但它還很年輕,社群支援可能還不是很完善。

測試代碼:

import { assert, describe, it } from 'vitest'

// Only this suite (and others marked with only) are run
describe.only('suite', () => {
  it('test', () => {
    assert.equal(Math.sqrt(4), 3)
  })
})

describe('another suite', () => {
  it('skipped test', () => {
    // Test skipped, as tests are running in Only mode
    assert.equal(Math.sqrt(4), 3)
  })

  it.only('test', () => {
    // Only this test (and others marked with only) are run
    assert.equal(Math.sqrt(4), 2)
  })
})           

如下圖:

盤點13個優秀的前端測試開源架構

AVA

Github: https://github.com/avajs/ava

AVA 是一個極簡的 Test Runner,它利用 JavaScript 的異步特性并同時運作測試,進而提高性能。AVA 不會為建立任何 Globals,是以可以更輕松地控制使用的内容。這可以使測試更加清晰,確定确切知道發生了什麼。

AVA 具有以下特點:

  • 同時運作測試:利用 JavaScript 的異步特性使得測試變得簡單,最小化部署之間的等待時間;
  • 簡單的 API:通過了一個簡單的 API,僅提供需要的内容;
  • 快照測試:通過 jest-snapshot 提供,當想知道應用的 UI 何時意外更改時,這非常有用;
  • Tap 格式報告:Ava 預設顯示可讀的報告,也可以獲得 TAP 格式的報告。

當然,AVA 也有一些缺點:

  • 沒有測試分組:Ava 無法将相似的測試組合在一起。
  • 沒有内置的模拟:Ava 未附帶模拟,不過可以使用第三方庫(如Sinon.js)。

測試代碼:

import test from 'ava';

test('foo', t => {
    t.pass();
});

test('bar', async t => {
    const bar = Promise.resolve('bar');

    t.is(await bar, 'bar');
});           

如下圖:

盤點13個優秀的前端測試開源架構

Selenium

官方網址:https://www.selenium.dev/

Github: https://github.com/seleniumhq/selenium

Selenium是一個用于Web應用程式測試的工具。Selenium測試直接運作在浏覽器中,就像真正的使用者在操作一樣。支援的浏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等。這個工具的主要功能包括:測試與浏覽器的相容性——測試應用程式看是否能夠很好得工作在不同浏覽器和作業系統之上。測試系統功能——建立回歸測試檢驗軟體功能和使用者需求。支援自動錄制動作和自動生成.Net、Java、Perl等不同語言的測試腳本。

功能

  • 架構底層使用JavaScript模拟真實使用者對浏覽器進行操作。測試腳本執行時,浏覽器自動按照腳本代碼做出點選,輸入,打開,驗證等操作,就像真實使用者所做的一樣,從終端使用者的角度測試應用程式。
  • 使浏覽器相容性測試自動化成為可能,盡管在不同的浏覽器上依然有細微的差别。
  • 使用簡單,可使用Java,Python等多種語言編寫用例腳本。

優勢

據Selenium首頁所說,與其他測試工具相比,使用Selenium的最大好處是:

Selenium測試直接在浏覽器中運作,就像真實使用者所做的一樣。Selenium測試可以在Windows、Linux和Macintosh上的Internet Explorer、Chrome和Firefox中運作。其他測試工具都不能覆寫如此多的平台。使用Selenium和在浏覽器中運作測試還有很多其他好處。

Selenium完全開源,對商業使用者也沒有任何限制,支援分布式,擁有成熟的社群與學習文檔

下面是主要的幾大好處:

通過編寫模仿使用者操作的Selenium測試腳本,可以從終端使用者的角度來測試應用程式。通過在不同浏覽器中運作測試,更容易發現浏覽器的不相容性。Selenium的核心,也稱browser bot,是用JavaScript編寫的。這使得測試腳本可以在受支援的浏覽器中運作。browser bot負責執行從測試腳本接收到的指令,測試腳本要麼是用HTML的表布局編寫的,要麼是使用一種受支援的程式設計語言編寫的。

測試代碼:

盤點13個優秀的前端測試開源架構

如下圖:

盤點13個優秀的前端測試開源架構

Puppeteer

官方網址:https://pptr.dev/

Github: https://github.com/puppeteer/puppeteer

Puppeteer 是一個控制 headless Chrome 的 Node.js API 。它是一個 Node.js 庫,通過 DevTools 協定提供了一個進階的 API 來控制 headless Chrome。它還可以配置為使用完整的(非 headless)Chrome。

在浏覽器中手動完成的大多數事情都可以通過使用 Puppeteer 完成,下面是一些入門的例子:

  • 生成螢幕截圖和 PDF 頁面
  • 檢索 SPA 并生成預渲染内容(即 “SSR”)
  • 從網站上爬取内容
  • 自動送出表單,UI 測試,鍵盤輸入等
  • 建立一個最新的自動測試環境。使用最新的 JavaScript 和浏覽器功能,在最新版本的 Chrome 中直接運作測試
  • 捕獲網站的時間線跟蹤,以幫助診斷性能問題

測試代碼:

import puppeteer from 'puppeteer';

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  await page.goto('https://developer.chrome.com/');

  // Set screen size
  await page.setViewport({width: 1080, height: 1024});

  // Type into search box
  await page.type('.search-box__input', 'automate beyond recorder');

  // Wait and click on first result
  const searchResultSelector = '.search-box__link';
  await page.waitForSelector(searchResultSelector);
  await page.click(searchResultSelector);

  // Localte the full title with a unique string
  const textSelector = await page.waitForSelector(
    'text/Customize and automate'
  );
  const fullTitle = await textSelector.evaluate(el => el.textContent);

  // Print the full title
  console.log('The title of this blog post is "%s".', fullTitle);

  await browser.close();
})();           

如下圖:

盤點13個優秀的前端測試開源架構

WebdriverIO

官方網址:https://webdriver.io/

Github: https://github.com/webdriverio/webdriverio

WebdriverIO是一個基于節點的浏覽器和自動化測試架構。js。在WebDrivero中添加助手函數在WebDrivero中很簡單。此外,它還可以在WebDriver協定和Chrome Devtools協定上運作,這使得它對于基于Selenium WebDriver的跨浏覽器都非常有效 testing或者基于鉻的自動化。最重要的是,由于WebDriverIO是開源的,您可以獲得一系列插件來滿足您的自動化需求。

專門為前端開發者們:可擴充-添加助手函數或更複雜的集合以及現有指令的組合非常簡單,非常有用。

相容-WebdriverIO可以在WebDriver協定上運作,以進行真正的跨浏覽器測試,也可以在Chrome DevTools協定上使用Puppeter進行基于Chromium的自動化。

功能豐富-各種内置和社群插件允許您輕松內建和擴充設定以滿足您的需求。

您可以使用WebdriverIO自動化:

用React、Vue、Angular、Svelte或其他前端架構編寫的現代web應用程式

在模拟器/模拟器或真實裝置上運作的混合或本地移動應用程式

本機桌面應用程式(例如用Electron.js編寫)

浏覽器中web元件的單元或元件測試

測試代碼:

import { $, expect } from '@wdio/globals'
import { render } from '@testing-library/vue'
import HelloWorld from '../../src/components/HelloWorld.vue'

describe('Vue Component Testing', () => {
    it('increments value on click', async () => {
        const { getByText } = render(HelloWorld)
        const btn = getByText('count is 0')

        // transform into WebdriverIO element
        const button = await $(btn)
        await button.click()
        await button.click()

        getByText('count is 2')
        await expect($('button=count is 2')).toExist()
    })
})           

如下圖:

盤點13個優秀的前端測試開源架構
盤點13個優秀的前端測試開源架構

TestCafe

官方網址:https://testcafe.io/

Github:https://github.com/DevExpress/testcafe

TestCafe 是一個用于測試 Web 應用程式的純 Node.js 端到端解決方案。 它負責所有階段:啟動浏覽器,運作測試,收集測試結果和生成報告。 TestCafe 不需要浏覽器插件,它在所有流行的現代浏覽器開箱即用。

前面小編介紹了很多測試架構工具,為什麼還要介紹TestCafe呢?因為TestCafe支援的浏覽器更多,且也内置自動等待機制,穩定性上面相較與webdriver有很大提高。下面列舉了TestCafe在穩定性、測試資料管理、配置資訊管理以及支援的web應用操作場景等方面的支援程度。另外,TestCafe還支援并發執行,即可以同時開啟多個浏覽器運作多個測試案例,縮短測試回報時間,這是前面兩個架構都不具備的。故如果被測應用需要支援IE、safari這些浏覽器,testcafe是個不錯的選擇。

除上面已支援的功能外,testcafe還計劃支援。

Testing in Multiple Browser Windows,即開啟多個tab頁,在多個tab頁上執行一個完整的自動化測試。 --計劃支援,并已進入開發階段。

架構自身支援接口調用。 --計劃支援,暫未進入開發階段。

Selector Debug Panel,UI測試大部分調試場景都是定位和操作頁面元素,Selector Debug Panel可極大的提升調試效率。 --計劃支援,并已進入開發階段。

盤點13個優秀的前端測試開源架構

測試代碼:

const createTestCase = require('testcafe');
const fs = require('fs');

let testcafe = null;

createTestCase('localhost', 1337, 1338)
    .then(tc => {
        testcafe = tc;
        const runner = testcafe.createRunner();
        const stream = fs.createWriteStream('report.json');
        return runner
            // 需要運作的cases
            .src(
                [
                    '../demo/podemo/*.js',
                    '../demo/setWindowsSize.js'
                ]
            )
            // 設定需要執行的浏覽器
            .browsers([
                'chrome',
                'firefox'
            ])
            // 錯誤自動截圖
            .screenshots(
                // 儲存路徑
                '../error/',
                true,
                // 儲存路勁格式
                '${DATE}_${TIME}/test-${TEST_INDEX}/${USERAGENT}/${FILE_INDEX}.png'
            )
            // 生成report格式,根據需要安裝對應report子產品,
            // 詳細看:http://devexpress.github.io/testcafe/documentation/using-testcafe/common-concepts/reporters.html
            .reporter('json', stream)
            // 并發
            .concurrency(3)
            .run({
                skipJsErrors: true, // 頁面js錯誤是否忽略,建議為true
                quarantineMode: true, // 隔離模式,可以了解為失敗重跑
                selectorTimeout: 15000, // 設定頁面元素查找逾時時間,智能等待
                assertionTimeout: 7000, // 設定斷言逾時時間
                pageLoadTimeout: 30000, // 設定頁面加載逾時時間
                debugOnFail: true, // 失敗開啟調試模式 腳本編寫建議開啟
                speed: 1 // 執行速度0.01 - 1
            });
    }).then(failedCount => {
    console.error('Failed Count:' + failedCount);
    testcafe.close();
})
    .catch(err => {
        console.error(err);
    });           

如下圖:

盤點13個優秀的前端測試開源架構
盤點13個優秀的前端測試開源架構
盤點13個優秀的前端測試開源架構

最後感謝

  • 感謝StateOfJS 團隊一直為開發者提供精準前沿技術的排名統計,讓更多的開發者有了研究新技術的學習方向和動力
  • 感謝位元組跳動的今日頭條技術團隊,為我們提供這麼好的大平台,讓小編和粉絲們相遇,共同探讨技術,共同學習,共同成長,共同進步。

繼續閱讀