2022-03-06

十八單元 自動化持續(xù)繼承

1.概念

1.持續(xù)集成:持續(xù)的將分支集成到主干

2.持續(xù)交付:持續(xù)將此版本提交給質量團隊

3.持續(xù)部署:持續(xù)將代碼部署到生產環(huán)境

2.Jenkins介紹

1.概念:Jenkins 是一個開源軟件項目拥娄,是基于Java開發(fā)的一種可拓展持續(xù)集成工具够挂,主要用于持 續(xù)抡锈、自動 地構建 / 測試 / 集成軟件項目以及監(jiān)控一些定時執(zhí)行的任務

2.部署:配置java環(huán)境→安裝Tomcat→jenkins.war放在webapps下→啟動Tomcat→訪問:

(127.0.0.1)localhost:8080/jenkins

3.使用:創(chuàng)建條目 自動構建

3.搭建Jmeter+Jenkins+Ant持續(xù)化

第十九單元 web端自動化

1.什么是自動化

使用測試工具 或者其他手段對軟件進行測試

2.自動化測試好處

1.縮短測試周期? 2.避免人為出錯? 3.測試信息存儲? 4.輕易獲取覆蓋率? 5.實現自動或者定時執(zhí)行

3.使用自動化的前提條件

1)手動測試已經完成,后期再不影響進度的前提下逐漸實現自動化

2)項目周期長,重復性的工作都交給機器去實現

3)需求穩(wěn)定,項目變動不大

4)自動化測試腳本復雜度比較低

5)可重復利用

4.使用自動化測試的場景

1)頻繁的回歸測試

2)冒煙測試

3)傳統(tǒng)行業(yè)需求變化不大器紧,應用頻繁

4)性能測試

5.常用工具

QTP、Selenium、RFT

6.為什么要學習元素定位

1)計算機沒有智能到人的程度敦跌。

2)計算機不能像手動測試人員一樣通過眼看,手操作鼠標點擊,操作鍵盤輸入柠傍。

3)計算機通過一系列計數手段找到元素(按鈕麸俘、輸入框、模擬鍵盤等)

7.元素定位的工具或手段有哪些

css選擇器惧笛、xpath

8.環(huán)境搭建

1. 下載瀏覽器插件

2. 菜單 → 添加附件 → 設置圖標 → 從文件中添加附件

9.什么是xpath

XPath即為XML路徑語言从媚,它是一種用來(標準通用標記語言的子集)在 HTML\XML 文檔中查找信息的語言

10.什么是xml

XML 指可擴展標記語言(EXtensible Markup Language)

XML 是一種標記語言,很類似 HTML

XML 的設計宗旨是傳輸數據患整,而非顯示數據

11.xml和html 的區(qū)別

html是用來顯示數據拜效、xml是用來傳輸和存儲數據

12.獲取元素

①/:從根節(jié)點選取? #/html/head/meta[1]第一個;[last()]最后一個元素各谚;[last()-1]倒數第二個元素紧憾;? ? ? ? ? ? ? ? ? ? [position()<3] 前兩個元素

②//:從匹配選擇的當前節(jié)點選擇文檔中的節(jié)點 #//link

③.選取當前節(jié)點

④..選取當前節(jié)點的父節(jié)點

⑤@:選取屬性 #//meta[@name] 或者//meta[@name="referrer"]

⑥//meta[@*]:所有帶有屬性的meta元素

⑦//head/meta | //head/title:選取head元素的所有meta元素和title元素

⑧//meta | //title:選取文檔中的所有title和meta元素

13.css選擇器

13.1什么是css選擇器

CSS 中,選擇器是一種模式昌渤,用于選擇需要添加樣式的元素

13.2css選擇器語法

①.info: 選擇class=“info”的所有元素

②#name: 選擇id=“name”的所有元素

③* :選擇所有的元素

④元素1,元素2: 選擇元素1和元素2的所有元素

⑤元素1 元素2: 選擇元素1內部的所有元素2的元素

⑥元素1>元素2: 選擇父元素為元素1的元素的所有元素2的元素

⑦[target]: 選擇帶有target屬性的所有元素

⑧[target=blank]: 選擇target="blank"的所有元素

Web自動化測試進階

什么是框架框架(framework)是一個框子 -- 指其約束性赴穗,也是一個架子 -- 指其支撐性,是一個基本概念上的結構膀息,用于去解決或者處理復雜的問題般眉。

為什么使用框架1)自己從頭實現太復雜

? 2)使用框架能夠更專注于業(yè)務邏輯,加快開發(fā)速度

? 3)框架的使用能夠處理更多細節(jié)問題

? 4)使用人數多潜支,穩(wěn)定性甸赃,擴展性好

selenium工作原理

? 4.selenium對瀏覽器操作

1)庫的導入

from selenium import webdriver

2)創(chuàng)建瀏覽器對象

必須為大寫

driver = webdriver.Firefox()

driver = webdriver.Chrome()

3)瀏覽器尺寸相關操作

maximize_window() 最大化

get_window_size()? ? 獲取瀏覽器尺寸,打印查看

set_window_size()? ? 設置瀏覽器尺寸冗酿,400*400

4)瀏覽器位置相關操作

get_window_position() 獲取瀏覽器位置

set_window_position(x,y)? ? 設置瀏覽器位置

5)瀏覽器的關閉操作

close()關閉當前標簽/窗口

quit()關閉所有標簽/窗口

6)頁面請求操作

driver.get(url)請求某個url對應的響應

refresh()刷新頁面操作

back()回退到之前的頁面

forward()前進到之后的頁面

fromselenium import webdriver

import time

driver = webdriver.Chrome()#不可以找到埠对,必須導入對應的驅動器

driver=webdriver.Firefox()

url1="http://www.baidu.com"

url2="https://zhuanlan.zhihu.com/"

請求第一個接口

driver.get(url1)

time.sleep(3)

刷新

driver.refresh()

driver.get(url2)

回退

driver.back()time.sleep(3)

前進driver.forward()

time.sleep(3)

driver.close()

5.selenium獲取斷言信息1)什么是斷言

斷言是編程術語,表示為一些布爾表達式已烤,程序員相信在程序中的某個特定點該表達式值為真鸠窗,可以在任何時候啟用和禁用斷言驗證,因此可以在測試時啟用斷言而在部署時禁用斷言胯究。

2)獲取斷言信息的操作

current_url 獲取當前訪問頁面url

title 獲取當前瀏覽器標題

page_source 獲取網頁源碼

print(driver.current_url)

print(driver.title)

print(driver.page_source)

截圖:

get_screenshot_as_png() 保存圖片

data=driver.get_screenshot_as_png()

withopen("a.png","wb")asf:

f.write(data)

get_screenshot_as_file(file) 直接保存

driver.get_screenshot_as_file("b.png")

6.selenium八大元素定位from selenium import webdriver

driver=webdriver.Firefox()

url = "http://www.baidu.com"

driver.get(url)

第一種 id

ele = driver.find_element_by_id("kw")

ele.send_keys(12306) # 輸入數據

from selenium.webdriver.common.by import By

ele = driver.find_element(By.ID,"kw")# ele.send_keys(12306) # 輸入數據

第二種? 標簽名字

ele = driver.find_element_by_name("wd")

ele.send_keys(12306) # 輸入數據

第三種? class

ele = driver.find_element_by_class_name("s_ipt")

ele.send_keys(12306) # 輸入數據

第四種? Xpath

ele = driver.find_element_by_xpath("http://*[@id='kw']")

ele.send_keys(12306) # 輸入數據

第五種? css class

ele = driver.find_element_by_css_selector("#kw")

ele.send_keys(12306) # 輸入數據

第六種? text

ele = driver.find_element_by_link_text("地圖")

ele.click() # 輸入數據

第七種:類似于模糊匹配

ele = driver.find_element_by_partial_link_text("地")

ele.click()

第八種:標簽名定位稍计,必須得保證只有一個這種名字的標簽,使用下面這個搜索

url = "http://cn.bing.com/"

driver.get(url)# ele = driver.find_element_by_tag_name("input")

ele.send_keys(12306) # 輸入數據

7.元素的操作對元素的相關操作裕循,一般要先獲取到元素臣嚣,再調用相關方法

element = driver.find_element_by_xxx(value)

1)點擊和輸入

點擊操作---------->element.click()

清空/輸入操作:

element.clear()---------------------->清空輸入框

element.send_keys(data)-------->輸入數據

2)提交操作

element.submit()

8.多標簽之間的切換場景:有的時候點擊一個鏈接,新頁面并非由當前頁面跳轉過去剥哑,而是新開一個頁面打開硅则,這種情況下,計算機需要識別多標簽或窗口的情況株婴。

1)獲取所有窗口的句柄

handles = driver.window_handlers

調用該方法會得到一個列表怎虫,在selenium運行過程中的每一個窗口都有一個對應的值存放在里面暑认。

2)通過窗口的句柄進入的窗口

driver.switch_to_window(handles[n])

driver.switch_to.window(handles[n])

通過窗口句柄激活進入某一窗口

案例:

58同城租房信息:http://bj.58.com

使用句柄driver.get("http://bj.58.com")

print("點擊之前句柄:",driver.window_handles)

ele=driver.find_element_by_xpath(".//*[@id='fcNav']/em/a[1]")ele.click()

list_windowns=driver.window_handles

print("點擊之后句柄:",driver.window_handles)

driver.switch_to.window(list_windowns[1])

eleDaxing=driver.find_element_by_link_text("大興")

eleDaxing.click()

9.多表單

? ? el = driver.find_element_by_xxx(value)

? ? driver.switch_to.frame(el)/driver.switch_to_frame(el)

案例:

fromseleniumimportwebdriver

#打開游覽器

driver=webdriver.Firefox()

#登錄QQ

url="https://qzone.qq.com/"

driver.get(url)

#獲取元素

#定位表單元素

ele_bd=driver.find_element_by_id("login_frame")

driver.switch_to.frame(ele_bd)

ele=driver.find_element_by_xpath(".//*[@id='switcher_plogin']")

ele.click()

#輸入賬號

ele2=driver.find_element_by_id("u")

ele2.send_keys()

#輸入密碼

ele3=driver.find_element_by_id("p")

ele3.send_keys("")

ele4=driver.find_element_by_id("login_button")

ele4.click()

彈出框操作

# 進入到彈出框中

driver.switch_to.alert

#接收警告

accept()

#解散警告

dismiss()

#發(fā)送文本到警告框

send_keys(data)

用法:driver.switch_to.alert.accept()

下拉框

案例:

fromseleniumimportwebdriver

importtime

driver=webdriver.Firefox()

driver.get("http://www.baidu.com")

ele=driver.find_element_by_id("s-usersetting-top")

ele.click()

ele1=driver.find_element_by_xpath(".//*[@id='s-user-setting-menu']/div/a[2]")

ele1.click()

time.sleep(2)

ele2=driver.find_element_by_xpath(".//*[@id='yadv-setting-gpc']/div/div[1]/i[1]")

ele2.click()

list_ele=driver.find_elements_by_class_name("c-select-item")

print(list_ele)

list_ele[2].click()

# for list_i in list_ele:

# ? ? print(list_i.text)

# ? ? if list_i.text =="最近一周":

# ? ? ? ? list_i.click()

鼠標和鍵盤操作

鼠標

1.先導入動作鏈類:

fromselenium.webdriverimportActionChains

ActionChains(driver)

2.常用鼠標動作:

ActionChains(driver).context_click(ele).perform()點擊鼠標右鍵

ActionChains(driver).double_click(ele).perform()點擊鼠標左鍵

ActionChains(driver).move_to_element(el).perform()鼠標懸停

3.perform()對前面的方法執(zhí)行

#案例:

fromselenium.webdriverimportActionChains

fromseleniumimportwebdriver

importtime

driver=webdriver.Firefox()

driver.get("http://www.baidu.com")

ele=driver.find_element_by_xpath(".//*[@id='s-top-left']/div/a")

# ele.click()

ActionChains(driver).double_click(ele).perform()

鍵盤

1.導入

fromselenium.webdriver.common.keysimportKeys

2.常用鍵盤操作

send_keys(Keys.BACK_SPACE) ?? 刪除鍵(BackSpace)

send_keys(Keys.SPACE) ? ? ? ? 空格鍵(Space)

send_keys(Keys.TAB) ? ? ? ? ? 制表鍵(Tab)

send_keys(Keys.ESCAPE) ? ? ?? 回退鍵(Esc)

send_keys(Keys.ENTER) ? ? ? ? 回車鍵(Enter)

send_keys(Keys.CONTROL,‘a’) ? 全選(Ctrl+A)

send_keys(Keys.CONTROL,‘a’) ? 全選(Ctrl+A)

send_keys(Keys.CONTROL,‘x’) ? 剪切(Ctrl+X)

send_keys(Keys.CONTROL,‘v’) ? 粘貼(Ctrl+V)

send_keys(Keys.F1) ? ? ? ? ?? 鍵盤F1

send_keys(Keys.F12) ? ? ? ? ? 鍵盤F12

瀏覽器等待

1.為什么要進行等待

1.網速慢 2.網站內容過多 3.如果不進行等待而直接定位元素,可能會拋出異常

2.selenium中等待的分類

1.固定等待

2.顯示等待

WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located(

(By.CLASS_NAME,"g-hu")))

3.隱式等待?

driver.implicitly_wait(n)

PO模型

1.介紹

在自動化中大审,Selenium自動化測試中有一個名字經常被提及PageObject(思想與 面向對象的特征相同)蘸际,通常PO模型可以大大提高測試用例的維護效率

優(yōu)點:重用,業(yè)務和對象分離徒扶,代碼結構清晰粮彤,方便代碼維護

2.核心要素

1.在PO模式中抽離封裝集成一個BasePage類,該基類應該擁有一個只實現 webdriver實例的屬性

2.每一個page都繼承BasePage姜骡,通過driver來管理本page中元素导坟,將page中 的操作封裝成一個個方法

3.TestCase繼承unittest.Testcase類,并依賴page類圈澈,從而實現相應的測試步 驟

3.實現BasePage

fromseleniumimportwebdriver

fromselenium.webdriver.common.action_chainsimportActionChains#鼠標操作

classBasePage():

'''BasePage封裝所有界面都公用的方法惫周。例如driver,find_element等'''

'''實例化BasePage類時,事先執(zhí)行的__init__方法士败,該方法需要傳遞參數'''

def__init__(self,driver,url):

self.driver=driver

self.base_url=url

# 進入網址

defget(self):

self.driver.get(self.base_url)

#元素定位,替代八大定位

defget_element(self,*locator):

returnself.driver.find_element(*locator)

#點擊

defleft_click(self,*locator):

ActionChains(self.driver).click(self.get_element(*locator)).perform()

#輸入

defsend_text(self,text,*locator):

self.driver.find_element(*locator).send_keys(text)

#清除

defclear_text(self,*locator):

self.driver.find_element(*locator).clear()

實現SearchPage

'''

實現步驟:(1)繼承basepage,(2)元素傳參,(3)調取方法

'''

fromselenium.webdriver.common.byimportBy

frompomodel.Base.base_pageimportBasePage

classSearch(BasePage):

def__init__(self,driver,url):

BasePage.__init__(self,driver,url)

#進入百度

defopen_baidu(self):

self.get()

#輸入搜索內容

definput_search_content(self,text):

self.send_text(text,By.ID,"kw")

#點擊按鈕

defclick_baidu_search(self):

self.left_click(By.ID,"su")

實現TestCase

importunittest

fromseleniumimportwebdriver

frompomodel.Pages.search_pagesimportSearch

classBaiBu(unittest.TestCase):

defsetUp(self)->None:

self.driver=webdriver.Firefox()

self.driver.implicitly_wait(10)

deftest_serach(self):

url="http://www.baidu.com"

s=Search(self.driver,url)

s.open_baidu()

s.input_search_content("jack")

s.click_baidu_search()

deftearDown(self)->None:

self.driver.quit()

if__name__=='__main__':

unittest.main()

4.總結

PO設計模式中的BasePage基類對應案例中的BasePage.py文件 PO模式中的pages中的案例顯示Search.py PO模式設計中TestCase對應案例中的TestCase.py

5.po模式的優(yōu)點

1.PO提供了一種業(yè)務流程與頁面元素操作分離的模式闯两,這使得測試代碼變得更加清晰

2.頁面對象與用例分離褥伴,使得我們更好的復用對象

3.可復用的頁面方法代碼會變得更加優(yōu)化

4.更加有效的命令方式使得我們更加清晰的知道方法所操作的UI元素

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末谅将,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子重慢,更是在濱河造成了極大的恐慌饥臂,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件似踱,死亡現場離奇詭異隅熙,居然都是意外死亡,警方通過查閱死者的電腦和手機核芽,發(fā)現死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門囚戚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人轧简,你說我怎么就攤上這事驰坊。” “怎么了哮独?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵拳芙,是天一觀的道長。 經常有香客問我皮璧,道長舟扎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任悴务,我火速辦了婚禮睹限,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己羡疗,他們只是感情好删窒,可當我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著顺囊,像睡著了一般肌索。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上特碳,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天诚亚,我揣著相機與錄音,去河邊找鬼午乓。 笑死站宗,一個胖子當著我的面吹牛,可吹牛的內容都是我干的益愈。 我是一名探鬼主播梢灭,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蒸其!你這毒婦竟也來了敏释?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤摸袁,失蹤者是張志新(化名)和其女友劉穎钥顽,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體靠汁,經...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蜂大,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了蝶怔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奶浦。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖踢星,靈堂內的尸體忽然破棺而出澳叉,到底是詐尸還是另有隱情,我是刑警寧澤斩狱,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布耳高,位于F島的核電站,受9級特大地震影響所踊,放射性物質發(fā)生泄漏泌枪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一秕岛、第九天 我趴在偏房一處隱蔽的房頂上張望碌燕。 院中可真熱鬧误证,春花似錦、人聲如沸修壕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽慈鸠。三九已至蓝谨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間青团,已是汗流浹背譬巫。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留督笆,地道東北人芦昔。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像娃肿,于是被迫代替她去往敵國和親咕缎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,658評論 2 350

推薦閱讀更多精彩內容

  • 一料扰、什么是框架 1.框架 框架(framework)是一個框子 -- 指其約束性凭豪,也是一個架子 -- 指其支撐性,...
    藝術家123閱讀 188評論 0 0
  • 一记罚、概念 互聯網軟件的開發(fā)和發(fā)布墅诡,已經形成了一套標準流程,最重要的組成部分就是持續(xù)集成(Continuous in...
    __65a0閱讀 794評論 0 4
  • 一桐智、Python介紹 Python 是一個高層次的結合了解釋性、編譯性烟馅、互動性和面向對象的腳本語言说庭。 Python...
    成啦過客的青春閱讀 437評論 0 0
  • 多標簽之間的切換 場景:有的時候點擊一個鏈接,新頁面并非由當前頁面跳轉過去郑趁,而是新開一個頁面打開刊驴,這種情況下,計算...
    老友_9e40閱讀 293評論 0 0
  • 自動化 一寡润、概念 互聯網軟件的開發(fā)和發(fā)布捆憎,已經形成了一套標準流程,最重要的組成部分就是持續(xù)集成(Continuou...
    G_eebd閱讀 329評論 0 0