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

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

如何實(shí)現(xiàn)前端項(xiàng)目的自動(dòng)化測(cè)試?

2023-09-12 19:22 作者:華測(cè)教育  | 我要投稿

這其實(shí)就是我們常說的“UI自動(dòng)化測(cè)試”,針對(duì)這個(gè)問題,我先告知答題思路如下:

1、什么是UI自動(dòng)化?有什么優(yōu)勢(shì)?
2、UI自動(dòng)化實(shí)踐中會(huì)遇到什么難題?
3、如何解決難題,將UI落實(shí)到實(shí)踐中?【重點(diǎn)】
4、UI自動(dòng)化學(xué)習(xí)資料推薦

一、什么是UI自動(dòng)化?為什么使用UI自動(dòng)化?

1、什么是UI自動(dòng)化?

本質(zhì)上來說,UI自動(dòng)化測(cè)試,就是通過腳本或工具代替人工去執(zhí)行功能測(cè)試用例,自動(dòng)完成測(cè)試用例的執(zhí)行工作。常用于驗(yàn)證用戶界面的功能、兼容和穩(wěn)定性等,主要用于執(zhí)行回歸測(cè)試。

UI自動(dòng)化測(cè)試,可以模擬用戶與應(yīng)用程序或網(wǎng)站的交互,自動(dòng)執(zhí)行用戶界面上的操作,如點(diǎn)擊按鈕、輸入文本、選擇選項(xiàng)等,并檢查應(yīng)用程序或網(wǎng)站的響應(yīng)和行為是否符合預(yù)期,在軟件開發(fā)過程中幫助檢測(cè)是否存在bug。

2、UI自動(dòng)化有什么優(yōu)勢(shì)?

UI自動(dòng)測(cè)試可以模擬人工執(zhí)行測(cè)試,是最接近用戶真實(shí)操作的測(cè)試方法,這是UI自動(dòng)化測(cè)試最吸引人的地方,那么UI自動(dòng)化測(cè)試還有下面這些優(yōu)勢(shì):優(yōu)勢(shì)1:提高測(cè)試效率。

相比手動(dòng)測(cè)試,UI自動(dòng)化測(cè)試可以快速、準(zhǔn)確地執(zhí)行大量的測(cè)試用例,提高測(cè)試效率,減少人工測(cè)試的工作量。

優(yōu)勢(shì)2:提高測(cè)試覆蓋率。

UI自動(dòng)化測(cè)試可以覆蓋應(yīng)用程序或網(wǎng)站的各個(gè)功能和頁面,確保每個(gè)功能都經(jīng)過測(cè)試,提高測(cè)試覆蓋率,減少漏測(cè)的風(fēng)險(xiǎn)。

優(yōu)勢(shì)3:提高測(cè)試一致性。

UI自動(dòng)化測(cè)試可以確保在不同平臺(tái)、瀏覽器或設(shè)備上的測(cè)試執(zhí)行一致,減少人工測(cè)試的主觀因素,提高測(cè)試的一致性和可靠性。

優(yōu)勢(shì)4:提高軟件質(zhì)量。

UI自動(dòng)化測(cè)試可以幫助檢測(cè)和修復(fù)應(yīng)用程序或網(wǎng)站中的錯(cuò)誤和缺陷,提高軟件質(zhì)量,減少軟件發(fā)布后的問題。

但UI自動(dòng)化測(cè)試在實(shí)戰(zhàn)中卻像是“帶刺的玫瑰”。因?yàn)樗苣M用戶真實(shí)的操作應(yīng)用程序或前端網(wǎng)站,是最貼近用戶真實(shí)行為的模擬測(cè)試,但是因?yàn)閷?shí)踐中的一些難題,導(dǎo)致UI自動(dòng)化容易投入很大,卻沒有取的很好的效果。

二、UI自動(dòng)化實(shí)踐中會(huì)遇到什么難題?

有些人說UI自動(dòng)化沒有啥用,主要是UI自動(dòng)化在實(shí)際應(yīng)用中會(huì)遇到一些難題,導(dǎo)致沒有取的很好的效果,UI自動(dòng)化測(cè)試目前主要面臨下列這些挑戰(zhàn):

1.UI自動(dòng)化測(cè)試的投入產(chǎn)出比低。

想要取得好的效果,必須前期投入較大在資源進(jìn)行腳本開發(fā),但是往往后期使用時(shí)沒有取的預(yù)想的效果,容易導(dǎo)致投入中斷?

2.保障腳本的維護(hù)是個(gè)大問題。

項(xiàng)目頻繁的迭代,導(dǎo)致前端頁面變化很快,對(duì)應(yīng)的腳本得不斷的修改,如何保障腳本的維護(hù)是個(gè)大問題。

3.UI自動(dòng)化測(cè)試的穩(wěn)定性也是個(gè)挑戰(zhàn)。

腳本執(zhí)行時(shí)經(jīng)常遇到各種奇奇怪怪的Bug,如何保障腳本的穩(wěn)定性是個(gè)頭疼的問題。

三、實(shí)踐中如何解決以上4個(gè)難題?【重點(diǎn)】

實(shí)際過程中,以上4個(gè)難題該如何進(jìn)行優(yōu)化呢?咱們以前端的web UI自動(dòng)化為項(xiàng)目,以Python+Selenium框架為背景,來看下項(xiàng)目若要執(zhí)行自動(dòng)化測(cè)試,應(yīng)該怎么搞。

優(yōu)化1:如何保障投入產(chǎn)出比?

很多人搞UI自動(dòng)化測(cè)試沒有想清楚到底要怎么搞?上來就拿個(gè)框架,先搞起來再說,投入了很多人力物力,然后搞到一半時(shí)卻發(fā)現(xiàn)很多問題,最后就完?duì)僮恿?。。。所以開始前,需要做好規(guī)劃,要明確目標(biāo)。如果是新起動(dòng)的UI自動(dòng)化測(cè)試,建議可以先選好框架,然后選擇一個(gè)業(yè)務(wù)流程作為案例,以該案例為目標(biāo)去執(zhí)行框架的搭建和腳本的開發(fā),完成開發(fā)后主要投入回歸測(cè)試當(dāng)中,看看實(shí)際執(zhí)行的效果如何,然后統(tǒng)計(jì)投入的時(shí)間和人力成本,然后再進(jìn)行下一步的推進(jìn)。

優(yōu)化2:如何保障腳本的維護(hù)?

當(dāng)前項(xiàng)目都是頻繁迭代的,這是不可改變的事實(shí),所以腳本寫完后一定需要維護(hù)修改?;谶@個(gè)事實(shí),我們能優(yōu)化的就是減少修改的次數(shù),在UI自動(dòng)化中,最常用的優(yōu)化方法就是使用PO模式進(jìn)行封裝。

那什么是PO模式呢?

PO,是Page Object的縮寫,簡(jiǎn)單來說,就是將前端項(xiàng)目中的每個(gè)頁面封裝為一個(gè)“類”,頁面上的元素都封裝為實(shí)例的“屬性”,頁面上的功能操作都封裝為實(shí)例的“方法”。這樣封裝后,無論將來頁面怎么變化,我們只需要修改一次即可,可以大大的提升維護(hù)的效率。

PO模式是自動(dòng)化測(cè)試項(xiàng)目開發(fā)實(shí)踐的最佳設(shè)計(jì)模式之一

優(yōu)化3:如何保障腳本執(zhí)行的穩(wěn)定性?

UI自動(dòng)化腳本執(zhí)行時(shí)可能會(huì)遇到各種問題,比如瀏覽器啟動(dòng)時(shí)間過長,比如頁面加載過長,比如圖片被擋住等等,你無法預(yù)知。優(yōu)化方法,除了我們常用的各種顯式或隱式等待處理外,我們還可以對(duì)原始的api進(jìn)行封裝。比如以Web UI常用的Selenium框架為例,當(dāng)我們等待某個(gè)元素出現(xiàn)時(shí),為了保障成功性,需要對(duì)“等待”做一個(gè)封裝。除了顯示等待外,還可以進(jìn)一步優(yōu)化,做個(gè)循環(huán)處理,就是等待3次,每次等待失敗后可以重新刷新等待。比如封裝一個(gè)“等待元素”出現(xiàn),確??梢渣c(diǎn)擊的方法,如下所示:

def element_click_wait(self, located_type, located_key, assert_condition=None, message="執(zhí)行點(diǎn)擊超時(shí)",time_out=10, refresh=False): ? ? ? ?""" ? ? ? ?【適用于頁面跳轉(zhuǎn)時(shí)等待元素出現(xiàn),確??梢渣c(diǎn)擊的場(chǎng)景】 ? ? ? ?等待1個(gè)元素點(diǎn)擊是否正常,并驗(yàn)證點(diǎn)擊是否成功,每隔一段時(shí)間輪詢點(diǎn)擊1次,直到超時(shí)拋出異常為止 ? ? ? ?@:param located_type 定位方式(8種:id name class tag link plink xpath css) ? ? ? ?@:param located_key 定位關(guān)鍵字 ? ? ? ?@:param assert_condition 驗(yàn)證點(diǎn)擊是否完成的斷言條件語句【默認(rèn)不驗(yàn)證點(diǎn)擊是否成功】 ? ? ? ?@:param message 點(diǎn)擊失敗提示信息 ? ? ? ?@:param time_out 等待時(shí)長,默認(rèn)為10秒 ? ? ? ?@:param refresh 刷新標(biāo)志,如果為True,則在等待超時(shí)后,刷新頁面,重新再執(zhí)行一輪等待執(zhí)行(相當(dāng)于刷新后重新執(zhí)行一次) ? ? ? ?如果是False,則不執(zhí)行刷新,直接超時(shí)報(bào)錯(cuò) ? ? ? ?""" ? ? ? ?driver = self.driver ? ? ? ?is_type_true = 0 ?# 用戶判斷定位方式參數(shù)是否正確 ? ? ? ?for i in range(int(time_out)*2): ?# 循環(huán)次數(shù)為配置的2倍,以便處理刷新重試的情景 ? ? ? ? ? ?try: ? ? ? ? ? ? ? ?time.sleep(1) ? ? ? ? ? ? ? ?if located_type == "id": ? ? ? ? ? ? ? ? ? ?driver.find_element_by_id(located_key).click() ? ? ? ? ? ? ? ?elif located_type == "name": ? ? ? ? ? ? ? ? ? ?driver.find_element_by_name(located_key).click() ? ? ? ? ? ? ? ?elif located_type == "class": ? ? ? ? ? ? ? ? ? ?driver.find_element_by_class_name(located_key).click() ? ? ? ? ? ? ? ?elif located_type == "tag": ? ? ? ? ? ? ? ? ? ?driver.find_element_by_tag_name(located_key).click() ? ? ? ? ? ? ? ?elif located_type == "link": ? ? ? ? ? ? ? ? ? ?driver.find_element_by_link_text(located_key).click() ? ? ? ? ? ? ? ?elif located_type == "plink": ? ? ? ? ? ? ? ? ? ?driver.find_element_by_partial_link_text(located_key).click() ? ? ? ? ? ? ? ?elif located_type == "xpath": ? ? ? ? ? ? ? ? ? ?driver.find_element_by_xpath(located_key).click() ? ? ? ? ? ? ? ?elif located_type == "css": ? ? ? ? ? ? ? ? ? ?driver.find_element_by_css_selector(located_key).click() ? ? ? ? ? ? ? ?else: ? ? ? ? ? ? ? ? ? ?is_type_true = 1 ? ? ? ? ? ?except: ? ? ? ? ? ? ? ?if i == (int(time_out)-1): ?# 第1次循環(huán)到點(diǎn)判斷 ? ? ? ? ? ? ? ? ? ?if refresh: ?# 執(zhí)行刷新后重新再執(zhí)行1輪 ? ? ? ? ? ? ? ? ? ? ? ?refresh = False ? ? ? ? ? ? ? ? ? ? ? ?self.element_refresh_wait() ?# 刷新頁面 ? ? ? ? ? ? ? ? ? ? ? ?continue ? ? ? ? ? ? ? ? ? ?else: ?# 不執(zhí)行刷新重試 ? ? ? ? ? ? ? ? ? ? ? ?AutomationLog.LogMsg("點(diǎn)擊失敗,第1次等待超時(shí)啦!---【"+located_type+","+located_key+"】", 2) ? ? ? ? ? ? ? ? ? ? ? ?raise ex.TimeoutException(message) ? ? ? ? ? ? ? ?elif i == (int(time_out)*2-1): ?# 刷新后再執(zhí)行1輪還是失敗了 ? ? ? ? ? ? ? ? ? ?AutomationLog.LogMsg("點(diǎn)擊失敗,第2次等待也超時(shí)啦!---【" + located_type + "," + located_key + "】", 2) ? ? ? ? ? ? ? ? ? ?raise ex.TimeoutException(message) ? ? ? ? ? ? ? ?elif assert_condition: ?# 正常執(zhí)行循環(huán)(驗(yàn)證點(diǎn)擊是否成功,成功則結(jié)束循環(huán),否則繼續(xù)循環(huán)) ? ? ? ? ? ? ? ? ? ?try: ? ? ? ? ? ? ? ? ? ? ? ?WebDriverWait(driver, 1).until(assert_condition) ? ? ? ? ? ? ? ? ? ? ? ?break ? ? ? ? ? ? ? ? ? ?except: ? ? ? ? ? ? ? ? ? ? ? ?continue ? ? ? ? ? ? ? ?else: ?# 正常執(zhí)行循環(huán)(不驗(yàn)證點(diǎn)擊結(jié)果) ? ? ? ? ? ? ? ? ? ?continue ? ? ? ? ? ?if is_type_true == 1: ? ? ? ? ? ? ? ?AutomationLog.LogMsg("定位方式寫錯(cuò)啦,請(qǐng)檢查located_type參數(shù)!---【" + located_type + "】", 2) ? ? ? ? ? ? ? ?raise ex.InvalidArgumentException("定位方式參數(shù)出錯(cuò)!") ? ? ? ? ? ?elif assert_condition: ?# 正常執(zhí)行循環(huán)(驗(yàn)證點(diǎn)擊是否成功,成功則結(jié)束循環(huán),否則繼續(xù)循環(huán)) ? ? ? ? ? ? ? ?try: ? ? ? ? ? ? ? ? ? ?WebDriverWait(driver, 1).until(assert_condition) ? ? ? ? ? ? ? ? ? ?break ? ? ? ? ? ? ? ?except: ? ? ? ? ? ? ? ? ? ?continue ? ? ? ? ? ?else: ?# 正常執(zhí)行循環(huán)(不驗(yàn)證點(diǎn)擊結(jié)果) ? ? ? ? ? ? ? ?break

當(dāng)然,除了以上的實(shí)踐經(jīng)驗(yàn),其他比如還可以找開發(fā)配合,對(duì)要測(cè)試的常用UI元素進(jìn)行id的編碼,這樣也可以大大提升成功的效率,輕松解決定位的問題等。

四、UI自動(dòng)化學(xué)習(xí)資料推薦

UI自動(dòng)化分為web自動(dòng)化和app自動(dòng)化。

最后:這些資料,對(duì)于【軟件測(cè)試】的朋友來說應(yīng)該是最全面最完整的備戰(zhàn)倉庫,這個(gè)倉庫也陪伴上萬個(gè)測(cè)試工程師們走過最艱難的路程,希望也能幫助到你!

包括,測(cè)試人技術(shù)進(jìn)階路徑圖,50多天的視頻教程、16個(gè)項(xiàng)目實(shí)例,30多個(gè)測(cè)試工具,37份測(cè)試文檔,70個(gè)軟件測(cè)試相關(guān)問題,40篇測(cè)試經(jīng)驗(yàn)級(jí)文章分享,還有軟件測(cè)試面試小程序,求職簡(jiǎn)歷的優(yōu)化模板。

加油吧,如果你需要提升技術(shù)儲(chǔ)備,那就行動(dòng),在路上總比在起點(diǎn)觀望的要好。一切的迷茫都是因?yàn)橄氲锰喽龅奶伲?/p>

你可以在公眾號(hào):傷心的辣條?! 自行領(lǐng)取一份216頁軟件測(cè)試工程師面試寶典文檔資料【免費(fèi)的】。以及相對(duì)應(yīng)的視頻學(xué)習(xí)教程免費(fèi)分享!,其中包括了有基礎(chǔ)知識(shí)、Linux必備、Shell、互聯(lián)網(wǎng)程序原理、Mysql數(shù)據(jù)庫、抓包工具專題、接口測(cè)試工具、測(cè)試進(jìn)階-Python編程、Web自動(dòng)化測(cè)試、APP自動(dòng)化測(cè)試、接口自動(dòng)化測(cè)試、測(cè)試高級(jí)持續(xù)集成、測(cè)試架構(gòu)開發(fā)測(cè)試框架、性能測(cè)試、安全測(cè)試等。

現(xiàn)在我邀請(qǐng)你進(jìn)入我們的軟件測(cè)試學(xué)習(xí)交流群:【746506216】,備注“入群”, 大家可以一起探討交流軟件測(cè)試,共同學(xué)習(xí)軟件測(cè)試技術(shù)、面試等軟件測(cè)試方方面面,還會(huì)有免費(fèi)直播課,收獲更多測(cè)試技巧,我們一起進(jìn)階Python自動(dòng)化測(cè)試/測(cè)試開發(fā),走向高薪之路。


如何實(shí)現(xiàn)前端項(xiàng)目的自動(dòng)化測(cè)試?的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
谢通门县| 潮安县| 大英县| 南雄市| 徐州市| 扶风县| 板桥市| 龙海市| 松桃| 通化市| 光山县| 靖边县| 阳高县| 余姚市| 江油市| 霍城县| 阿鲁科尔沁旗| 岫岩| 额济纳旗| 芜湖市| 广东省| 安溪县| 商都县| 北安市| 神池县| 舟曲县| 安顺市| 卢氏县| 诏安县| 惠州市| 宁远县| 余干县| 朝阳县| 台北县| 镶黄旗| 张家川| 朝阳县| 莱州市| 西乌珠穆沁旗| 库尔勒市| 田东县|