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