德瑪作為一個已經作業有10年經驗的測驗工程師,其間也輾轉了幾個大的互聯網公司,雖然確實缺少了一些穩定性,但同時也積累了一些面試的經驗,不才分享一些給大家,那么主要是針對測驗工程師的一些總結,對于其他的工種,我可能會在別的文章中去總結一些面試技巧,本文會著重于測驗工程師的面經,
測驗的面試重點分為兩大部分:技術,專案
擴充一下:技術的一些注意點,專案上的一些處理方式(有些還會有一些溝通上的小技巧),可能不會寫的特別詳細,但點我都會點到,后續會再繼續補充(近3萬字的長文預警,希望能幫助到技術友)
那么直接上貨,希望能幫助到各位同行都可以找到滿意的作業,共勉之!
一、黑盒測驗方法(可能會問等價類的分類,等價類和邊界值是最重要的)
1.等價類劃分:
有效等價類:對于程式規格說明來說,是合理的,有意義的輸入資料構成的集合
無效等價類:對于程式規格說明來說,是不合理的,無意義的輸入資料構成的集合
2.邊界值分析方法
3、因果圖方法
4、正交實驗設計方法
5、功能圖分析方法
6、錯誤推測法
7、需求檔案轉化法
8、隨機測驗
9、物件屬性分析法
二、白盒測驗方法(可以選擇性記憶....不知道會不會問)
1.陳述句覆寫:就是設計若干個測驗用例,運行被測程式,使得每一可執行陳述句至少執行一次,
2.判定覆寫:使設計的測驗用例保證程式中每個判斷的每個取值分支至少經歷一次,
3.條件覆寫:條件覆寫是指選擇足夠的測驗用例,使得運行這些測驗用例時,判定中每個條件的所有可能結果至少出現一次,但未必能覆寫全部分支
4.判定條件覆寫:判定-條件覆寫就是設計足夠的測驗用例,使得判斷中每個條件的所有可能取值至少執行一次,同時每個判斷的所有可能判斷結果至少執行,即要求各個判斷的所有可能的條件取值組合至少執行一次,
5.條件組合覆寫:在白盒測驗法中,選擇足夠的測驗用例,使所有判定中各條件判斷結果的所有組合至少出現一次,滿足這種覆寫標準成為條件組合覆寫,
6.路徑覆寫:是每條可能執行到的路徑至少執行一次,
補充:
(1)陳述句覆寫在所有的測驗方法中是一種最弱的覆寫,
(2)判定覆寫和條件覆寫比陳述句覆寫強,滿足判定/條件覆寫標準的測驗用例一定也滿足判定覆寫、條件覆寫和陳述句覆寫
(3)路徑覆寫也是一種比較強的覆寫,但未必考慮判定條件結果的組合,并不能代替條件覆寫和條件組合覆寫,
三、TCP/IP分層協議(每層的協議要注意)
1.鏈路層(資料鏈路層/網路介面層):包括作業系統中的設備驅動程式、計算機中對應的網路介面卡
2.網路層(互聯網層):處理分組在網路中的活動,比如分組的選路,
3.運輸層:主要為兩臺主機上的應用提供端到端的通信,
4.應用層:負責處理特定的應用程式細節,
四、TCP和UDP的區別(網路上的知識點)
1、TCP面向連接(如打電話要先撥號建立連接);UDP是無連接的,即發送資料之前不需要建立連接
2、TCP提供可靠的服務,也就是說,通過TCP連接傳送的資料,無差錯,不丟失,不重復,且按序到達;UDP盡最大努力交付,即不保證可靠交付
3、TCP面向位元組流,實際上是TCP把資料看成一連串無結構的位元組流;UDP是面向報文的
UDP沒有擁塞控制,因此網路出現擁塞不會使源主機的發送速率降低(對實時應用很有用,如IP電話,實時視頻會議等)
4、每一條TCP連接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的互動通信
5、TCP首部開銷20位元組;UDP的首部開銷小,只有8個位元組
6、TCP的邏輯通信信道是全雙工的可靠信道,UDP則是不可靠信道
五、TCP/IP三次握手,四次揮手(常問項)
第一次握手(SYN=1,seq=x)
客戶端發送一個TCP的SYN標志位置1的包,指明客戶端打算連接的服務器的埠,以及初始序號X,保存在包頭的序列號(Sequence Number)欄位里,
第二次握手(SYN=1,ACK=1,seq=y,ACKnum=x+1)
服務器發回確認包(ACK)應答,即SYN標志位和ACK標志位均為1,服務器端選擇自己的ISN序列號,放在seq域里,同時將確認序號(Acknowledgement Number)設定為客戶的ISN加1,即X+1,發送完畢后,服務器端進入SYN_RCVD狀態,
第三次握手(ACK=1,ACKnum=y+1)
客戶端再次發送確認包(ACK),SYN標志位為0,ACK標志位為1,并且把服務器發來ACK的序號欄位+1,放在確定欄位中發送給對方,并且在資料段放寫ISN的+1,
發送完畢后,客戶端進入ESTABLISHED狀態,當服務器端收到這個包時,也進入ESTABLISHED狀態,TCP握手結束,TCP連接建立完成
我的理解....:
A問B:你聽到了么,發確認資訊
B回答A:聽到了,告訴A它能接收到A的訊息
A再回B:我能接收到你的訊息,再發一次確認 ,然后建立連接
四次揮手:
第一次揮手(FIN=1,seq=x)
假設客戶端想要關閉連接,客戶端發送一個FIN標志位置為1的包,表示自己已經沒有資料可以發送了,但是仍然可以接收資料,
發送完畢之后,客戶端進入FIN_WAIT_1狀態,
第二次揮手(ACK=1,ACKnum=x+1)
服務器端確認客戶端的FIN包,發送一個確認包,表明自己接收到了客戶端關閉連接的請求,但還沒有準備好關閉連接,
發送完畢后,服務器端進入CLOSE_WAIT狀態,客戶端接收到這個確認包之后進入FIN_WAIT_2狀態,等待服務器端關閉連接,
第三次揮手(FIN=1,seq=y)
服務器端準備好關閉連接時,向客戶端發送結束連接請求,FIN置為1,
發送完畢后,服務器端進入LAST_ACK狀態,等待來自客戶端的最后一個ACK
第四次揮手(ACK=1,ACKnum=y+1)
客戶端接收到來自服務器的端的關閉請求,發送一個確認包,并進入TIME_WAIT狀態,等待可能出現的要重傳的ACK包,
服務器端接收到這個確認包之后,關閉連接,進入CLOSED狀態,
客戶端等待了某個固定時間(兩個最大段生命周期,2MSL,2Maximum Segment Lifetime)之后,沒有收到服務器端的ACK,認為服務器端已經正常關閉連接,于是自己也關閉連接,進入CLOSED狀態,
為什么是三次,不是兩次或者四次(這個問題真的可能會被問到)
兩次握手并不能保證可靠性(B不確定A能收到自己的資訊),四次握手又浪費了效率
六、DNS(運行在UDP協議上,埠53)
概念:dns是一個域名系統,是萬維網上作為域名和IP地址相互映射的一個分布式資料庫,能夠使用戶更方便的訪問互聯網,而不用去記住能夠被機器直接讀取的IP數串
七、TestNG(這個我自己用過,感興趣也可以看看) testng傳參方式(parameter在testng.xml 或者通過dataprovider)
運行方式:1.Run as 2.testng.xml
按順序執行:preserve-order=true
忽略測驗:@Test(enable=false)
分組測驗:@Test(groups=..)
依賴測驗:@Test(dependsonmethods=...)
結果在oup-put,日志級別是verbose
并發運行用例:parallel=methods
八、appium(可以稍稍了解,和selenium異曲同工,有些點我覺得是UI自動化相通的)
特點:
1.跨平臺,native hybrid webview(H5)
2.跨設備,android iOS
3.跨app,可以在多個app之間互動
4.不依賴APP開源代碼(保留意見,android Uiautomator對H5的支持需要代碼支持,這里不細說)
5.支持Selenium WebDriver / Selenium Grid
6.跨語言,java python ruby nodejs
7.Open Source 原理: Android
九、linux常用命令(我覺得比較可能問的多的)
cd:切換目錄
當前目錄和上層目錄:./ ../
主目錄:~/
查看當前路徑:pwd
清屏:clear
退出當前命令:ctrl+c 徹底退出
軟鏈接:ln -s slink source
查找自己所在的終端資訊:who am i
查看當前誰在使用該主機:who
ls -l (也可以直接 ll ) :列出長資料串,包含檔案的屬性與權限資料等
ls -a :列出全部的檔案,連同隱藏檔案(開頭為.的檔案)一起列出來(常用)
find -name 檔案名 :找匹配的檔案名
mkdir :創建指定的名稱的目錄
cp -a file1 file2 :連同檔案的所有特性把檔案file1復制成檔案file2
cp file1 file2 file3 dir :把檔案file1、file2、file3復制到目錄dir中
mv file1 file2 file3 dir : 把檔案file1、file2、file3移動到目錄dir中
mv file1 file2 : 把檔案file1重命名為file2
rm -fr dir : 強制洗掉目錄dir中的所有檔案
ps -ef|grep java :找出所有java行程
kill -9 行程號 :徹底殺死某個行程
chmod 改變檔案的權限
語法:chmod [options] mode files
多數用三位八進制數字的形式來表示權限,第一位指定屬主的權限,第二位指定組權限,第三位指定其他用戶的權限,每位通過4(讀)、2(寫)、1(執行)三種數值的和來確定權限,如6(4+2)代表有讀寫權,7(4+2+1)有讀、寫和執行的權限
chmod u+x file :給file的屬主增加執行權限
vi :檔案名 #編輯方式查看,可修改
cat :檔案名 #顯示全部檔案內容
more :檔案名 #分頁顯示檔案內容
less :檔案名 #與 more 相似,更好的是可以往前翻頁
head :檔案名 #僅查看頭部,還可以指定行數
tail -f 20160921.logs :查看正在改變的日志檔案
tail -3000 catalina.out:查看倒數前3000行的資料
history:查看用過的命令串列
df -hl:查看磁盤使用空間
which :只能查可執行檔案
whereis :只能查二進制檔案、說明檔案,源檔案等
du :顯示目錄或檔案的大小
df :顯示每個<檔案>所在的檔案系統的資訊,默認是顯示所有檔案系統
df 命令獲得真正的檔案系統資料,而 du 命令只查看檔案系統的部分情況
bash shell 的內置命令let 可以進行整型數的數學運算
free:顯示系統當前記憶體的使用情況,包括已用記憶體、可用記憶體和交換記憶體的情況
top:顯示當前系統中占用資源最多的一些行程
netstat -anp|grep port:查看某埠是否被占用
chown -R:更改某個檔案或目錄的屬主和屬組
Shift + PageUp:翻頁
清空檔案:echo "" > filename 或者cat /dev/null > a.txt 或者>a.txt
Linux統計檔案中出現的次數:
(1) 單個字串:grep -o targetstr filename | wc -l
多個字串:grep -o “targetstr_1\targetstr_2”filename | wc -l
(2) awk '{s+=gsub(/targetStr/,"&")}END{print s}' filename
Linux查找某個檔案中的某個詞:
grep ‘test’a,b,c 在檔案a,b,c中尋找test這個詞
grep -r 'test' . #在當前目錄中找test這個詞
grep -r 'test' example #在example目錄中找test這個詞
wc -l filename: 查看檔案里有多少行
uniq testfile: 洗掉一個檔案中重復都是行
sort testfile1 | uniq:洗掉重復之后進行排序(次數的)
十、Mysql(亂七八糟陳述句不寫了,寫點我被問到的)
- 授權陳述句
grant select, insert, update, delete on testdb.* to common_user@'%'
- SQL 常見查詢陳述句撰寫(此處僅舉例常見的查詢陳述句,如有更多坑,希望補充)
查詢所有學生的數學成績,顯示學生姓名 name, 分數, 由高到低,
SELECT a.name, b.score FROM student a, grade b WHERE a.id = b.id AND kemu = '數學' ORDER BY score DESC;
統計每個學生的總成績(由于學生可能有重復名字),顯示欄位:學生 id,姓名,總成績,
SELECT a.id, a.name, c.sum_score from student a, (SELECT b.id, sum(b.score) as sum_score FROM grade b GROUP BY id) c WHERE a.id = c.id ORDER BY sum_score DESC;
- 慢查詢是什么意思?
開啟慢查詢日志,可以讓 MySQL 記錄下查詢超過指定時間的陳述句,通過定位分析性能的瓶頸,才能更好的優化資料庫系統的性能,
- 導致資料庫性能差的可能原因有哪些?
硬體環境問題,如磁盤IO
查詢陳述句問題,如join、子查詢、沒建索引
索引失效,建了索引,查詢的時候沒用上
查詢關聯了太多的join
服務器關聯快取,執行緒數等
表中存在冗余欄位,在生成笛卡爾積時耗費多余的時間
11、你們公司是不是敏捷開發?介紹一下敏捷開發?
- 是,敏捷快速迭代、多版本同時迭代
- 敏捷開發屬于增量式開發,對于需求范圍不明確、需求變更較多的專案而言可以很大程度上回應和擁抱變化、主張簡單、擁抱變化、可持續性、遞增的變化、高質量的作業、快速反饋、軟體是你的主要目標
12、測驗用例設計
登陸模塊
- 功能用例
- 兼容性(app版本,作業系統版本,不同移動設備解析度)
- 性能上(單用戶的回應時間,高并發,長時間多用戶登陸)
- 安全性(加密,SQL注入(通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字串,最終達到欺騙服務器執行惡意的SQL命令),腳本攻擊,多設備登陸的互斥)
- 弱網(android 在fiddler下,ios通過自身的status ,下一章寫)
- UI測驗
- 可用性,易用性(全鍵盤輸入,enter,tab)
- 本地化(多語言)
還有很多,測驗紙杯,電梯,購物車,支付功能(這都是我面試遇到過的)很多別的也可以考慮這些方面,反正都憑自身經驗吧~~
13、弱網測驗
- 弱網測驗的思路
弱網功能測驗:2G/3G/4G、高延時、高丟包
無網狀態測驗:斷網功能測驗、本地資料存盤
用戶體驗關注:回應時間、頁面呈現&超時文案&超時重連、安全及大流量風險
網路切換測驗:Wifi>>4G/3G/2G>>無網多狀態切換
- 如何模擬弱網測驗?
fiddler和charles都可以模擬弱網測驗,平常說的模擬丟包,也是模擬弱網測驗
- 網路切換測驗
這部分主要是進行幾個不同網路場景的切換,包括:
1.wifi-2G/3G/4G
2.wifi-無網
3.2G/3G/4G-wifi
4.2G/3G/4G-無網
5.無網-2G/3G/4G
6.無網-wifi等
主要關注頁面的顯示與互動,尤其是弱網到wifi,wifi到弱網的情況,是否會有頁面的crash以及顯示的錯亂、session是否一致、請求堆積處理等,
- 用戶體驗關注
1.頁面回應時間是否可以接受,關注包括熱啟動、冷啟動時間、頁面切換、前后臺切換、首字時間,首屏時間等
2.頁面呈現是否完成一致
3.超時文案是否符合定義,例外資訊是否顯示正常
4.是否有超時重連
5.全角度:是否會發生dns劫持、登陸ip更換頻繁、單點登陸例外等
6.大流量事件風險:是否會在弱網下進行更新apk包、下載檔案等大流量動作
14、Fiddler
打斷點和AutoResponder的區別,注意修改資料后請求超時導致客戶端不做請求
1、打斷點,是阻塞了請求,一直沒有結果回傳,請求將在執行緒中一直存在,直到超時被踢出來,
2、AutoResponder回傳404/502,這種情況是有結果回傳的,代表請求也結束了,不會在執行緒中一直存在
fiddler抓https包
(1)原理同charles,首先:給fiddler安裝certmaker插件(然后重啟)
(2)Tools->Fiddler Options->HTTPS ,Actions-> Trust Root Certificate,彈框后安裝CA證書
安裝成功后可以通過Actions—>open windows certificate Manager 查看安裝的證書
(3) 手機安裝Fiddler證書,打開手機瀏覽器,在瀏覽器地址輸入代理服務器IP和埠,點擊之后安裝證書即可
15、APP crash
- crash常見的原因(空指標,記憶體泄漏,陣列越界,呼叫高版本API)
設備碎片化:由于設備極具多樣性,App在不同的設備上可能有表現不同,
帶寬限制:帶寬不佳的網路對App所需的快速回應時間可能不夠,
網路的變化:不同網路間的切換可能會影響App的穩定性,
記憶體管理:可用記憶體過低,或非授權的記憶體位置的使用可能會導致App失敗,
用戶過多:連接數量過多可能會導致App崩潰,
代碼錯誤:沒有經過測驗的新功能,可能會導致App在生產環境中失敗,
(可能是java的UnChecked例外發生時,由于沒有相應的try…catch處理該例外物件,所以Java運行環境將會終止,程式將退出)
第三方服務:廣告或彈出螢屏可能會導致App崩潰,
- App崩潰的測驗用例設計
驗證在有不同的螢屏解析度,作業系統和運營商的多個設備上的App行為,
用新發布的作業系統版本驗證App的行為,
驗證在如隧道,電梯等網路質量突然改變的環境中的App行為,
通過手動網路從蜂窩更改到Wi-Fi ,或反過來,驗證App行為,
驗證在沒有網路的環境中的App行為,
驗證來電/短信和設備特定的警報(如警報和通知)時的App行為,
通過改變設備的方向,以不同的視圖模式,驗證App行為,
驗證設備記憶體不足時的App行為,
通過用測驗工具施加載荷驗證App行為,
16、Git(命令為主)
git clone 拷貝一個Git倉庫到本地
git status 查看倉庫狀態
git diff * 查看X檔案修改了那些內容
git log 查看歷史記錄
git reset –hard HEAD^ 回退到上一個版本
git reset --hard HEAD~第幾個 如果想回退到第3個版本,使用git reset –hard HEAD~3
git branch 查看本地所有的分支
git branch -a 查看遠程所有的分支
git branch name 創建分支
git branch –d dev 洗掉dev分支
git checkout –b dev 創建dev分支 并切換到dev分支上
git merge dev 在當前分支上合并dev分支代
提交代碼三部曲哈哈哈:
git add * 把x檔案添加到暫存區去
git commit –m "*" 提交檔案 –m 后面的是注釋
git push
17、Monkey(命令用到查就行了這個,要知道-p是指定包)
1.Monkey程式由Android系統自帶,使用Java語言寫成,在Android檔案系統中的存放路徑是:/sdk/sdk/tools/lib/monkey.jar
2.Monkey.jar程式是由一個名為“monkey”的Shell腳本來啟動執行,shell腳本在Android檔案系統中的存放路徑是:/sdk/sdk/tools/bin/monkey
- adb shell monkey {+命令引數} Monkey 測驗出現錯誤后,一般的分析步驟(我以前被問到過,當時一臉懵逼(′⊙ω⊙`)) 看Monkey的日志 (注意第一個swith以及例外資訊等)
- 程式無回應的問題: 在日志中搜索 “ANR”
- 崩潰問題:在日志中搜索 “Exception” (如果出現空指標, NullPointerException) 肯定是有bug
18、Android和IOS測驗區別
- Android長按home鍵呼出應用串列和切換應用,然后右滑則終止應用;
- 多解析度測驗,Android端20多種,ios較少;
- 手機作業系統,Android較多,ios較少且不能降級,只能單向升級;新的ios系統中的資源庫不能完全兼容低版本中的ios系統中的應用,低版本ios系統中的應用呼叫了新的資源庫,會直接導致閃退(Crash);
- 操作習慣:Android,Back鍵是否被重寫,測驗點擊Back鍵后的反饋是否正確;應用資料從記憶體移動到SD卡后能否正常運行等;
- push測驗:Android:點擊home鍵,程式后臺運行時,此時接收到push,點擊后喚醒應用,此時是否可以正確跳轉;ios,點擊home鍵關閉程式和螢屏鎖屏的情況(紅點的顯示);
- 安裝卸載測驗:Android的下載和安裝的平臺和工具和渠道比較多,ios主要有app store,iTunes和testflight下載;
- 升級測驗:可以被升級的必要條件:新舊版本具有相同的簽名;新舊版本具有相同的包名;有一個標示符區分新舊版本(如版本號),對于Android若有內置的應用需檢查升級之后內置檔案是否匹配(如內置的輸入法)
19、IOS和android日志抓取
iOS:
- 通過iTunes Connect(Manage Your Applications - View Details - Crash Reports)獲取用戶的crash日志
- 通過Xcode從你的設備上獲得崩潰日志
- 自己在程式中添加崩潰捕捉代碼,如果應用集成第三方SDK,如百度統計
Android:
- 通過集成第三方SDK,如百度統計、友盟統計等
- 發版時使用加固工具,他們也會收集錯誤日志,如360加固
- 在程式中添加程式例外崩潰的捕捉代碼,保存到本地檔案中
20、SQL注入(想了半天,這個得列一下,安全雖然我們不做,但問基本都是問這東西,看懂這段就夠了,要是問怎么防止就說對用戶輸入進行校驗,不要動態拼接SQL)
select * from users where username='' or 1=1#' and password=md5('')
等價于
select * from users where username='' or 1=1
SQL注入采用的' OR 1=1 # 是什么意思呢?
最后一個#號有什么意義呢?
SELECT * FROM test WHERE name='' OR 1=1 #' AND age='20'
這后面寫的 #' 是什么意思呢?
解釋:可以注釋掉后面的一行SQL代碼
相當于去掉了一個where條件
MySQL 注釋, 過濾掉后面的SQL陳述句,使其不起作用
因為1=1永遠是都是成立的,即where子句總是為真,將該sql進一步簡化之后,等價于如下select陳述句:
select * from users 沒錯,該sql陳述句的作用是檢索users表中的所有欄位
馬上就要到金九銀十得面試旺季,大家都希望趁著這個機會找到一個心儀的作業,但是不管怎么樣,不論是什么樣的大小面試,要想不被面試官虐的不要不要的,只有刷爆面試題題做好全面的準備,當然除了這個還需要在平時把自己的基礎打扎實,這樣不論面試官怎么樣一個知識點里往死里鑿,你也能應付如流啊~
最后感謝每一個認真閱讀我文章的人,作為一位過來人也是希望大家少走一些彎路,在這里我給大家分享一些自動化測驗的學習資源,如果你用得到的話可以直接拿走,希望能給你前進的路上帶來幫助,(包括Python編程、WEB自動化測驗、app自動化測驗、介面自動化測驗、測驗框架、持續集成、自動化測驗開發、性能測驗、安全測驗、大廠面試真題、簡歷模板等等、當然還有一些測驗基礎、工具、app測驗、介面測驗、linux、mysql資料庫等基礎知識),相信能使你更好的進步!這些學習資料我都放在我的測驗學習交流裙:1033482984 里面了,同時還有幾千個行業大佬相互進行技術交流、經驗分享,如果你也感興趣,那么期待你的加入,
原文轉載于:公眾號:軟體測驗小dao
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/555589.html
標籤:其他
上一篇:ModelBox實戰開發:RK3568實作攝像頭虛擬背景
下一篇:返回列表
