高級自動化測試常見面試題(Web、App、接口)

一、Web自動化測試
1.Selenium中hidden或者是display = none的元素是否可以定位到?
不能,可以寫JavaScript將標簽中的hidden先改為0,再定位元素
2.Selenium中如何保證操作元素的成功率?也就是說如何保證我點擊的元素一定是可以點擊的?
1.添加元素智能等待時間 driver.implicitly_wait(30)
2.添加強制等待時間(比如python中寫 sleep)
3.try 方式進行 id,name,clas,x path, css selector 不同方式進行定位,如果第一種失敗可以自動嘗試第二種
3.如何提高Selenium腳本的執(zhí)行速度?
代碼優(yōu)化,多任務,分布式部署都是可以提升腳本執(zhí)行速度的。
4.用例在運行過程中經(jīng)常會出現(xiàn)不穩(wěn)定的情況,也就是說這次可以通過,下次就沒辦法通過了,如何去提升用例的穩(wěn)定性?
1.time.sleep( )
2.driver.implicitly_wait(30)
3.多用 try 捕捉,處理異常
5.你的自動化用例的執(zhí)行策略是什么?
自動化測試與軟件開發(fā)本質(zhì)上是一樣的,利用自動化測試工具,經(jīng)過測試需求分析,設計出自動化測試用例,從而搭建自動化測試的框架,設計與編寫自動化腳本,驗證測試腳本的正確性,最終完成自動化測試測試腳本(即主要功能為測試的應用軟件)并輸出測試結果
6.自動化測試的時候是不是需要連接數(shù)據(jù)庫做數(shù)據(jù)校驗?
從數(shù)據(jù)庫層面來進行數(shù)據(jù)校驗可以更方便驗證系統(tǒng)的數(shù)據(jù)處理方面是否正確,數(shù)據(jù)處理邏輯正常后,UI層面上的校驗也是需要做的。
7.id,name,class,xpath, css selector這些屬性,你最偏愛哪一種,為什么?
css 、xpath 幾乎所有的元素都可以定位到,但是它們的短處在于頁面上更改了元素后位置很容易改變,所以首先使用的還是id或者name等。
8.如何去定位頁面上動態(tài)加載的元素?
觸發(fā)動態(tài)加載元素的事件,直至動態(tài)元素出現(xiàn),進行定位
9.如何去定位屬性動態(tài)變化的元素?
xpath或者css通過同級、父級、子級進行定位
點擊鏈接以后,Selenium是否會自動等待該頁面加載完畢?
會的
10.什么是page object設計模式?
簡單來說,就是把頁面作為對象,在使用中傳遞頁面對象,來使用頁面對象中相應的成員或者方法,能更好的體現(xiàn)面向?qū)ο笳Z言(比如java或者python)的面向?qū)ο蠛头庋b特性。
11.如何在定位元素后高亮元素(以調(diào)試為目的)?
用JavaScript等腳本來重置元素屬性,給定位的元素加背景、邊框
12.什么是斷言?
斷言的英文是assertion,斷言檢查的英文是assertion checking。
斷言是指定一個程序必須已經(jīng)存在的狀態(tài)的一個邏輯表達式,或者一組程序變量在程序執(zhí)行期間的某個點上必須滿足的條件。
13.你覺得自動化測試最大的缺陷是什么?
1.不穩(wěn)定
2.可靠性
3.不易維護
4.成本與收益
14.Webdriver可以用來做接口測試嗎?
接口測試有現(xiàn)成的模塊來處理,WebDriver是用于做WebUI自動化測試的。如果要實現(xiàn)接口測試,可以使用Requests模塊來實現(xiàn)
二、App?UI自動化測試
1.Android APP 內(nèi)存不足時, 系統(tǒng)如何結束進程獲得內(nèi)存?
系統(tǒng)優(yōu)先結束被掛起(暫停)的進程,釋放內(nèi)存
2.APP 測試常見的嚴重問題有哪些?分別引起的原因有哪些?
常見的有 crash、ANR(應用無響應、卡死),一般由設備碎片化、網(wǎng)絡波動大、內(nèi)存泄漏、代碼編寫錯誤
3.請簡單介紹你曾使用過的一款 APP 自動化測試工具 ?
開放性問題,帶點主觀意見
1.對比其他熟悉的自動化工具的優(yōu)缺點
2.自動化的簡要方案(簡要的同時關鍵內(nèi)容請具體)。(提示:appnium 等)
4.Android 測試與 web 測試有什么區(qū)別?
相同點:
1.設計測試用例均依據(jù)等價類、邊界值等方法,測試原理相同;
2.大多數(shù)都采用黑盒測試方法來驗證業(yè)務功能;
3.需要檢查界面布局、風格和按鈕是否美觀、統(tǒng)一等(UI測試);
4.測試頁面載入和翻頁的速度、登錄時長是否溢出等問題(性能測試)
5.測試應用系統(tǒng)的穩(wěn)定性;
不同點:
1.手機作為通信工具,通信等一些行為會對APP產(chǎn)生(中斷測試)
2.手機用戶對app 產(chǎn)品的安裝卸載操作:從上一版本/上兩個版本直接升級到最新版本(安裝卸載測試);
3.web自動化測試使用的工具較常用的是selenium,而android手機自動化測試比較常用的自動化工具是monkey、monkeyrunner、Appium(測試工具不一樣)
5.app 測試有哪幾種環(huán)境?
本地環(huán)境:app 安裝的手機環(huán)境和電腦搭建的自動化測試環(huán)境(比如安卓 SDK 等等)。
服務器環(huán)境:war 包部署的服務器, 服務器可以通過瀏覽器訪問, 也可以通過 app 去訪問。(訪問的是 web 程序的接口)
6.簡單介紹一下 Android SDK 的安裝步驟:
下載 jdk 和安卓 sdk
安裝 jdk, 配置環(huán)境變量(java_home、 classpath、 path)
7.請簡要介紹一下移動應用及其服務端的測試點?
移動應用主要有權限、安裝運行卸載、UI、功能、性能、中斷、兼容性、安全性、回歸、升級更新、用戶體驗。(app的11 大測試點)
服務端有接口測試、性能測試、安全測試。
8.如何判斷 app 的 bug 是客戶端問題還是后臺問題
這個要根據(jù)業(yè)務來,一般數(shù)據(jù)的問題前端的問題多些,一般做法是有問題提給前端開發(fā), 他們知道是他們自己的問題還是后臺返回的數(shù)據(jù)問題。
9.安卓中如何取出日志信息?
把安卓系統(tǒng)日志信息實時導入到本地:adb logcat -v time > d:\mylog.log
運行使用某個 app,實時獲取該 app 的日志信息(cmd 里面的返回信息) :
adb shell monkey -p com.android.calendar -v 1000 > d:\mylog2.log
10.常見的 adb 命令:
查看當前連接的設備:adb devices
安裝軟件:adb install 路徑\xx.apk
卸載軟件:adb uninstall <包名>
從電腦上發(fā)送文件到設備:adb push <本地路徑> <遠程路徑>
adb push C:\test1.txt /sdcard/
從設備上下載文件到電腦:adb pull <遠程路徑> <本地路徑>
adb pull /sdcard/test1.txt D:
實時獲取日志:adb logcat -v time > D:\mylog.log
登錄終端設備 shell:adb shell
查找包名/活動名:adb logcat | findstr START
啟動 APP 啟動:adb shell am start -n packageName/activity
關閉 app語法:adb shell am force-stop 包名
監(jiān)控 APP 啟動時間:adb shell am start -W packageName/activity
Monkey 命令:adb shell monkey -v -p mypackage 50
11.APP 這么多主流機型如何測試 ?
我們公司就買了, 魅族, 華為, 小米, iphone7、 iphone8 、 iphone8plus 、 iphone x 測試兼容性,有些沒有的機型,先借用同事的手機進行測試,同時申請公司購買,或者采用云真機。
12.App 崩潰(閃退),可能是什么原因?qū)е碌模?/span>
緩存垃圾過多:由于安卓系統(tǒng)的特性,如果長時間不清理垃圾文件.會導致越來越卡.也會出現(xiàn)閃退情況.
運行的程序過多,導致內(nèi)存不足
應用版本兼容問題:如果應用版本太低,會導致不兼容,造成閃退。此外,有些新版本在調(diào)試中,也會造成應用閃退。解決方法:如果是版本太舊,更新為新版本即可;如果是新版本閃退,可能是應用在改版調(diào)試,可卸載后安裝舊版。
檢查 APP 中訪問網(wǎng)絡的地方,組件中的 ImageView 是否可以正常的下載并顯示到 app 頁面上。
檢查 APP 的 sdk 和手機的系統(tǒng)是否兼容。
在一些特定情況下的閃退,比如播放視頻,在 Android5.0 升級到 Android6.0 的時候,有些系統(tǒng) API 老版本
有,新版本沒有,到時回去對象的時候失敗,報空,系統(tǒng)就會出現(xiàn)閃退
13.Appium 都有哪些啟動方式
1.客戶端啟動
2.命令行啟動
14.請簡單介紹一下使用過的安卓UI自動化測試工具?
參考答案:appium:是一個移動端的自動化框架,可用于測試原生應用,移動網(wǎng)頁應用和混合型應用,且是跨平臺的。robotium:是一款國外的Android自動化測試框架,主要針對Android平臺的應用進行黑盒自動化測試,它提供了模擬各種手勢操作(點擊、長按、滑動等)、查找和斷言機制的API,能夠?qū)Ω鞣N控件進行操作。
15.請說明Android手機和IOS手機,系統(tǒng)有什么區(qū)別?
兩者運行機制不同:IOS采用的是沙盒運行機制,安卓采用的是虛擬機運行機制。
兩者后臺制度不同:IOS中任何第三方程序都不能在后臺運行;安卓中任何程序都能在后臺運行,直到?jīng)]有內(nèi)存才會關閉。
IOS中用于UI指令權限最高,安卓中數(shù)據(jù)處理指令權限最高。
三、接口自動化測試
1.按你的理解,軟件接口是什么?
就是指程序中具體負責在不同模塊之間傳輸或接受數(shù)據(jù)的并做處理的類或者函數(shù)。
2.HTTP和HTTPS協(xié)議區(qū)別?
https協(xié)議需要到CA(Certificate Authority,證書頒發(fā)機構)申請證書,一般免費證書較少,因而需要一定費用;
http是超文本傳輸協(xié)議,信息是明文傳輸,Https協(xié)議是由SSL+Http協(xié)議構建的可進行加密傳輸、身份認證的網(wǎng)絡協(xié)議,比http協(xié)議安全;
http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443;
3.HTTPS在哪一層?
以前我面試很喜歡提網(wǎng)絡協(xié)議的問題,有朋友說我裝X,不實用。稍有點研究網(wǎng)絡知識,實際就不難回答
HTTPS在應用層。
4.get和post區(qū)別是什么?
POST和GET都是向服務器提交數(shù)據(jù),并且都會從服務器獲取數(shù)據(jù)。
區(qū)別:
1)傳送方式:get通過地址欄傳輸,post通過報文傳輸
2)傳送長度:get參數(shù)有長度限制(受限于url長度),而post無限制
3)GET產(chǎn)生一個TCP數(shù)據(jù)包(對于GET方式的請求,瀏覽器會把http header和data一并發(fā)送出去,服務器響應200返回數(shù)據(jù)),POST產(chǎn)生兩個TCP數(shù)據(jù)包(對于POST,瀏覽器先發(fā)送header,服務器響應100 continue,瀏覽器再發(fā)送data,服務器響應200 ok返回數(shù)據(jù))
4)get請求參數(shù)會被完整保留在瀏覽歷史記錄里,而post中的參數(shù)不會被保留
5)在做數(shù)據(jù)查詢時,建議用GET方式;而在做數(shù)據(jù)添加、修改或刪除時,建議用post方式
5.常見的POST提交數(shù)據(jù)方式
主要有四種方式:application/x-www-form-urlencoded、multipart/form-data、application/json、text/xML等。
6.什么是Http協(xié)議無狀態(tài)協(xié)議?怎么解決HTTP協(xié)議無狀態(tài)協(xié)議
無狀態(tài)是指協(xié)議對于事務處理沒有記憶能力,服務器不知道客戶端是什么狀態(tài)。即我們給服務器發(fā)送 HTTP 請求之后,服務器根據(jù)請求,會給我們發(fā)送數(shù)據(jù)過來,但是,發(fā)送完,不會記錄任何信息。HTTP 是一個無狀態(tài)協(xié)議,這意味著每個請求都是獨立的,Keep-Alive 沒能改變這個結果。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數(shù)據(jù)量增大。另一方面,在服務器不需要先前信息時它的應答就較快。HTTP 協(xié)議這種特性有優(yōu)點也有缺點,優(yōu)點在于解放了服務器,每一次請求“點到為止”不會造成不必要連接占用,缺點在于每次請求會傳輸大量重復的內(nèi)容信息??蛻舳伺c服務器進行動態(tài)交互的 Web 應用程序出現(xiàn)之后,HTTP 無狀態(tài)的特性嚴重阻礙了這些應用程序的實現(xiàn),畢竟交互是需要承前啟后的,簡單的購物車程序也要知道用戶到底在之前選擇了什么商品。于是,兩種用于保持 HTTP 連接狀態(tài)的技術就應運而生了,一個是 Cookie,而另一個則是 Session。
7.cookie和session的區(qū)別
cookie數(shù)據(jù)存放在客戶的瀏覽器上,session數(shù)據(jù)放在服務器上
cookie不是很安全,別人可以分析存放在本地的cookie并進行cookie欺騙,考慮到安全應當使用session
session會在一定時間內(nèi)保存在服務器上。當訪問增多,會比較占用你服務器的性能,考慮到減輕服務器性能方面應當使用cookie
單個cookie保存的數(shù)據(jù)不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie可以將登陸信息等重要信息存放為session;其他信息需要保存,可以放在cookie
8.什么是DNS?
DNS 是域名系統(tǒng) (Domain Name System),DNS是用來做域名解析的,它會在你上網(wǎng)輸入網(wǎng)址后,把它轉換成IP,然后去訪問對方服務器;沒有它,你想上百度就要記住百度的IP,但有了DNS的處理,你只需要記住對應網(wǎng)站的域名,即網(wǎng)址就可以了。
9.請問你們公司是如何做接口測試的?
接口測試實際跟一般測試不同就是測試用例的設計部分。
①獲取接口規(guī)范。
②設計接口測試功能用例(主要從用戶角度出發(fā)看接口能否實現(xiàn)業(yè)務需求,用例設計就是黑盒用例那一套)。
③各種入?yún)Ⅱ炞C(正常情況,異常情況包括輸入?yún)?shù)個數(shù)不對,類型不對,可選/必選,還有考慮參數(shù)有互斥或關聯(lián)的情況)。
④接口返回值各種驗證(符合接口文檔需求)
⑤了解接口實現(xiàn)邏輯,實現(xiàn)邏輯覆蓋(語句/條件/分支/判定/…)
⑥接口能并發(fā)執(zhí)行嗎、安全嗎,性能滿足要求嗎?
⑦采用工具或者自寫代碼來驗證。
⑧發(fā)現(xiàn)問題跟功能測試一樣,該報bug報bug,該跟蹤狀態(tài)的跟蹤狀態(tài)。
10.怎么設計接口測試用例?
通常,設計接口測試用例需要考慮以下幾個方面:
①是否滿足前提條件
有些接口需要滿足前提,才可成功獲取數(shù)據(jù)。常見的,需要登錄Token
逆向用例:針對是否滿足前置條件(假設為n個條件),設計0~n條用例
②是否攜帶默認值參數(shù)
正向用例:帶默認值的參數(shù)都不填寫、不傳參,必填參數(shù)都填寫正確且存在的“常規(guī)”值,其他不填寫,設計1條用例
③業(yè)務規(guī)則、功能需求
這里根據(jù)時間情況,結合接口參數(shù)說明,可能需要設計N條正向用例和逆向用例
④參數(shù)是否必填
逆向用例:針對每個必填參數(shù),都設計1條參數(shù)值為空的逆向用例
⑤參數(shù)之間是否存在關聯(lián)
有些參數(shù)彼此之間存在相互制約的關系
⑥參數(shù)數(shù)據(jù)類型限制
逆向用例:針對每個參數(shù)都設計1條參數(shù)值類型不符的逆向用例
⑦參數(shù)數(shù)據(jù)類型自身的數(shù)據(jù)范圍值限制
正向用例:針對所有參數(shù),設計1條每個參數(shù)的參數(shù)值在數(shù)據(jù)范圍內(nèi)為最大值的正向用例
11.平常用什么工具測接口的?
常用http協(xié)議接口測試工具,如:postman、fiddler、jmeter;webService接口用SoapUI、jmeter等。
12.沒有接口文檔,如果做接口測試?
本題主要考情商,通俗來說就是忽悠能力,先唬住面試官了再說,進去了也是瞎測測,隨時做好背鍋的準備,當然,你肯定不能回答面試官不測(心理mmp,臉上笑嘻嘻),接下來就是扯犢子時間
用抓包工具把接口抓取處理,然后針對性進行測試;接口中字段信息不清楚的,找時間集中尋求開發(fā)解答。(常用抓包工具Fiddler、Charles等)
13.在手工接口測試或者自動化接口測試的過程中,上下游接口有數(shù)據(jù)依賴如何處理?
用一個全局變量來處理依賴的數(shù)據(jù),比如登錄后返回token,其它接口都需要這個token,那就用全局變量來傳token參數(shù)。
14.依賴于第三方數(shù)據(jù)的接口如何進行測試?
mock
接著面試官會問你,如果mock的,然后你就順著坑繼續(xù)挖,搭建mock服務。
15.接口測試中,依賴登錄狀態(tài)的接口如何測試?
依賴登錄狀態(tài)的接口的本質(zhì)上是在每次發(fā)送請求時需要帶上session或者cookie才能發(fā)送成功,在構建POST請求時添加必要的session或者cookie
16.如何模擬弱網(wǎng)做測試?
Fiddler和charles都可以模擬弱網(wǎng)測試,平常說的模擬丟包,也是模擬弱網(wǎng)測試。
17.你平常做接口測試的過程中發(fā)現(xiàn)過哪些bug?
面試官出這個題,主要是想知道你是不是真的做過接口測試,畢竟現(xiàn)在很多小伙伴簡歷經(jīng)過包裝(不包裝連面試機會都沒有,沒辦法,為了生存,能理解)
常規(guī)錯誤,接口沒實現(xiàn),沒按約定返回結果,邊界值處理出錯等。
輸入異常值(空值、特殊字符、超過約定長度等),接口拋錯,沒做封裝處理;
輸入錯誤的參數(shù)、多輸入、少輸入?yún)?shù),接口可能出現(xiàn)的錯誤;
安全性問題,如明文傳輸、返回結果含有敏感信息,沒對用戶身份信息做校驗,沒做惡意請求攔截等;
性能問題,如接口并發(fā)插入多條相同操作,響應時間過長,接口壓測出現(xiàn)瓶頸等;
18.當一個接口出現(xiàn)異常時候,你是如何分析異常的?
先抓包,用fiddler(charles)工具抓包,或者瀏覽器上F12調(diào)試工具;APP上的話,那就用Fiddler做代理,通過手機設置代理去看請求和返回報文;
查看后端日志,如Linux系統(tǒng)通過xhell連上服務器,查看接口日志,查看是否有報錯信息(命令:tail -f 日志文件);
19.如何分析一個bug是前端還是后端的?
平常提bug的時候,前端開發(fā)和后端開發(fā)總是扯皮,不承認是對方的bug。
這種情況很容易判斷,先抓包看請求報文,對著接口文檔,看請求報文有沒問題,有問題就是前端發(fā)的數(shù)據(jù)不對;
請求報文沒問題,那就看返回報文,返回的數(shù)據(jù)不對,那就是后端開發(fā)的問題咯。
20.你們做接口測試自動化嗎?
現(xiàn)在針對大量應用,普遍推崇做接口測試自動化,維護成本低、收益高。常用的工具有許多,如Jmeter、Robot Framework、pytest等。
21.列出幾個JMeter監(jiān)聽器?
一些JMeter監(jiān)聽器是:
集合報告
匯總報告
查看結果樹
用表格查看結果
圖形結果
BeanShell Listener
摘要報告等
22.在python中進行數(shù)據(jù)驅(qū)動測試
在unittest中,沒有自帶的數(shù)據(jù)驅(qū)動,我們得借助ddt來實現(xiàn),首先,我們得在python運行環(huán)境中安裝ddt,用下列命令安裝
pip install ddt
另外一個測試框架pytest,它自帶數(shù)據(jù)驅(qū)動實現(xiàn),是通過@pytest.mark.parametrize(argnames,argvalues) 來實現(xiàn)參數(shù)化的。
也可以根據(jù)自己需求用python實現(xiàn)數(shù)據(jù)的讀取和驅(qū)動。
23.接口自動化中的關聯(lián)怎么處理?
把上一個請求返回的結果傳入到下一個請求的參數(shù)中,將請求的結果反射到一個類屬性(使用setattr()函數(shù)),下一個請求去調(diào)用這個類屬性
24.自動化測試怎么校驗結果?
斷言 ,預期結果與實際結果對比
數(shù)據(jù)庫校驗,根據(jù)測試場景來查詢數(shù)據(jù)庫里的數(shù)據(jù)和請求之前的數(shù)據(jù)進行比對
25.自動化使用的測試框架是什么?簡述自動化框架的設計、維護
測試框架:python+unittest+requests+ddt+openpyxl+pymysql+logging
python:入門簡單,語法簡潔
unittest :定義一個測試用例類,具體的方法來維護測試用例的生命周期,測試場景行為,測試用例 前置場景,行為,期望結果,實際結果,斷言方法,Setup teardown方法
requests:接口調(diào)用 ,支持http請求的庫,API 簡潔,提供不同的http請求方法,支持session,cookies,
ddt :數(shù)據(jù)驅(qū)動,ddt 類裝飾器,data 測試方法裝飾器 unpack解包可迭代的數(shù)據(jù)類型
普通用戶,數(shù)據(jù)庫,配置文件—(基礎數(shù)據(jù))
openpyxl:數(shù)據(jù)管理 excel管理數(shù)據(jù),使用openpyxl模塊來進行excel數(shù)據(jù)的讀和寫(excle,csv, json, yaML, txt都可以管理測試數(shù)據(jù))
pymysql:數(shù)據(jù)庫交互,數(shù)據(jù)校驗
eval,json:數(shù)據(jù)格式的轉換 Eval將python支持的格式轉換成對應的格式
logging:日志處理, 統(tǒng)一日志輸出格式,渠道,級別,執(zhí)行結果的記錄,便于定位問題
jenkins:持續(xù)集成
2/框架設計思路:數(shù)據(jù)驅(qū)動+結構分層(可讀性,可維護性,可擴展性)
數(shù)據(jù)驅(qū)動:將維護數(shù)據(jù)與代碼分離,接口調(diào)用行為一致,針對不同的參數(shù)組合驅(qū)動不同的測試場景,減少代碼冗余
結構分層:數(shù)據(jù)層+用例層+邏輯層
數(shù)據(jù)層:測試數(shù)據(jù)的支撐 data.xls
用例層:用例的執(zhí)行 test_register.py test_recharge.py
邏輯層:公用的方法的封裝與提取 doexcle.py do_mysql.py http_requests.py logger.py等模塊
3/框架設計步驟:
準備測試數(shù)據(jù):EXCEL表準備測試用例—excel數(shù)據(jù)的讀取—參數(shù)值的替換
發(fā)起請求:請求方法(get/post方法進行封裝—URL的拼接(不同—參數(shù)轉化為字典
拿到請求的返回值:解析返回值code,status,msg信息
斷言
好處:
1、自動化測試用例和手工測試用例的完美結合,減少重復工作
2、配置靈活,可以自主切換測試環(huán)境,執(zhí)行測試用例
3、常用功能進行封裝,邏輯清晰,易于維護
4、統(tǒng)一執(zhí)行入口,管理測試用例集:
run.py模塊通過模糊查找來選擇需要執(zhí)行的測試用例
5、持續(xù)集成,定時構建,快速反饋
26.具體的在這個項目中自動化怎么應用到實際的?
對自動化結果的分析完成所有的自動化測試框架的設計和實現(xiàn)后,進行接口測試,然后集成到jenkins,配置定時執(zhí)行,生成htML報表,查看測試通過率,查看接口的功能
每次發(fā)版時,進行回歸測試,新功能開發(fā)未提測前。
--------?THE END?--------
