自動化測試Cypress(三)


 前段時間完成一塊測試,記錄下寫cypress的記錄

  1,cy.wait()   等待

        (1)1000等於1秒,此指令我用於兩個場景比較多,第一個場景只用於等待時間,比如以下這種場景,當你點擊 Hover me 的時候,下面的二級菜單才會顯示出來,但是如果二級菜單不是寫固定的,而是接口式的。這樣點擊 Hover me 的時候,如果數據沒有及時顯示出來,這樣測試就會報錯,告訴你沒有找到二級菜單的元素。這個時候可以用cy.wait() 來等待一下,等待幾秒鍾之后,再去找二級菜單的元素。

 

 

 

 

 

   (2) 第二個場景經常用於調用接口。和cy.server()和cy.route() 一起使用的時候。比如如下這種場景

   

 

 

 

 

      一般項目里面就有這種場景,點擊一個按鈕的時候,出來一個警告信息,比如提交成功或者提交失敗的警示信息。 失敗和成功是兩個接口,你需要調用接口的時候,把成功的提示信息和失敗的提示信息在測試里面的顯示出來的時候,就需要用到cy.server() 和cy.route() 和cy.wait() 的結合。

    cy.server():啟動服務器以開始將響應路由到cy.route()網絡並更改網絡請求的行為。

    cy.route(); 使用cy.route管理網絡請求。

    如果你不寫cy.server() 后面的cy.route() 是沒有效果的。在cy.route() 里面設置好請求頭和接口的地址,通過as()重新命令一個別名。

   后續使用cy.wait()可以等待這個請求。

cy.server({
  headers: {
    'x-token': 'abc-123-foo-bar'
  }
})

cy.route('GET', '/users/1', { id: 1, name: 'Amanda' }).as('getUser')
cy.visit('/users/1/profile')
cy.wait('@getUser').its('responseHeaders')
  .should('have.property', 'x-token', 'abc-123-foo-bar') // true

 

 

 2 關於cy.route()   請求

    可以在你寫的測試用例的文件夾下建一個一個routes.js 文件,里面可以專門用來寫你的route的配置。

 

 

 

 

 

 

 

 

 

 

 

 

 圖一為Cypress.env() 需要定義一個環境變量,再定義一個判斷的值,用 cosnt 定義一個Response ,里面 可以根據code,title和message來進行定義和判斷。我定義的code為0和其他,依此來判斷是請求成功和失敗的參數。

圖二為頂一個route。.as() 是給此路由一個別名,我的.as()的別名和const的定義名字是一樣的,cy.route 里面 

   method 為請求的方式,url為請求的地址,reponse 后面是圖一你定義的Response.SUCCES。來確定此路由是成功的還是失敗的。

圖三是你在你的測試js文件里面引入,當前文件的上面要用 import {}from './routes' 進行引入。

必須要用cy.server 作為開頭,后面cy.visitWithBeforeLoad() 后面進入的一個路徑,個人理解是有些接口我們需要先調用,所有先進入這個路徑,把相關的接口調用出出來,有的需要有的不需要,如果不需要,cy.server()后面的就是你route的別名,這樣就完成了。cy.route()沒有完全理解,先記錄一下,后續徹底理解了,會單獨再寫一篇。

 

 

二 。語法規范

       (1)使用cy.wait() 的時候,在你的文件最開頭要開一段話    

             /* eslint-disable cypress/no-unnecessary-waiting */

       如果不加的話,那么你提交代碼的時候,git就會報錯,而且必須是 /* */  不能是//  

      (2)cy.get() 獲取標簽的時候,不能使用UI的類名,因為會獲取到多個,所以盡量不要使用UI的類名,可以使用cy.get(div[class = ""]) 類似 於這種減少獲取多個的可能性,保證唯一性。另外有很多class名字是那種隨時的,就是那種每次網頁一刷新,class名字就是變化的,這種class名字大多就有自己的特點,例如  index____開頭  后面也是____  中間的名字不會換,那這樣你可以用 cy.get('div[class *= "" ]')  來獲取。

     (3)寫的測試用例的文件夾名字和測試里面每一塊語義化,需要讓別人知道你的這個文件夾用來測試什么的,每一塊是用來干什么。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM