postmethod 设置request body utf-8_Cypress系列(62) request() 命令详解
點(diǎn)擊上方藍(lán)字
給一個(gè)關(guān)注吧
作用
發(fā)起一個(gè) HTTP 請(qǐng)求
語(yǔ)法格式
cy.request(url)cy.request(url, body)cy.request(method, url)cy.request(method, url, body)cy.request(options)參數(shù)說(shuō)明
url
請(qǐng)求 URL
?cy.request()?在?cy.visit()?后面
// 先訪問(wèn)某個(gè) urlcy.visit('http://localhost:8080/app')// 請(qǐng)求 url 是 http://localhost:8080/users/1.jsoncy.request('users/1.json')設(shè)置了 baseUrl,且 cy.request() 在 cy.visit() 前面
cypress.json
// cypress.json{ "baseUrl": "http://localhost:1234"}測(cè)試代碼
// url 是 http://localhost:1234/seed/admincy.request('seed/admin')備注
如果 cypress 無(wú)法確定 host,它將拋出錯(cuò)誤
body
請(qǐng)求正文,不同接口內(nèi)容,body 會(huì)有不同的形式
Cypress 設(shè)置了 Accepts 請(qǐng)求頭,并通過(guò) encoding 選項(xiàng)序列化響應(yīng)體
method
請(qǐng)求方法,沒(méi)啥好說(shuō)的,默認(rèn)是 GET
options
GET 請(qǐng)求的栗子
context('get請(qǐng)求', function () { it('默認(rèn)訪問(wèn)方式', function () { cy.request('http://www.helloqa.com') }); it('使用 options', function () { cy.request({ method: 'get', url: 'http://www.helloqa.com' }) }); // .request() 常常和別名 .as() 一起使用,用來(lái)進(jìn)行接口返回值的斷言 it('真實(shí)測(cè)試', function () { cy.request({ method: 'get', url: 'https://www.helloqa.com' }).as('comments') cy.get('@comments') .then((response) => { expect(response.status).to.be.eq(200) }) });})測(cè)試結(jié)果
.request() 返回值
包含以下屬性
status
body
headers
duration
.request() 別名后通過(guò) .get() 的返回值
?包含以下屬性
status
body
headers
duration
statusText
allRequestResponses
requestHeaders
redirects
isOkStatusCode
使用 .request() 代替 .visit() 的栗子
官方有那么一句話
有時(shí)候,cy.request() 測(cè)試頁(yè)面的內(nèi)容要比 cy.visit() 更快,然后等待整個(gè)頁(yè)面加載所有資源
通過(guò) .visit() 測(cè)試需要登錄才能訪問(wèn)的頁(yè)面
const username = 'jane.lane'const password = 'password123'it('使用 visit', function () { // 相當(dāng)于 UI 界面操作 cy.visit('') // 登錄操作 cy.get("input[name=username]").type(username) cy.get("input[name=password]").type(password) cy.get("form").submit() // 會(huì)跳轉(zhuǎn)至需要登錄才能訪問(wèn)的頁(yè)面????cy.get("h1").should("contain",?"jane.lane")?});測(cè)試結(jié)果
通過(guò) .request() 測(cè)試需要登錄才能訪問(wèn)的頁(yè)面
it('request代替visit', function () { // 通過(guò)接口層面去訪問(wèn)頁(yè)面 // 請(qǐng)求頁(yè)面 cy.request('/login') .its('body') .should('include', 'In this recipe we:
') // 登錄請(qǐng)求 cy.request({ method: 'post', url: '/login', // 表單格式的請(qǐng)求 form: true, body: { username: 'jane.lane', password: 'password123' } }) // 訪問(wèn)需要登錄之后才能訪問(wèn)的頁(yè)面 cy.request('/dashboard') .its('body') .should('include', 'jane.lane')});測(cè)試結(jié)果
官方重點(diǎn)
通常,一旦對(duì)登錄進(jìn)行了適當(dāng)?shù)膃2e測(cè)試,就沒(méi)有理由繼續(xù)使用?cy.visit()?登錄并等待整個(gè)頁(yè)面加載所有關(guān)聯(lián)的資源,然后再運(yùn)行其他命令,這樣做可能會(huì)減慢我們整個(gè)測(cè)試套件的速度
輪詢發(fā)出請(qǐng)求的栗子
背景
當(dāng)輪詢服務(wù)器以獲取可能需要一段時(shí)間才能完成的響應(yīng)時(shí),此功能很有用
如何做:創(chuàng)建一個(gè)遞歸函數(shù)
測(cè)試代碼
function req() { cy .request('/') .then((resp) => { if (resp.status === 200) // 請(qǐng)求成功則退出輪詢 return // 遞歸 req() })}context('輪詢r(jià)equest', function () { it('默認(rèn)訪問(wèn)方式', function () { cy.visit('http://localhost:7077/') // 輪詢前的操作 cy.get("form").click() // 輪詢請(qǐng)求 .then(() => { req() }) });})關(guān)于 .request() 的注意事項(xiàng)
Debugging
通過(guò)?.request()?發(fā)出的請(qǐng)求不會(huì)出現(xiàn)在開發(fā)者工具(F12)網(wǎng)絡(luò)一欄中
Cypress?實(shí)際上并未從瀏覽器發(fā)出XHR請(qǐng)求
實(shí)際上是從 Cypress Test Runner(在Node中)發(fā)出HTTP請(qǐng)求
因此,不會(huì)在開發(fā)人員工具中看到該請(qǐng)求
Cookie
通過(guò)?.request()??發(fā)出的請(qǐng)求,Cypress 會(huì)自動(dòng)發(fā)送和接收 Cookie
在發(fā)送 HTTP 請(qǐng)求之前,如果請(qǐng)求來(lái)自瀏覽器,Cypress 會(huì)自動(dòng)附加本應(yīng)附加的 Cookie
此外,如果響應(yīng)具有 Set-Cookie 標(biāo)頭,則這些標(biāo)頭將自動(dòng)在瀏覽器 Cookie 上重新設(shè)置
換句話說(shuō),cy.request() 透明地執(zhí)行所有基礎(chǔ)功能,就好像它來(lái)自瀏覽器一樣
END
公眾號(hào)ID:xiaopoloyy小菠蘿Wechat:FJYpolo小菠蘿測(cè)試交流扣扣群:870155189--------------------------不好好學(xué)習(xí)|天天不進(jìn)步
Cypress系列(56)- 改造 PageObject 模式
Cypress系列(57)- 使用 Cypress.Commands 完成 Custom Commands 自定義命令
Cypress系列(58)- 數(shù)據(jù)驅(qū)動(dòng)策略
Cypress系列(59)- 測(cè)試運(yùn)行失敗自動(dòng)重試
Cypress系列(60)- 測(cè)試運(yùn)行最佳實(shí)踐
Cypress系列(61)- 環(huán)境變量設(shè)置指南
總結(jié)
以上是生活随笔為你收集整理的postmethod 设置request body utf-8_Cypress系列(62) request() 命令详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: el表达式动态取值中括号内两点_中考热点
- 下一篇: stcisp一直检测单片机_三种方法对比