先前我們利用 Cypress 框架來進行端對端測試,今天來說明如何在 Cypress 中設定測試報表。
由於 Cypress 是建構在 Mocha 之上,所以由 Mocha 建置的報表也可以使用在 Cypress 之中,因此我們可以自行撰寫 Mocha 的自訂報表,然後在 Cypress 的組態檔中指定報表的路徑。
export default defineConfig({
reporter: 'reporters/custom.js'
})
或者是利用 Cypress 執行命令的 -—reporter
進行指令。
cypress run --reporter reporters/custom.js
另外,Cypress 框架提供 Plugins 的機制,讓我們可以針對不同的需求進行擴充。因此,我們可以執行下列 NPM 命令來安裝報表套件。
npm install --save-dev cypress-mochawesome-reporter
接著,在 cypress.config.ts
組態設定中指定 reporter
屬性值,且透過 setupNodeEvents()
方法設定在 run
命令之前與之後皆去執行此套件程式。
import { defineConfig } from 'cypress';
import { afterRunHook, beforeRunHook } from 'cypress-mochawesome-reporter/lib';
export default defineConfig({
e2e: {
baseUrl: 'http://localhost:4200',
reporter: 'cypress-mochawesome-reporter',
reporterOptions: {
charts: true,
reportPageTitle: '2022 鐵人賽範例',
embeddedScreenshots: true,
inlineAssets: true,
saveAllAttempts: false,
},
async setupNodeEvents(on: Cypress.PluginEvents, config: Cypress.PluginConfigOptions) {
require('cypress-mochawesome-reporter/plugin')(on);
on('before:run', async (details) => {
await beforeRunHook(details);
});
on('after:run', async () => {
await afterRunHook();
});
},
},
});
最後,只要在 support/e2e.ts
檔案內匯入這個報表,就完成相關的設定。
import 'cypress-mochawesome-reporter/register';
如此一來,就可以在 Terminal 終端機執行 Cypress 的 run
命令。
npm run e2e:run
當執行完端對端測試後,報表的結果會放在 reports
資料夾內,其內容為:
在上面組態設定中,我們也設定的報表顯示的資訊內容,其中的 charts: true
可以在報表顯示右邊的測試成功與失敗的比率圖;而 embeddedScreenshots: true
則是在報表中可以顯示 Cypress 的螢幕擷圖的圖片。
例如,我們在輸入正確帳號密碼的測試案例的最後,呼叫 cy.screenshot()
方法,Cypress 就會在執行完成擷圖螢幕,並儲存在 screenshots
資料夾內。
it('當輸入正確帳號密碼, 應登入成功', () => {
cy.fixture('users/login-success').then(({ id, password }) => {
cy.inputIdAndPassword(id, password);
cy.login().should('not.be.disabled');
cy.snackBarShouldBe('登入成功');
cy.screenshot();
});
});
這樣子,在測試報表中,就可以看到如下面的結果:
今天說明了 cypress-mochawesome-reporter
報表套件的安裝與設定,完整的測試程式可以參考 GitHub。資訊系統的開發主要由主要使用者或 PM 提出需求,接著再由工程人員開發與測試,最後上線至正式環境給相關使用者使用。然後,先前撰寫的測試程式較偏向工程人員,無法做法使用者、PM 與工程人員之間溝通用的工具。接下來,會說如何利用行為驅動開發 (Behavior-driven development, BDD) 工具 - Cucumber 來撰寫測試規格。