從0開始學習自動化測試框架cypress(五)總結
阿新 • • 發佈:2021-02-10
技術標籤:jshtmlJava學習自動化測試軟體測試單元測試整合測試測試工具
一.下載環境: cypress.zip解壓執行examples或npm install cypress
二.簡單使用
1.常用資料夾
fixtures: 儲存json檔案
integration: 儲存編寫的測試用例,一般使用.spec.js為結尾
support: 支援新增cy內建函式
Cypress.Commands.add("funName", () => { ... })
呼叫: cy.funName()
2.常用的命令
cy.request : ajax請求 語法 cy.request(url) cy.request(url, body) cy.request(method, url) cy.request(method, url, body) cy.request(options) 例子 cy.request('login') cy.request({ method: 'POST', url: 'login', // baseUrl已經設定 form: true, // 預設設定headers=application/x-www-form-urlencoded body: { username: 'user1', password: 'pwd123' }, encoding: 'base64' // 可設定base64提交 }).should((response)=>{ expect(response).property('status').to.equal(200) // 後臺自定義返回 // var body = JSON.parse(response.body) // expect(body).property('code').to.equal(200) })
cy.visit : 訪問頁面
語法
cy.visit(url)
cy.visit(url, options)
cy.visit(options)
例子
visit('https://www.baidu.com')
cy.get : 獲取頁面元素 語法 cy.get(selector) cy.get(alias) cy.get(selector, options) cy.get(alias, options) 例子 cy.get('.list > li') // 根據別名獲取 .as(aliasName): 設定別名 cy.get('ul#todos').as('todos') cy.get('@todos')
.type : 輸入文字或按鍵
語法
.type(text)
.type(text, options)
例子
cy.get('input[name=username]').type('test')
.click() : 單擊
語法
.click()
.click(options)
.click(position)
.click(position, options)
.click(x, y)
.click(x, y, options)
例子
cy.get('input[type=submit]').click()
.dblclick() : 雙擊 語法 .dblclick() .dblclick(options) .dblclick(position) .dblclick(position, options) .dblclick(x, y) .dblclick(x, y, options) 例子 cy.get('input[type=submit]').dblclick()
.contains : 是否包含文字
語法
.contains(content)
.contains(content, options)
.contains(selector, content)
.contains(selector, content, options)
// 或者
cy.contains(content)
cy.contains(content, options)
cy.contains(selector, content)
cy.contains(selector, content, options)
例子
cy.get('form').contains('登陸')
cy.get('form').contains('div', '登陸')
cy.contains('登陸').click()
cy.contains('form', '登陸') // document的form是否包含文字
.wait : 等待
語法
cy.wait(time)
cy.wait(alias)
cy.wait(aliases)
cy.wait(time, options)
cy.wait(alias, options)
cy.wait(aliases, options)
例子
cy.wait(500)
cy.wait('@getProfile')
.skip : 忽略測試用例
例子
it.skip('',()=>{...})
.only : 只運行當前測試用例
例子
it.only('',()=>{...})
.debug : 除錯
語法
.debug()
.debug(options)
// 或者
cy.debug()
cy.debug(options)
例子
cy.get('a').debug().should('have.attr', 'href')
.pause : 暫停,相當於除錯
語法
.pause()
.pause(options)
// 或者
cy.pause()
cy.pause(options)
例子
cy.pause()
3.配置檔案cypress.json
{
"baseUrl": "http://localhost:8080/nocode",
"env": {
"login_url": "login.jsp"
}
}
* baseUrl: 配置字首路徑,如果沒有http開頭,則自動尋找baseUrl配置的字首自動加上
cy.visit('login.jsp')
cy.request({
'url': 'userList'
})
* env: 環境變數
Cypress.env('login_url')
4.聯合測試
*有登陸的地方,建議將登陸放在cy.before裡面執行
*每個用例都要登陸時,建議將登陸放在cy.beforeEach裡面執行
*相應的鉤子函式有after和afterEach,酌情使用即可
*****如果上下文需要儲存變數,需要做特殊處理,因為每個測試用例都會清除localStorage,我們要自己儲存處理, 程式碼如下
// 定義一個儲存變數,來儲存localStorage
let LOCAL_STORAGE_MEMORY = {};
Cypress.Commands.add("saveLocalStorage", () => {
Object.keys(localStorage).forEach(key => {
LOCAL_STORAGE_MEMORY[key] = localStorage[key];
});
});
Cypress.Commands.add("restoreLocalStorage", () => {
Object.keys(LOCAL_STORAGE_MEMORY).forEach(key => {
localStorage.setItem(key, LOCAL_STORAGE_MEMORY[key]);
});
});
在每個測試用例開始前回復localStorage
在每個測試用例結束後儲存localStorage
beforeEach(() => {
cy.restoreLocalStorage();
});
afterEach(() => {
cy.saveLocalStorage();
});
(本篇就到這)
獲取最新資訊,歡迎關注公眾號: 軟體開發與技術設計(SoftwareDesigner)