Selenium(測試)面試問題大合集
本帖最后由 chelang 于 2020-2-22 15:42 編輯許多同學(xué)在找工作面試時(shí)經(jīng)常被問到關(guān)于自動(dòng)化方面的基礎(chǔ),這時(shí)候即使自己之前做過自動(dòng)化,要完整準(zhǔn)確的回答面試官的問題卻不是易事,那么請看下面?。?!
問題一:說一下你們公司自動(dòng)化測試流程?
在項(xiàng)目成型基本穩(wěn)定,不會(huì)出現(xiàn)大規(guī)模的需求變動(dòng)之后,就可以考慮自動(dòng)化的啟動(dòng);
首先要考慮的就是自動(dòng)化工具的選擇,像常用的自動(dòng)化工具就有QTP、selenium IDE、RobotFramework等,但是這樣的工具使用起來不夠靈活,一般為了與項(xiàng)目貼合,最好自己寫一套框架,像之前我們公司用的框架就是結(jié)合了Python+selenium和Python的unittest;
然后在手工用例轉(zhuǎn)化自動(dòng)化用例之前,我們需要進(jìn)行評審和決策,將能實(shí)現(xiàn)自動(dòng)化或難度低的模塊、用例優(yōu)先進(jìn)行自動(dòng)化,不能實(shí)現(xiàn)自動(dòng)化的用例給出具體原因,在回歸時(shí)指派手工覆蓋,防止漏測;
自動(dòng)化用例我們要有一定的規(guī)范和要求,便于腳本的調(diào)用和后期的維護(hù),比如一個(gè)功能的用例寫在一個(gè)目錄下,每一條用例寫一個(gè)腳本,命名要統(tǒng)一格式;
我們用python的unittest框架加載測試用例,用HTMLTestRunner運(yùn)行測試套并生成測試報(bào)告,報(bào)告出來后我們要第一時(shí)間去分析測試結(jié)果,對失敗的用例要詳細(xì)定位失敗的原因,到底是腳本錯(cuò)誤呢還是這就是bug?再進(jìn)行處理,修改用例或者就是提交bug問題單;
自動(dòng)化用例執(zhí)行全部完成后,對測試結(jié)果進(jìn)行匯總并給出測試結(jié)論。
問題二:介紹下你們公司的自動(dòng)化測試框架?
我們公司的自動(dòng)化框架基于python+Selenium,我們會(huì)有一個(gè)測試用例目錄用于存放測試用例;一個(gè)公共的第三方lib庫,因?yàn)槲覀儗?shí)現(xiàn)自動(dòng)化的過程中會(huì)有很多經(jīng)常用到的方法,做成公共模塊放在lib庫里面,可以提高代碼的復(fù)用率,便于代碼的維護(hù);還會(huì)有一個(gè)data數(shù)據(jù)目錄,存放自動(dòng)化測試中的數(shù)據(jù),在進(jìn)行數(shù)據(jù)驅(qū)動(dòng)時(shí),數(shù)據(jù)與代碼分離,便于自動(dòng)化用例數(shù)據(jù)的準(zhǔn)備和腳本的維護(hù);還會(huì)有一個(gè)執(zhí)行和報(bào)告目錄,執(zhí)行的策略和報(bào)告的生成在這個(gè)目錄下進(jìn)行,可以調(diào)整自動(dòng)化測試中的下發(fā)策略,查看運(yùn)行的結(jié)果。
問題三:你們用的測試框架是自己寫的嗎?
我們用的是Python自帶的單元測試框架unittest
問題四:定位元素的方法有哪些?
八大定位元素:
屬性定位:id、name、clas_sname
路徑定位:xpath 、css_selector
鏈接定位:partial_link_text、link_text
標(biāo)簽定位:tag_name
問題五:如果有個(gè)元素總是定位不到,怎么辦?
一般出現(xiàn)這種問題的話要先分析腳本中的代碼是否與html源文件中元素的屬性值一致,經(jīng)常會(huì)因?yàn)榭崭?、特殊字符、編碼格式等問題導(dǎo)致腳本中代碼與html源文件不一致;再查看HTML源文件中是否使用了frame,如果有了則需要特殊處理(使用switch_to_frame跳到frame再定位元素);如果都不是以上的情況,則要檢查瀏覽器的配置,是不是攔截了一部分功能,導(dǎo)致需要定位的html頁面的元素不能正常加載;還有一種情況是系統(tǒng)使用的協(xié)議不是標(biāo)準(zhǔn)的http協(xié)議,而是用了自定義的協(xié)議,那就沒辦法了。
問題六:你們公司自動(dòng)化測試的流程是什么樣的?
我們的項(xiàng)目是比較穩(wěn)定的項(xiàng)目,做了好久了,現(xiàn)在主要是運(yùn)維修改一些BUG和做一些新需求,所以我們公司的自動(dòng)化測試是用于本次新版本上線前做回歸測試用的。腳本是前兩年就已經(jīng)做好了的,每次新版本上線前一周會(huì)花兩三天的時(shí)間進(jìn)行腳本更新與維護(hù),腳本調(diào)試通過再使用測試框架執(zhí)行測試,測試完成會(huì)生成報(bào)告,我們再對測試結(jié)果進(jìn)行分析,如果發(fā)現(xiàn)了BUG,進(jìn)行BUG的跟進(jìn),關(guān)于BUG的跟進(jìn)就跟手工測試試試跟進(jìn)BUG是一樣的了。
問題七:定位一組元素和定位單個(gè)元素有什么區(qū)別?
定位單個(gè)元素返回的是一個(gè)元素對象,可以直接進(jìn)行操作;而定位多個(gè)元素返回的是一個(gè)元素對象列表,需要做二次定位后才可以進(jìn)行操作,如下拉框中的元素,需先定位到下拉框,再用Select方法進(jìn)行二次定位
問題八:你們公司自動(dòng)化用例大概多少條?會(huì)對那些進(jìn)行自動(dòng)化測試?
占總系統(tǒng)測試用例的30%-50%左右,根據(jù)自己總用例數(shù)來估算吧!一般跳窗口,調(diào)第三方接口以及一些業(yè)務(wù)場景比較復(fù)雜的用例不適合實(shí)現(xiàn)自動(dòng)化。
問題九:介紹一下Selenium的原理(webdriver的原理)?
以firefox為例,當(dāng)測試腳本啟動(dòng)firefox的時(shí)候,selenium-webdriver 會(huì)首先在新線程中啟動(dòng)firefox瀏覽器,啟動(dòng)后selenium-webdriver會(huì)將firefox綁定到特定的端口,綁定完成后該firefox就相當(dāng)于webdriver的remote server存在;客戶端(也就是測試腳本)創(chuàng)建1個(gè)session,在該session中向remote server發(fā)送http請求(實(shí)際是restful,但不明白的話,直接說http就好了),remote server解析請求,完成相應(yīng)操作并返回response;客戶端接受response,并分析其返回值來決定是接著執(zhí)行下面的代碼,還是停止操作。簡單的說webdriver就是在自動(dòng)化腳本與瀏覽器之間建立一種溝通(交互),腳本中的代碼以請求的形式發(fā)給瀏覽器,瀏覽器執(zhí)行后返回結(jié)果。
問題十:你覺得Selenium的缺陷是什么?
首先Selenium是一種自動(dòng)化測試框架,它就存在自動(dòng)化測試的缺陷:不穩(wěn)定、可靠性、不易維護(hù)、成本與收益;而且它只支持B/S架構(gòu)的自動(dòng)化。
問題十一:那Selenium的優(yōu)點(diǎn)?
開源、輕量級、支持多種語言、提供的SeleniumIDE工具錄制腳本易于上手,支持多種瀏覽器,可以很好的測試兼容性。
問題十二:如何去定位屬性動(dòng)態(tài)變化的元素?
- xpath或者css通過同級、父級、子級進(jìn)行定位
問題十三:selenium中如何保證操作元素的成功率?
- 添加元素等待時(shí)間time。sleep(5)/driver.implicitly_wait(30)
- try 方式進(jìn)行 id,name,clas,xpath, css selector 不同方式進(jìn)行定位,如果第一種失敗可以自動(dòng)嘗試第二種
問題十四:如何提高selenium腳本的執(zhí)行速度?
1. 減少操作步驟,如經(jīng)過三四步才能打開我們要測試的頁面的話,我們可以直接通過網(wǎng)址來打開,減少不必要的操作
2. 中斷頁面加載,如果頁面加載的內(nèi)容過多,而加載的內(nèi)容不影響我們測試,就設(shè)置超時(shí)時(shí)間,中斷頁面加載
3. 在設(shè)置等待時(shí)間的時(shí)候,可以sleep固定的時(shí)間,也可以檢測某個(gè)元素出現(xiàn)后中斷等待也可以提高速度(可以用try + isElementPresent,或者try + find_element_by)
4. 多線程執(zhí)行腳本,在編寫測試用例的時(shí)候,要盡量實(shí)現(xiàn)松耦合,然后在服務(wù)器允許的情況下,設(shè)置多線程運(yùn)行,提高執(zhí)行速度(remote起多節(jié)點(diǎn)做分布式,需要先設(shè)置hub和node,threading做多線程)
問題十五:怎么提高腳本執(zhí)行的穩(wěn)定性?
- 設(shè)置等待時(shí)間:time.sleep( )、driver.implicitly_wait(30)
- 多用 try 捕捉,處理異常
- 多線程的時(shí)候,用例之間相互影響,所以設(shè)計(jì)用例的時(shí)候,盡量降低用例的耦合度;
- 多線程的時(shí)候,如果用例執(zhí)行的先后數(shù)序有要求,那么在用例命名的時(shí)候要加0-9或a-z排序,因?yàn)橛美膱?zhí)行順序是按照ASCII碼表排列的(數(shù)字--》大寫字母--》小寫字母)
問題十六:自動(dòng)化測試的時(shí)候需要連接數(shù)據(jù)庫做數(shù)據(jù)校驗(yàn)?
- UI自動(dòng)化不需要
- 接口測試會(huì)需要(修改了數(shù)據(jù)庫中的數(shù)據(jù)就需要,也就是對數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行了增、刪、改)
注:連接數(shù)據(jù)庫需要導(dǎo)入pymysql、pyoracle模塊
問題十七:你有寫過自動(dòng)化測試腳本嗎?
有寫,因?yàn)橐环矫嫖覀兊南到y(tǒng)每個(gè)版本都會(huì)有新功能上線,等這些新功能運(yùn)行三四個(gè)月基本穩(wěn)定后,這些功能會(huì)就會(huì)加入到自動(dòng)化測試的范圍內(nèi),所以我們幾乎每個(gè)版本都會(huì)有新自動(dòng)化腳本要寫。另一方面,原有的功能總會(huì)有一些新的調(diào)整,所以每個(gè)版本都需要對原有的自動(dòng)化腳本進(jìn)行更新與維護(hù)。
我們一般是先使用seleniumIDE進(jìn)行錄制后生成腳本,再對工具自動(dòng)生成的腳本進(jìn)行修改、優(yōu)化。
問題十八:Python常用的模塊、函數(shù)有哪些?
模塊:os、time、system、unittest
函數(shù):time.sleep()、assertIn、assertequal等等(回憶下課堂都用了什么方法)
問題十九:你所測試的核心模塊是怎么用自動(dòng)化實(shí)現(xiàn)的,對于驗(yàn)證碼的情況如何處理?
自動(dòng)化實(shí)現(xiàn)原理 把自動(dòng)化測試流程說了,對于驗(yàn)證碼,驗(yàn)證碼,我們用的是萬能驗(yàn)證碼,開發(fā)后臺代碼寫死的。
頁:
[1]