最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Cypress簡易入門教程

2023-02-22 09:36 作者:碼同學(xué)軟件測(cè)試  | 我要投稿

每天進(jìn)步一點(diǎn)點(diǎn),關(guān)注我們哦,每天分享測(cè)試技術(shù)文章

本文章出自【碼同學(xué)軟件測(cè)試】

碼同學(xué)公眾號(hào):自動(dòng)化軟件測(cè)試,領(lǐng)取資料可加:magetest

碼同學(xué)抖音號(hào):小碼哥聊軟件測(cè)試


01Windows下安裝


方法一

① 安裝node.js(https://nodejs.org/en/download/),根據(jù)版本選擇32位或64位。

② 確認(rèn)ndejs?和?npm是否安裝上:

C:\Users\xiang>node -v

v12.18.0

C:\Users\xiang>npm -v

6.14.

③ 生成package.json(假設(shè)準(zhǔn)備安裝在c:\Cypress>)

C:\Users\xiang>cd c:\Cypress

C:\Cypress>npm init

④ 安裝Cypress

C:\Cypress>npm install cypress --save-dev

方法二

① 安裝yarn (https://yarnpkg.com/en/docs/install#windows-stable)

② 確認(rèn)yarn是否安裝上

C:\Users\xiang>yarn -v

1.22.4

③ 安裝Cypress

C:\Users\xiang>cd c:\Cypress

C:\Cypress>yarn add cypress --dev

02運(yùn)行

方法一

C:\Cypress\node_modules\.bin>cypress open

方法二

C:\Cypress>yarn run cypress open

方法三(我經(jīng)常用的方法)

配置C:\Cypress\package.json

{

? "license": "ISC",

? "scripts": {

? ? "cypress:open": "cypress open",

? ? "cypress:run": "cypress run"

? },

? "devDependencies": {

? ? "cypress": "^4.8.0"

? }

}

打開運(yùn)行控制器

C:\Cypress>yarn run cypress open

運(yùn)行默認(rèn)路徑下的所有測(cè)試代碼

C:\Cypress>yarn run cypress run

默認(rèn)路徑為C:\Cypress\cypress\integration,可以通過

{

? …

"integrationFolder": "cypress/integration/demo",

}

改變默認(rèn)路徑,上述代碼中默認(rèn)路徑改為

C:\Cypress\cypress\integration\demo

03測(cè)試框架&代碼案例


  • before():

    相當(dāng)于unittest中的def setUp(cls)方法或者Junit的@Before方法標(biāo)簽;

  • after():

    相當(dāng)于unittest中的?def teardown(cls)?方法或者Junit的 @Before方法標(biāo)簽;

  • beforeEach()?:

    相當(dāng)于unittest中的def setUpClass(cls)?方法或者Junit的@BeforeClass方法標(biāo)簽;

  • afterEach()?:

    相當(dāng)于unittest中的def tearDownClass(cls)?方法或者Junit的@AfterClass方法標(biāo)簽。


GUI測(cè)試代碼案例

1、第一個(gè)測(cè)試代碼

測(cè)試電子商務(wù)系統(tǒng)登錄程序

describe('login',function(){

? const username = 'cindy'

? const password = '123456'

? context('測(cè)試電子商務(wù)網(wǎng)站',function(){

? ? it('登錄成功,調(diào)到商品列表頁面',function(){

? ? ? cy.visit('http://127.0.0.1:8000')

? ? ? cy.get('input[name=username]').type(username)

? ? ? cy.get('input[name=password]').type(password)

? ? ? cy.get('form').submit()

? ? ? //斷言

? ? ? cy.url().should('include','/goods_view')

? ? ? cy.get('title').should('contain','電子商務(wù)系統(tǒng)')

? ? ?})??

? ? })

})

2、元素查找 - get

<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">

根據(jù)元素 id?查找

cy.get('#kw')

根據(jù)元素名稱查找

cy.get('input[name="wd"]')

根據(jù)元素的類名查找

cy.get('.s_ipt')

根據(jù)CSS selector查找、

cy.get('input[maxlength ="100"]')

3、元素查找 – contains

根據(jù)元素文本查找

cy.contains('value')??

根據(jù)元素屬性及其文本查找

cy.get('div[name="ele-name"]').contains('value')

使用正則匹配元素文本以查找

cy.get('.class-name').contains(/[0-9]*/)

4、操作

type(String)、輸入,比如

cy.get('#kw'). type('Testing')

click()、點(diǎn)擊,比如

cy.get('.btn'). click ()

clear()、清空input或textarea的內(nèi)容,比如

cy.get('.ant-input').clear()

submit()、提交表單,比如

cy.get('.ant-form').submit()

dblclick()、元素雙擊,比如

cy.get('.ant-btn').dblclick()

rightclick()、元素右擊,比如

cy.get('.ant-btn').rightclick()

select(String)、對(duì)元素選擇,比如

cy.get('.ant-select').select('apples')

check()、勾選checkbox,比如

cy.get('.ant-checkbox').check()

Uncheck、反選 checkbox,比如

cy.get('.ant-checkbox').uncheck()

scrollIntoView()、如果某個(gè)元素不在當(dāng)前可視范圍,可以滑動(dòng)至可視范圍,比如

cy.get('#id').scrollIntoView()

scrollTo(String)、指定位置滑動(dòng),比如

cy.scrollTo('bottom')、cy.get('#id').scrollTo(250, 250)

5、鼠標(biāo)操作

免費(fèi)領(lǐng)取碼同學(xué)軟件測(cè)試課程筆記+超多學(xué)習(xí)資料+完整視頻+面試題,可加微信:magetest

鼠標(biāo)懸停事件:

cy.get('button').trigger('mouseover')

鼠標(biāo)按下:

cy.get('button').trigger('mousedown')

鼠標(biāo)抬起:

cy.get('button').trigger('mouseleave')

cy.get('button').trigger('mouseup')

鼠標(biāo)長按事件:

cy.get('button').trigger('mousedown')

cy.wait(1000)

cy.get('button').trigger('mouseleave')

鼠標(biāo)拖拽事件

cy.get('[data-cy=draggable]')

? .trigger('mousedown', { which: 1, pageX: 600, pageY: 100 })

? .trigger('mousemove', { which: 1, pageX: 600, pageY: 600 })

? .trigger('mouseup')

describe('baidu',function(){

? context('測(cè)試百度網(wǎng)站',function(){

? ? it('查詢成功',function(){

? ? ? cy.visit('https://www.baidu.com')

? ? ? cy.get('input[name=wd]').type("軟件測(cè)試")

? ? ? cy.get('#su').click()

? ? ? cy.get('title').should('contain','百度搜索')

? ? ?})?

? ? it('進(jìn)入高級(jí)查詢成功',function(){

? ? ? cy.get('a[name=tj_settingicon]').trigger('mouseover')

? ? ? cy.get('.bdpfmenu').should('exist')

? ? ?})??

? })

})

6、斷言

針對(duì)長度的斷言

cy.get('li.selected').should('have.length',3)

針對(duì)類的斷言

cy.get('from').fijd('input').should('not.have.class','disabled')

針對(duì)值斷言

cy.get('textarea').should('have.value','3testing')

針對(duì)文本內(nèi)容的斷言

cy.get('a').parent('span.help').should('contain','click me')

針對(duì)元素可見與否的斷言

cy.get('button').should('be.visible')

針對(duì)元素存在與否的斷言

cy.get('#loading').should('not.exist')

針對(duì)元素狀態(tài)的State的斷言

cy.get(':radio').should('be.checked')

針對(duì)CSS的斷言

cy.get('.completed').should('have.css','text-decoration','line-through')

7、跨iframe操作

describe('login',function(){

? context('啄木鳥',function(){

? ? it('點(diǎn)擊我的介紹成功',function(){

? ? ? cy.visit('http://www.3testing.com')

? ? ? cy.get('#head',{timeout: 2000})

? ? ? ? ? ? .then($iframe => {

? ? ? ? ? ? ? ? cy.wrap($iframe.contents().find("#introduce"));

? ? ? ? ? ? })

? ? ? ? ? ? .then($btn => {

? ? ? ? ? ? ? ? cy.wrap($btn).click()

? ? ? ? ? ? });

? ? ? //斷言

? ? ? cy.url().should('include','introduce.html')

? ? ? cy.get('title').should('contain','啄木鳥')

? ? ?})??

? })

})

8、多窗口操作

Cypress不支持多窗口操作。


04API測(cè)試


1、普通API測(cè)試

describe('login',function(){

? const username = 'cindy'

? const password = '123456'

? const producturl="http://127.0.0.1:8000/login_action/"

? cy.request({

? ? ? ? method: 'POST',

? ? ? ? url: producturl,

? ? ? ? body: {

? ? ? ? ? username: username

? ? ? ? ? password: password

}

? ? ? })

? })

2、CSRF token API測(cè)試

describe('login',function(){

? const username = 'cindy'

? const password = '123456'

? const producturl="http://127.0.0.1:8000/login_action/"

? ? Cypress.Commands.add('loginByCSRF', (csrfToken) => {

? ? cy.request({

? ? ? ? method: 'POST',

? ? ? ? url: producturl,

? ? ? ? failOnStatusCode: false, // 不要失敗,這樣我們才能斷言

? ? ? ? form: true, // 我們正在提交一份常規(guī)表格

? ? ? ? body: {

? ? ? ? ? username,

? ? ? ? ? password,

? ? ? ? ? csrfmiddlewaretoken: csrfToken // 將此作為主體的一部分插入

? ? ? ? }

? ? ? })

? })

? // csrf在返回的html中,我測(cè)試的Django產(chǎn)品的CSRF token用這種方法

? it('策略#1:從HTML解析令牌', function(){

? ? // 如果我們不能改變我們的服務(wù)器代碼以使解析CSRF令牌變得更容易,

? ? // 我們可以簡單地使用cy.request來獲取登錄頁面,然后解析HTML內(nèi)容

? ? // 以找到嵌入在頁面中的CSRF令牌

? ? cy.request(producturl)

? ? ? .its('body')

? ? ? .then((body) => {

? ? ? ? //我們可以用Cypress.$解析字符串主體,從而使我們能夠輕松地查詢到它

? ? cy.log(body)

? ? ? ? const $html = Cypress.$(body)

? ? ? ? const csrf? = $html.find("input[name=csrfmiddlewaretoken]").val()

? ? cy.loginByCSRF(csrf)

? ? ? ? ? .then((resp) => {

? ? ? ? ? ? expect(resp.status).to.eq(200)

? ? ? expect(resp.body).to.contain("Company 2017")

? ? ? ? ? })

? ? ? })

? ? })

? })

/*



? // 如果csrf在響應(yīng)頭中

? it('策略#2:從響應(yīng)頭解析令牌', function(){

? ? // 如果我們將csrf令牌嵌入到響應(yīng)頭中,那么我們就可以更容易地提取它,

? ? // 而不必深究最終的HTML

? ? cy.request(producturl)

? ? ? .its('headers')

? ? ? .then((headers) => {

? ? ? ? const csrf = headers['csrftoken']

? ? cy.log(csrf)

? ? ? ? cy.loginByCSRF(csrf)

? ? ? ? ? .then((resp) => {

? ? ? ? ? ? expect(resp.status).to.eq(200)

? ? ? ? ? ? expect(resp.body).to.contain("Company 2017")

? ? ? ? ? })

? ? ? })

? ? })

? ?}) */

免費(fèi)領(lǐng)取碼同學(xué)軟件測(cè)試課程筆記+超多學(xué)習(xí)資料+學(xué)習(xí)完整視頻 ? 可加:magetest/關(guān)注碼同學(xué)公眾號(hào):自動(dòng)化軟件測(cè)試

本文著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處。


Cypress簡易入門教程的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
小金县| 怀安县| 合作市| 汉沽区| 运城市| 正镶白旗| 虎林市| 永川市| 通江县| 南充市| 夏河县| 杭锦旗| 沙河市| 奎屯市| 鄂托克旗| 若羌县| SHOW| 洪洞县| 太保市| 内丘县| 台江县| 苍山县| 滁州市| 宣城市| 徐州市| 满洲里市| 保康县| 东港市| 华坪县| 乳山市| 昭苏县| 张家口市| 吉安县| 安义县| 乌兰浩特市| 万宁市| 渭源县| 增城市| 青铜峡市| 海南省| 改则县|