一、自我介紹(1~2分鐘,人家考察的點是對你這個人的第一印象,所以你語言表達要流暢,不卡頓)
面試官,你好,我叫***,來自**,2016年來到上海發展,這幾年當中,一直從事軟件測試工作,迄今為止,也有5年的一個工作經驗了,在工作中,我自認為我是一個比較細心,責任感非常強的一個人,上家公司的領導對我還算比較滿意,這幾年的測試工作,對我來說也有很大的進步,我熟悉軟件測試的基本理論,熟練掌握linux,mysql數據庫,jmeter接口測試,等一些相關的測試軟件,上家公司做的項目有涉及到web端跟APP端,主要是做了* * * ***項目,我很開心今天能夠來到貴公司面試,如果有幸能夠通過今天的面試,和您成為同事,我會感覺非常榮幸,以上是我個人簡單的一個自我介紹,您可以接著問下一個問題。
(2-3年工作經驗的參考以下自我介紹)
面試官好,我叫***,來自**,自畢業以后一直從事軟件測試工作,雖然我工作年限不是很多,但是我個人覺得我還是一個比較踏實認真的人,這兩年的工作經驗,包括我的實習經驗都給了我很大的成長,我也掌握軟件測試的流程跟方法,平時工作會寫測試用例啊,做功能測試跟接口測試,同時我也掌握缺陷管理工具的使用,還有linux操作系統的常用命令,Jmeter接口測試工具的使用,以及數據庫的增刪改查,感謝面試官給我面試的機會,如果今天我能有機會通過貴公司的面試,我也會好好珍惜這份工作,那么以上就是我個人的一個簡單介紹,您可以接著問下一個問題
二、你平時工作是如何開展的?(你們的項目流程是怎么樣的/或者是測試工作流程是怎樣的)
你好面試官,我們測試人員的工作是從接到需求書開始的,拿到需求文檔以后,項目經理組織我們召開需求評審會議,這個會議中我們把需求不完整、我們測試跟開發理解不一致的地方進行討論,給出一個最終的解決方案,完了以后我們就去寫測試用例,開發就去寫代碼去了,差不多寫好以后我們就等開發提測,部署一下測試環境后簡單的冒個煙,然后就進行全面的第一輪系統性測試,在這個測試過程中,我們會發現大量的缺陷,那我們就把缺陷提交到bugzilla(缺陷管理工具可以改成別的)里面,然后第一輪測試以后呢,我們就測第二輪,同樣的,也部署下測試環境的包,先把第一輪發現的缺陷驗證一下,然后進行第二輪的全量回歸,如果還有缺陷就繼續提交缺陷,接著第三輪,第四輪這樣子,如果沒有了,我們就叫產品來做UAT測試,過了就點測試通過,寫下測試報告,等待發版上線,差不多就是這樣子一個流程。
這里一定要補充兩個點:
1、第一個預防缺陷,在時間允許的情況下,開發提測前去開發環境里面走一遭,多點點,不讓一些嚴重的缺陷流入測試環境,或者把自己寫的測試用例發給開發讓他們自測。
2、把UAT測試放在第一輪測試結束之后,為什么這么做呢,因為這個功能實現后產品沒有來U之前他也不知道做成什么樣子,我叫他提前來,萬一做的不符合要求,或者有什么點不完善,這個時間開發還有大量的時間去改,那如果我在發版之前U,萬一U出來個缺陷呢,開發也很不情愿,說沒有時間改啊之類的,那么放在第一輪測試之后,大家都會比較輕松
簡潔版(適用于實在是記不住的童鞋,根據這幾個點講哈)
1、需求會議評審
2、編寫測試用例,用例評審
3、開發提測后部署測試環境,冒煙測試
4、第一輪系統性測試,提交缺陷,跟蹤缺陷
5、第二輪回歸測試,驗證缺陷
6、UAT測試,編寫測試報告
三、測試環境你們自己維護嗎?(部署測試嗎?怎么部署的?linux常用的操作命令是什么)
你好面試官,測試環境我們自己維護的,開發提測后,我們會先把測試環境包的給做一個拷貝(備份),用到的命令是cp -r命令
然后開發會發給我們一個包,這個包像數據庫腳本一般是zip格式的,解壓是unzip命令,前端包,后端包是tar.gz,那么用到解壓命令就是tar -zxvf命令,然后我們把這個包替換到測試環境的路徑下,用到mv命令,替換好以后需要重啟服務,先看下之前的進程在不在,查看一下進程ps -ef | grep $USER ,殺掉之前的進程kill -9 ,然后重啟服務start.up(這里有些重啟命令不是這樣子的,每臺服務器可能不一樣,回答的時候你就說我們公司就是這么用的就可以了)
另外,我們修改配置文件magpie文件的時候,需要用到vi編輯器,vi打開這個文件,進入編輯模式修改好文件內容后,要么保存退出用到:wq命令,要么退出不保存用到:q!命令
除此之外,我們查看日志用到tail -f ,還有查看文件內容用cat啊 通過關鍵字去查看日志內容用 grep 關鍵字+文件名,那么我根據時間段去查詢的話呢就是sed -n '/2019-10-24 22:16:21/,/2019-10-24 22:16:59/p' all.log,等等
四、面試問,接口測試的重點在哪里?
回答思路(淺一點的):
1、這個問題很廣泛,咱們最好是舉例子說明,從對比功能測試跟接口測試的不同點去出發
你好面試官,我覺得接口測試的重點是這樣子的,我舉個例子說明一下,因為咱們功能都是在頁面上點嘛,有些下拉框就是直接選值,也沒有反例的情況,但是接口不同,接口是借助Jmeter工具,繞過前端,在腳本里面一般用JSON格式的字符串,一個key對應一個value值這樣子去填寫值,那么久比如有個字段是叫教育程度,它是一個選擇框,有初中、高中、大專、本科、研究生,那么頁面上我直接選擇就ok了,但是接口的話我就得根據接口填寫它對應的值,比如0-初中、1-高中、2-大專、3-本科、4-研究生,那么這個value值就是0-4的值,它有很多個反例,像非0-4的值,就5啊,小數啊、負數啊,重復值我給寫個0;0或者同時填寫0;1;2;3;4這幾個值會不會后臺攔截呢,還有中英文啊,非int類型的值,所以從這點可以看出,我覺得接口測試就要測一些內部邏輯的東西,反例跟功能相對比而言多一點,而且接口他能測出來頁面上測不出來的缺陷
場景:比如說我配置優惠券的時候,給這個優惠券配置一些規則,限制優惠券的使用地區,那么就有這兩個字段,一個是是否限制城市先(是或否),一個是城市列表,只有當限制城市為是的時候才展示城市列表,那么我通過頁面上去點的時候是實現不了限制城市為否,填寫城市列表的這種情況,但是接口這種場景是可以去測的,就是接口的入參city_limit,0-否;1-是,cityID就輸入一些城市代碼,那么我就把city_limit的值填寫為0,但是下面也傳cityID為00010000,假設是上海,那么運行這個的結果應該是報錯,后臺攔截的,如果后臺沒有攔截城市為否,又填寫城市ID的值的這種情況的話,就是一個Bug
五、你們工作中,抓包工具用什么?怎么定位前后端bug的?
web項目的話,一般工作中使用方式比較多的是使用瀏覽器自帶的F12抓包看接口請求。
如果是app客戶端之類的,一般采用fiddler等工具進行抓包接口。
不管哪種方式,目的都是通過查看接口,去定位分析屬于前端問題還是后端問題。
比如你在淘寶上邊購買了一件商品,并且成功支付,但是在我的訂單里面卻沒有記錄,你應該如何去分析定位這個問題?
首先需要搞明白的是這個場景的數據流調用的邏輯關系,不過這個問題比較簡單。
整體來說就是前端購買商品,支付成功,會把這條數據的商品信息加支付信息都落入數據庫中。
然后點擊我的訂單,會調后端接口,后端從數據庫取相關信息,然后前端渲染展示商品和支付信息。
搞明白這個場景的數據流轉就很容易定位分析這個bug了,可以使用抓包工具抓包這個我的訂單調后端的接口。
如果抓不到這個接口,就是前端沒有發出請求,顯然是前端問題。
如果有請求并且響應了,就查看這個接口響應信息,如果返回報錯了,則需要具體分析報錯內容。
這個時候既有可能是前端入參傳的不對,導致后端報錯。也有可能是前端傳對了,后端處理錯誤,需要具體分析是前端問題還是后端問題。
如果后端成功響應了且返回信息跟接口文檔定義的一致,那么大概率是前端展示的問題,這個時候需要找前端同事。
所以,前后端問題就是具體問題具體分析,我們最終的目的就是通過抓包協助開發定位問題,縮小定位的范圍值
另外一個例子:
1)訪問:http://39.108.136.60:8380/ningmengban/app/login/login.html
2)輸入登錄賬號(用戶名 / 密碼):[email protected] / 123456
3)點擊登錄,無任何反映(沒有提示也沒有跳轉)
從頁面交互看,輸入賬號,點擊登錄要么登錄成功進入系統,跳轉到系統其他頁面,要么登錄失敗給出錯誤提示,而現在沒有任何反應,這肯定是一個bug,但是這個bug到底是屬于前端bug還是后端,我們無從而知,但是我們可以順手打開瀏覽器調試器來分析定位一下。
打開控制臺,我們看到了控制臺并沒有js錯誤,但是有向后臺發起一個請求,同樣,此時還無法有效定位到問題到底發生在前端還是后端,但是可以截個圖,寫上自己的測試過程:
繼續打開“網絡”標簽,我們看到這個底下有一個500請求,根據請求中的關鍵字眼login我們斷定這個就是登錄接口,而500則說明是后端服務器內部異常,一般是由于后臺代碼執行中報錯導致的,所以截圖寫上我們的分析,到時候提bug附上這個截圖
結論:根據請求返回的狀態碼500,我們就能斷定這個bug是后臺代碼執行時候報錯導致的,提bug帶上上面的這個信息,開發人員就知道要去檢查登錄接口的代碼了,因此縮小了開發定位問題的范圍,保證了開發能在第一時間快速fix掉bug
這里可能面試官還會問你,如果抓包抓不到這個請求,也沒有后臺日志,那么你覺得,按鈕點不動的原因都有哪些?
1)最主要的是可能前端的代碼有問題,需要請開發小哥來幫忙檢查下代碼
2)還有可能是緩存造成的瀏覽器假死,需要把緩存清一下
3)另外就是防火墻是不是被攔截了
4)界面元素的問題,就是最外層div高度低于底層圖片高度,點擊圖片上的按鈕時出現偶發性點擊不動的現象,即點擊按鈕實際點擊的是底層的div靜態圖片,增加子元素的高度以及設置子元素有效。
六、Jmeter參數化的幾種方式是什么(具體不知道操作步驟的話可以看看CSDN上面的圖例)
1、用戶參數? ? 前置處理器 (PreProcessors) --? 用戶參數(User Parameters? 它每次的值都是變動的,變量
2、用戶自定義的變量? 用戶定義變量的所有數據只會初始化一次,不管你多少線程,循環多少次,它的值是不變的,只是在多個接口里面用到
3、csv文件參數化? (1)創建csv文件;(2)在線程組中添加并配置CSV Data Set Config ; (3)配置CSV Data Set Config;
(4)引用csv文件中的數據,找到需要傳遞參數的HTTP請求,將具體值改為變量引用,引用變量:${變量名},在察看結果樹中,察看變量引用的具體值
4、函數助手,用的比較少,可以簡單帶一下就成
正則表達式的用法(下游的入參需要用到上游的出參,但是這個參數又是個變量的情況下)
假設我新增配置一張優惠券,那么我就是新增,但是每新增一張就是一個新的活動ID,那么我需要去修改這個優惠券的時候,需要用戶這個活動ID,那么我就用正則表達式去提取變量,添加后置處理器-正則表達式提取器,寫入引用名稱,也就是ActivityID,正則表達式就是“ActivityID”:"(.+?)" 模板為$1$,匹配數字為1,然后執行腳本查看結果
斷言怎么添加:(設定運行結果是對是錯,包含什么內容)
線程組-響應斷言,把要測試的響應字段選為響應文本,模式匹配規則為包括,假設我優惠券新增成功以后的ActivityID是132開頭的,那就把要測試的模式里面寫入132
七、你知道jmeter是怎么連接數據庫的么?
1、首先要下載好myaql的JDBC驅動jar包,把它放在jmeter的lib目錄下
2、在測試計劃下添加驅動地址
3、選擇線程組-添加-配置原件-JDBC Connection Configuration
4、配置JDBC Connection Configuration? ,Database URL(數據庫的IP地址,端口、名稱),JDBC Driver Class(數據庫驅動),Username(用戶名),Password(密碼),連接好驗證一下是不是可以用就可以了
jmeter 操作數據庫
??操作數據庫基本有四個步驟:(1)導入mysql的jdbc的jar包 (2)創建數據庫的連接配置,線程組里添加配置元件-JDBC Connection Configuration (3)線程組里添加jdbc request,寫sql語句 (4)添加察看結果樹,點擊啟動按鈕,就能看到執行的SQL
九、如果面試問,你在這個版本的項目需求評審中,提出了哪些有效的意見?
回答:你好面試官,我記得當時這個版本的一次迭代中,新增了四個字段,叫做跳轉參數,并且它的要求是需要同步給數據中心,這個字段叫做param1、param2、param3、param4,然后是依次同步的,然后我就有個疑問,數據庫落表的話,如果我只填寫了param2跟param4,它是落表也是直接落到相對應的param2跟param4字段里面嗎?還是說我在1跟3不填的情況下,會把2跟4的值落入1跟3,內部的處理邏輯是怎么樣子的,因為之前遇到過這種問題
如果面試官追問,那最終是怎么處理的?
回答:最終就是如果在1跟3沒有填寫的情況下,就把2跟4的值默認落入1跟3,因為前面一個值無效,不處理第二個值,如果第二個值有效,就把第二個當成第一個值取處理,因為這個需求沒有明確說明,后來就是經過討論,要么四個值都為空,其中一個或兩個為空,無法保存該值,就不會有這個問題了
十、開發認為不是缺陷,你覺得是缺陷?(人家面試官考驗的問題在于這個bug最終有沒有解決,而是你處理問題的能力)
回答思路:你好面試官,這種問題很常見,我舉個簡單的例子來講,我發現有個缺陷就是需求要求這個字段是必填,我去測的時候確實也是必填,但是開發漏掉了一個*的標志,雖然不影響使用,但是就比如電話號碼這樣一個字段,有些用戶的習慣就是不想填入個人的隱私的問題,他第一眼看過去就是沒有*必填的標志,結果他沒有填寫,然后他提交的時候又提示他必填,客戶還得回去填寫一下,但是如果有或者標志,那他們可能填寫的時候就直接寫了對吧,因為這個事情,開發說需求里面沒有說要加*必填的標志,就不愿意改,然后我把我作為用戶的一個場景跟感受給開發說了以后人家就加上去了,我們經常因為這種很小很小的問題會有不同意見,但是沒關系,我們最終的目的是要解決問題,而不是扯別的,我會很心平氣和跟我們開發講,因為平時工作中,我還是幫他很大忙,就好比提測前,我去開發環境幫他測,大量的減少了缺陷的產生,我也經常收到開發買的小零食,這種問題我不會跟他發生很大的矛盾,就算實在有問題,那么我就只好請產品介入明確需求了
十一、Web端跟APP端的區別有哪些?
你好面試官,APP端web端還是有很多方面的區別的,比如說從兼容性方面來講,web端要測不同的瀏覽器,像谷歌、IE、火狐、360這些,還有windows系統,mac系統
APP端的話就是不同品牌的手機,還有不同配置的手機,還有不同手機尺寸的分辨率,還有不同的手機系統,例如安卓、IOS,還要測平板的
從安全性方面來講的話,web端密碼顯示成密文,瀏覽器上方的URL隱蔽性跟安全性有重要信息的轉碼,每次去訪問就會有cookie跟session
APP端密碼、cookie跟session跟web端是一樣,不一樣的是APP端有些比如通訊錄、短信、地址、微信這些需要去授權才能訪問
還有從網絡這方面,web端就是網線跟wifi嘛,APP端的話是出WIFI外,還有2G、3G、4G、5G、完全無網絡的狀態下,也是我們需要去做的一些弱網測試
另外就是一些APP專項測試,像安裝、更新升級、卸載、耗電量、內存、手機流量消耗等,大概就是這些!
十二、面試官可能會跟上以上問題引申出來的一個問題,那么cookie跟session區別跟聯系你知道嗎?(也是面試常問的)
cookie:存儲在本地瀏覽器中,session是存儲在服務器上的,可以存在數據庫,也可以存在redis,也可以存在服務端的本地文件中
cookie:時效性,需要在本地手動清理。session的失效,是在代碼的配置文件中設置的。
驗證登錄:cookie驗證登錄、session驗證登錄,一般是用token驗證
相對而言session比cookie安全一點。
聯系:sessions是以 key:value的形式出現的,那么 它的value 就會保存在本地cookie中
十四、壓測怎么做?
壓測前要明確壓測功能和壓測指標,一般需要確定的幾個問題:
固定接口參數進行壓測還是進行接口參數隨機化壓測?
要求支持多少并發數?
TPS(每秒鐘處理事務數)目標多少?響應時間要達到多少?
壓服務器名稱還是壓服務器IP,一般都是壓測指定的服務器
壓測結果查看
??運行完后,聚合報告會顯示壓測的結果。主要觀察Samples、Average、error、Throughput。
Samples:表示一共發出的請求數
Average:平均響應時間,默認情況下是單個Request的平均響應時間(ms)
Error%:測試出現的錯誤請求數量百分比。若出現錯誤就要看服務端的日志,配合開發查找定位原因
Throughput:簡稱tps,吞吐量,默認情況下表示每秒處理的請求數,也就是指服務器處理能力,tps越高說明服務器處理能力越好。
壓測結果的分析
有錯誤率同開發確認,確定是否允許錯誤的發生或者錯誤率允許在多大的范圍內;
Throughput吞吐量每秒請求的數大于并發數,則可以慢慢的往上面增加;若在壓測的機器性能很好的情況下,出現吞吐量小于并發數,說明并發數不能再增加了,可以慢慢的往下減,找到最佳的并發數;
壓測結束,·登陸相應的web服務器查看CPU等性能指標,進行數據的分析;
最大的tps:不斷的增加并發數,加到tps達到一定值開始出現下降,那么那個值就是最大的tps。
最大的并發數:最大的并發數和最大的tps是不同的概率,一般不斷增加并發數,達到一個值后,服務器出現請求超時,則可認為該值為最大的并發數。
壓測過程出現性能瓶頸,若壓力機任務管理器查看到的cpu、網絡和cpu都正常,未達到90%以上,則可以說明服務器有問題,壓力機沒有問題。
影響性能考慮點包括:數據庫、應用程序、中間件(tomact、Nginx)、網絡和操作系統等方面。