賽普拉斯燈具:您應該知道的 5 個重要事實

測試自動化的最佳實踐之一是將測試數據與測試文件分離。 這方面是設計測試框架時的主要要求之一。 賽普拉斯幫助​​我們分離測試數據的能力 賽程. 在本主題中,我們將討論 帶有動手實施和實時示例的賽普拉斯夾具

目錄

Cypress 中的夾具是什麼?

可以使用賽普拉斯夾具 來自外部文件的源數據. Cypress 中的裝置可幫助您 讀取或寫入文件. 測試自動化中流行的框架之一是數據驅動框架,我們將數據與測試文件分開。 我們通常將數據保存在 Excel 等外部文件中,並使用外部庫讀取它們。 賽普拉斯為我們提供了從文件讀取數據的相同功能。

Cypress 為我們提供了一個名為 固定裝置,我們可以在其中創建 JSON 文件並從中讀取數據,我們可以在多個測試文件中讀取這些文件。 我們將數據存儲為 核心價值 配對並訪問它們。

如何在測試中使用 Cypress Fixtures?

我們可以通過下面給出的語法訪問賽普拉斯裝置

cy.fixture(filePath)
cy.fixture(filePath, encoding)
cy.fixture(filePath, options)
cy.fixture(filePath, encoding, options)

我們將了解可以在fixtures中傳遞的參數

文件路徑 – 存儲測試數據的路徑

編碼 – 使用文件時使用的編碼。 一些編碼是 ascii、base64、hex、binary 等

方案 – 在選項中,我們可以通過 超時 回复。 就是指定超時解決 cy.夾具()

如何從 Cypress 中的 Fixtures 讀取數據?

我們將在一個文件中定義測試數據 夾具 文件夾。 我們將使用賽普拉斯裝置從測試腳本中的 JSON 文件訪問測試數據。

現在,讓我們了解一個 賽普拉斯的例子 固定裝置。 我們將使用用戶名和密碼登錄 url。 因此,讓我們將用戶名和密碼值存儲在一個文件中。

讓我們創建一個名為 憑據.json 在夾具文件夾下。 我們將以 JSON 格式定義變量。

{
    "username" : "admin@yourstore.com",
    "password" : "admin",
    "adminUrl" : "https://admin-demo.nopcommerce.com/admin/"
}
夾具文件示例

訪問從夾具文件到測試文件的值

由於我們已經在 憑據.json 文件,我們將看到如何使用賽普拉斯裝置在我們的測試文件中訪問它們。

我們將使用 this 前鉤子中的關鍵字

describe("Cypress Fixtures Example", function () { before(function () { cy.fixture('credentials').then(function (testdata) { this.testdata = testdata }) }) })

在上面的示例中,我們通過以下方式訪問我們的 JSON 文件 cy.fixture('憑據'). 由於我們的 JSON 文件名是 憑據.json, 我們是 在 cy.fixture() 中傳遞文件名. 現在我們使用別名概念並將我們的數據定義為 測試數據. 隨著變量 測試數據,我們可以在我們的測試文件中使用用戶名和密碼的值

describe("Cypress Fixtures Example", function () { before(function () { cy.fixture('credentials').then(function (testdata) { this.testdata = testdata }) }) it("使用有效憑據登錄", function () { cy.visit(this.testdata.adminUrl) cy.get('[id=Email]').clear() cy.get('[id=Email]').type(this.testdata .username) cy.get('[id=Password]').clear() cy.get('[id=Password]').type(this.testdata.password) cy.get('[type=submit] ').click(); cy.url().should('be.equal', this.testdata.adminUrl) }); });

正如你在上面看到的,在 .type() 我們將來自我們的credentials.json 文件的值作為 這個.testdata.用戶名. 同樣,對於密碼,我們使用訪問值 這個.testdata.password. 對於 url,我們使用與用戶名和密碼相同的方式。

當我們運行測試用例時,您可以看到在儀表板中打印的值。 這樣,我們已經使用 Cypress Fixtures 執行了我們的測試用例

夾具測試結果

賽普拉斯多夾具

在本節中,我們將了解如何將賽普拉斯夾具與多個夾具文件一起使用。

如果我們想為同一個測試文件使用不同的夾具數據,例如,我們需要為登錄頁面驗證兩組憑據,我們如何訪問這些文件?

一種方法是寫多個 it 塊將一次又一次地複制相同的代碼。 另一種方式,我們可以使用 賽普拉斯夾具訪問不同的測試 規格文件中的數據。 讓我們看看如何使用賽普拉斯夾具實現這一目標

我們已經有一個名為的夾具文件 憑據.json.

{
    "username" : "admin@yourstore.com",
    "password" : "admin",
    "adminUrl" : "https://admin-demo.nopcommerce.com/admin/"
}

現在讓我們創建另一個名為的夾具文件 用戶數據.json 我們將使用不同的無效用戶名和密碼。

{
    "username" : "user@yourstore.com",
    "password" : "user",
    "adminUrl" : "https://admin-demo.nopcommerce.com/admin/"
}

現在讓我們看看如何訪問測試文件中的兩個不同數據。

我們將使用兩個不同的夾具文件的條件重構相同的測試文件。

const testValueFixtures = [ { "name": "credentials", "context": "1" }, { "name": "userData", "context": "2" } ] describe('Automation Test Suite - Fixtures', function () { // 循環通過兩個夾具 testValueFixtures.forEach((fixtureData) => { describe(fixtureData.context, () => { // 從夾具文件中訪問測試數據 before(function () { cy. fixture(fixtureData.name).then(function (testData) { this.testData = testData; }) }) it("登錄", function () { cy.visit('https://admin-demo.nopcommerce.com /admin/') cy.get('[id=Email]').clear() cy.get('[id=Email]').type(this.testData.username) cy.get('[id=密碼]').clear() cy.get('[id=Password]').type(this.testData.password) cy.get('[type=submit]').click(); cy.url( ).should('be.equal', this.testData.adminUrl) }) }) }) })
訪問兩個夾具數據示例

最初,我們正在創建一個名為 測試值夾具 作為一個 排列 我們正在創建兩個夾具文件的上下文。 在第一個上下文中,我們將名稱傳遞為 '證書' 和第二個為 '用戶數據' ,因為它們代表我們定義了值的 JSON 文件名。

其次,我們循環遍歷描述塊中的兩個夾具變量。 正如我們之前討論的,我們正在使用 before 塊訪問數據 .this()

其餘的代碼是相同的,我們在其中傳遞數據 cy.get()

當我們執行我們的測試時,它將在兩組中運行,其中第一個案例通過有效憑據而第二個案例由於無效憑據而失敗

使用第一個夾具文件的夾具

正如您在上面的快照中看到的,第一個測試用例已經通過,並且它已經輸入了第一個夾具文件中的值 憑據.json

使用第二個夾具文件的夾具示例

正如你在上面的截圖中看到的,測試失敗了,傳遞的值來自第二個夾具文件 用戶數據.json

您還可以查看如何使用頁面對像模型編寫 Cypress 裝置 這裡

回到頁首