目錄
一.面試過程
1.自動化崗位要求 2.面試流程,面試類型 3.溝通技巧,不同級別要求
二.真實面試案例
1.一個輸入框的面試題(有人拿到高級崗位,有人連初級都沒拿到,為什么)
三.自我分析
1.積累的知識決定了初入社會的崗位 2.什么是好的簡歷 3.需要掌握的基本知識
四.技術基礎知識
1.常見測試理論 2.python語言常見問題 3.python常問算法 4.linux基本命令 5.計算機網絡 6.操作系統 7.數據庫相關 8.fiddler抓包工具 9.android系統相關工具 10.adb相關問題 11.monkey相關問題
五.自動化工具
1.Instrumentation 2.UIAutomator 3.Selendroid 4.Robotium 5.Appium 6.Selenium
六.自動化框架
1.Unittest框架 2.數據驅動DDT 3.行為驅動Lettuce 4.關鍵字驅動Robot Framework 5.測試報告管理 6.郵件服務管理
七.接口自動化
1.postman 2.python requests
八.持續集成(概念) 九.服務端性能測試 十.兼容性測試 十一.調試
正文
一.招聘要求 二.面試過程(筆試-技術-性格-薪資) 三.面試類型 四.問題類型 五.注意事項 六.高效溝通 七.崗位級別
軟件的生命周期:定義規划——需求分析——軟件設計——編碼——測試——維護
面試案例:一個輸入框的面試題(測試以下輸入框,你會測試哪些內容)
面試者A:左側頂部菜單——全部、圖片切換——右側頂部小工具——登陸功能——輸入框——底部鏈接
面試者B:確認題目:是僅測試輸入框,不考慮其他內容嗎? 回復:是的,僅測試輸入框
面試者B:大范圍的話測功能、兼容性、穩定性、性能、安全、接口、線上監控、自動化八方面;小范圍的話測功能、兼容性、安全三方面
如果時間允許,我想從各方面說一下考慮的內容:
關於功能:①常規:任意字符 ②非常規:有含義的字符串 ③邊界、空格、超長文本(±1個字符,如-1個字符並輸入中文)
關於兼容性:①用戶分布:機型、分辨率 ②瀏覽器 ③頁面布局、渲染,借助firebug調試
關於穩定性:①壓力下,搜索是否正常返回 ②多次輸入是否穩定
關於性能:①QPS-每秒處理請求數 ②點擊開始到完全加載,平均耗時 ③加載頁面大小、資源(js、css)數量
關於安全性:js注入、sql注入(輸入框輸入js代碼)
關於接口:①接口正確性 ②異常數據的容錯情況 ③非瀏覽器環境下(繞過頁面限制輸入)
關於線上監控:建立實時監控保障穩定性、降低影響
關於自動化:基於selenium實現UI自動化,用selenium調用工具模擬瀏覽器UA返回頁面,去做UI自動化。通過自動化可以例行回歸驗證,提高效率。
比如有自動化,可以在所以瀏覽器/手機上去做功能驗證,過程中同時截圖,再用python的圖像處理工具,對圖片與圖片之間進行對比,將異常圖像拿出
也可以利用android使用APPium基於UIAutomator,ios使用WDA做自動化測試。
簡歷表現:
簡歷要表現出:技術能力、管理能力、學習能力、溝通能力、創新能力、團隊協作 不要寫別人對自己的評價,文案簡潔,概況說明突出重點,多用數據圖標
簡歷對比:
測試流程:
①需求溝通——制定測試方案——設計測試用例——准備測試環境——測試執行——bug處理——回歸驗證——跟進上線
②測試文檔——產品、測試、開發評審——測試計划——測試用例——測試評審——開發完成提測——冒煙測試——正式測試——bug處理——評估質量——測試報告——上線跟進
bug:
①bug分級:優先級、嚴重程度 ②bug分類:UI、系統、接口 ③bug狀態:新建、待修改、待驗證、已驗證、遺留、關閉
常用測試工具:
網絡調試工具:fiddler 頁面調試工具:Chrome Inspector、firebug web自動化工具:QTP、selenium 移動端工具:ADB、monkey、MonkeyRunner
移動端自動化框架:appium、robotium、uiautomator、selendroid 平台知識:window、mac、android、linux 服務端壓力工具:loadrunner、Jmeter
數據庫:mysql可視化工具navicat
自我分析:SWOT分析 strength優勢——weakness劣勢——Opportunity機會——Threat威脅
測試階段:
單元測試(開發)——集成測試(開發)——系統測試——驗收測試
測試流程:
需求溝通——制定測試方案——測試用例——測試環境——執行測試——bug處理——回歸測試——跟進上線
測試計划:
5W原則:what明確測什么 why明確測試目標 when明確測試開始結束時間 how明確方案 where資料位置、路徑、bug位置
測試用例方法:
1.等價類(相同屬性集合,如0-9邏輯一樣,只需驗證一個) 2.邊界值(±1) 3.錯誤推斷 4.正交分析法(坐標系,如手機橫坐標和瀏覽器縱坐標)
5.場景法(登陸成功、登陸失敗) 6.因果圖 7.判定表
bug包含什么:
①測試工程師、開發人員、bug日期 ②bug標題、bug正文、bug附件 ③優先級、嚴重程度 ④所屬板塊 ⑤bug狀態(新建、修復、遺留、關閉) ⑥bug處理記錄
如何分層自動化:
UI自動化測試:針對不常變頁面 接口自動化:周期短、變化頻繁 單頁測試(白盒)
B/S:瀏覽器與服務器 C/S客戶端與服務器
安全測試包括:
①用戶訪問認證 ②傳輸數據加密 ③安全防護策略:安全日志、入侵檢測 ④數據備份 ⑤防病毒 ⑥sql注入、js注入
測試報告包含:
①測試背景 ②測試范圍 ③測試環境 ④測試方法 ⑤結論 ⑥質量風險評估
alpha測試:開發環境下測試 beta測試:用戶真實環境下測試
bug類型:
①bug代碼編寫錯誤導致功能 ②defect缺陷,實現與需求不同 ③fault故障 ④error錯誤,邏輯語法錯誤,可能不影響用戶體驗
※※python※※
面向對象:OOP
包含:類、繼承、多態、實例、屬性、方法
進程、線程、協程:
進程【網線】:不共享數據(QQ與word) 線程【網線小細線】:執行程序最小單元(多個word) 協程:程序員調度,一個線程分多個“微線程”
如何使用python實現socket編程:
socket:套接字,應用程序通過套接字想網絡發出請求,應用程序通過套接字應答網絡請求,使主機間或者一台計算機的進程間可以通訊
什么是lambda函數
匿名函數,如:
tuple為元組(不可改),list為列表(可改)
range函數
返回一系列連續的整數,可以生成一個列表對象,工作方式類似於分片
alist = range(2,101,2) print(alist) ——>2,4,6,8,10…… 100
re模塊match(只在字符串開始匹配)、search(掃描整個字符串)
python操作文件:(把大象放冰箱,打開,操作,關)
python算法:
常用算法:排序、冒泡、快排、堆排、二分查找
※※Linux※※
基礎:cd切換目錄 ls -l列出文件詳細信息 ls -a列出當前目錄文件 touch創建文件 mkdir創建目錄 echo創建帶內容文件 cat查內容 cp拷貝 mv移動 rm -r遞歸刪除 rm -f強制刪除 wc統計字節數 tree顯示目錄結構 grep查找 ln軟連接
網絡:curl文件傳輸 netstat網絡信息 telnet遠程主機
系統:ping連通 man查看幫助 kill殺死進程 top消耗最多進程信息 ps進程狀態
更多參考本博客linux命令隨筆
※※網絡※※
想象廣州——北京快遞過程
物理層(公路)——數據鏈路層(十字路口,馬路相連)——網絡層(選擇的路徑)——傳輸層(運輸車):TCP確保建立/慢,UDP直接發容易丟包/快——會話層(快遞員)
表示層(快遞包裹內容)數據內容——應用層(使用包裹):有http、https、smtp協議。
http中get與post區別:
功能:get——取東西(下載) post——提交(上傳)
傳輸方式:get——url+參數 post——放在body傳輸,安全
tcp與UDP:
tcp三次握手,四次揮手
socket建立連接:
①建立服務器監聽,socket,bind,listen ②客戶端發送請求,connect,send ③連接確認,accept,response
※※數據庫※※
創建庫:create database 數據庫名 show databases(查看數據庫)
創建表:create table 表名 show tables查看表
操作數據:
插入 insert into 表名 values (內容);
查詢 select * from 表名 (where );
更新 updata 表名 set 字段=新值 where id=1;
刪除 drop table 表名;
※※fiddler※※
如何抓手機包
借助局域網,設置代理轉發,將手機數據流轉發到fiddler 可以去修改返回內容,去autoResponder設置
慢網速
Rules——Performance——simulate modem speeds fiddlerscript 默認1kb延遲300ms
過濾篩選 filters——hosts
1**成功接收 2**成功處理 3**重定向、跳轉 4**客戶端錯誤 5**服務器錯誤
請求報文是key-value形式,返回報文是json串。
※※Android※※
android四大組件:
activity程序與用戶交互窗口 service程序后台完成操作 content provide數據統一訪問格式 broadcastreceiver應用間數據傳輸
ANR:
持續等待還是強制關閉
常見五種布局:
frame Layout 框架布局 linear Layout 線性布局 absolute Layout 絕對布局 relative Layout 相對布局 table Layout 表格布局
※※ADB※※
重啟服務: adb kill-server adb start-server
安裝: adb -s 設備名 install (-r 覆蓋)路徑
卸載: adb -s 設備名 uninstall 包名
包名獲取: adb logcat | grep/findstr start(grep是mac、findstr是windows)
adb push 電腦\ 手機/ 電腦——>手機
adb pull 手機/ 電腦\ 手機——>電腦
靜默安裝:adb shell pm install -f 手機/
adb啟動app: adb shell am start -w -s 手機/ (-w等待 -s先強制停止)
adb停止app: adb shell am force-stop 手機/
查找已安裝包:
包含關鍵字:adb shell pm list package -f 關鍵字
第三方安裝:adb sehll pm list package -3 關鍵字
已安裝:adb shell pm list package -i 關鍵字
截屏:adb shell screencap 手機路徑/ 錄屏:adb shell screenrecord 手機路徑/
抓取logcat:adb logcat 后面可以加 find str
獲取當前cpu: adb shell dumpsys cpuinfo/findstr 手機包(CPUinfo是mac,findstr是windows) 內存: adb shell dumpsys meminfo 手機包
※※Monkey※※
monkey向系統發送偽隨機的用戶事件流,實現對正在開發的應用程序進行壓力測試。
monkey進行壓力測試命令?☆☆☆
adb shell monkey -p 包名 事件數 如:adb shell monkey -p com.android.calculator2 100
如何重現crash、ANR過程?如何提取?
monkey是隨機執行的(偽隨機),添加參數 -s seed 只需要提供相同的seed值即可復現
adb shell monkey 【-v -v -v 詳細信息】-s 6789 -p 包名 事件數 >20200517.log -v可以看參數 -v-v更加詳細 -v-v-v最詳細 並且導出到20200517.log日志
如何設置monkey運行8小時
添加參數--throttle
adb shell monkey -s 6789 --throttle 300 -p 包名 事件數 ——> 300ms點擊一次,並填寫合適的事件數
在Crash、ANR后繼續執行?
填寫忽略參數crash參數:--ignore-crashes 忽略ANR參數:--ignore-timeouts
如adb shell monkey -s 6789 --throttle 300 --ignore-crashes --ignore-timeouts -p 包名 事件數
如何讓monkey指定事件
觸摸 --pct-touch 動作 --pct-motion 軌跡球事件 --pct-trackball 基本導航事件 --pct-nav 主要導航事件 --pct-majornav 系統導航事件 --pct-syskeys
※※鯉魚跳龍門第一招——自動化工具※※
一.Instrumentation java語言編寫
原理:通過直接調用被測app類實現自動化,要求與被測app在一個進程內
可以測功能、activity生命周期、模擬數據庫操作測試和兼容性測試
什么時候使用??? 使用java Junit框架 進行白盒測試 使用mock技術模擬系統對象
二.UIautomator、UIAutomatorviewer 不依賴源碼
三.selendroid(基於Instrumentation)、robotium(基於Instrumentation) 依賴源碼
原理:selendroid是基於Instrumentation進行的封裝,指令通過http協議傳輸過來的
robotium也是基於Instrumentation進行封裝,實現android測試框架,封裝了一個solo類庫,提供自動化測試API,測試時也需要源碼。
四.Appium 跨語言☆☆☆ 開源移動端UI自動化框架
理念:①不需源碼②不限語言框架③接口統一,不需重復開發④開源
概念:c/s框架,核心是一個web服務器
session,客戶端初始化session與服務器交互
Desired capabilites,初始化時的鍵值對組合
Appium server,操作與驅動手機
appium client,支持多語言調用
環境:①Android SDK、JDK、Appium ②pycharm、python環境 ③庫:selenium(appium的父類)、appium-python-client
支持語言:java、python、JavaScript、php……
appium初始化配置內容:appPackage(app包)、appActivity(appActivity名稱)、automationName(自動化驅動類型selendroid/appium)
Appium測試native app原理:
Appium測試Hybrid app原理:(測試混合型app,如瀏覽器、某些app加載了h5頁面)
Appium測試ios app原理:
綜述:appium自動化框架,本身不能實現自動化測試過程,完全是借助於當前業界流行的自動化框架做的一次封裝。
Appium測試native app:
元素定位:①UIautomatorViewer☆☆☆ ②使用appium的Inspector
定位元素api:find_element_by_accessibility_id find_elements_by_accessibility_id
find_element_by_id find_elements_by_id
find_element_by_name find_elements_by_name
find_element_by_xpath find_elements_by_xpath //絕對路徑:/html/body/div/p 和相對路徑://div//p
find_element_by_class_name find_elements_by_class_name
補充:(ID選擇器# class類選擇器.)(webDriver整個頁面 webelement元素內部)
寫腳本規則:love規則
locate定位 operate操作 verify操作 exception異常處理
初始化注意事項:
①可以不使用App包路徑(因為uiautomator不需要源碼) ②默認使用appium驅動
Appium測試Hybrid app:
元素定位:基於native部分:①UIautomatorViewer☆☆☆ ②使用appium的Inspector
基於webview部分:chrome瀏覽器的調試模式
定位元素api:find_element_by_id find_elements_by_id
find_element_by_name find_elements_by_name
find_element_by_xpath find_elements_by_xpath
find_element_by_link_text find_elements_by_link_text
find_element_by_tag_name find_elements_by_tag_name
find_element_by_class_name find_elements_by_class_name
寫腳本規則:S-love規則
native部分:locate定位 operate操作 verify操作 exception異常處理
webview部分:用selenium(appium父類) switch改變
初始化注意事項:
①明確指定驅動:selendroid ②selendroid模式基於Instrumentation實習的自動化框架,Instrumentation需要將app重新簽名,所以要明確指定app路徑
補充:selenium測試web頁面:
環境准備:工具:pycharm、chrome
包:selenium、python
webview:chrome driver(firefox drive/ie driver)
元素識別工具:firefox或者chrome的調試工具
定位方法:同上,例如用xpath:開發者選項——復制xpath——定位
Appium測試wap界面:
環境:
IDE:pycharm 寫代碼的地方
包:python、selenium、appium-python-client
工具:appium、chrome
元素識別:chrome開發者工具
腳本編寫:初始化時要指定browsername為browser,其余自動化代碼與selenium相同
※※鯉魚跳龍門第二招——自動化測試框架※※
Unittest框架:
FestFixture 測試固定裝置(包含①setup初始化 ②Testcase測試用例 test_名 ③TearDown釋放資源)
FestCase
FestSuite 裝載測試用例 suite相當於啤酒箱,可以裝很多啤酒(測試用例)
FestRunner 執行測試用例
DDT數據驅動:
黑盒(功能)、每行重復進行一中單元測試、使用多個輸入值測試API
效果:使用多個數據測試一條用例,表現為多條用例 原理:通過python的裝飾器,裝飾每條用例
測試搜索功能:
①啟動appium,放后台②准備手機③准備腳本 導入uittest(基於uittest) from appium import webdriver(使用appium下面瀏覽器驅動)
意義:代碼復用高,異常排查效率高,代碼可維護性高。
Lettuce框架-行為驅動(BBD):
lettuce是基於python語言的行為驅動測試框架。(晚上想喝酒涮火鍋,喝酒、涮火鍋就是像個行為)
lettuce將測試用例與自動化測試代碼分離,像寫文本一樣清晰。
KDT-關鍵字驅動:
也稱為表格驅動測試或者行為驅動測試。 將創建測試程序的步驟氛圍規划和實現兩個階段。 使不懂代碼的人可以完成自動化測試過程。
Robot framework就是關鍵字驅動的一個自動化框架,就像lettuce實現了行為驅動,使用unittest實現了單元測試。
如何收集測試報告:
如何管理測試報告:
借助時間戳作為報告名稱,防止同名覆蓋
測試郵件通知:
網易郵箱為例,設置——SMTP——使用sendReport.py
※※鯉魚跳龍門第三招——接口自動化※※
一.fiddler工具
1.抓手機包:①pc設置端口號 ②手機wifi—高級設置—pc的ip+端口號 ③加載頁面下載證書
2.數據包包含:狀態碼、協議類型、request、Response(header、data)
3.如何設置autoResponde:①抓請求 ②制作數據 ③設置規則
4.fiddler發送get、post請求:①構造url(get/post) ②構造參數(get/post) ③構造數據(post)
5.慢網速:rules——performances——simulate Modem speeds 修改代碼配置速度。
6.抓https包:①fiddler相關設置 ②瀏覽器證書
請求報文格式是key-value形式,返回報文一般是json串。
二.postman
postman發get請求:
構造url——構造參數——構造數據
postman發post請求:
fiddler抓包獲取數據——body里面form-data數據一致——pre-request script選globals.set——body里參數化——參數化選csv文件
postman添加檢查點/斷言:
對返回值進行校驗 ①返回值檢查點 ②狀態碼檢查點
在Tests中添加
postman運行測試用例:
①創建collections ②運行collections ③手機collections結果
如何實現API框架:
用例層——testCases DDT
控制層——unittest TestReport Email
驅動層——python Requests庫
python Requests API發送get請求
python Requests API發送post請求
依賴第三方接口 :
用soapUI等工具調用第三方數據接口webservice,通過返回值看是否調用正常,也可以利用mock工具模擬第三方數據返回,最大限度降低對第三方數據依賴。
※※鯉魚跳龍門第四招——持續集成※※
是指開發階段,對項目進行持續性 自動化編譯、測試,以達到控制代碼質量的手段 持續集成是一件軟件開發實踐
1.工具:jenkins☆☆☆ buildbot Travic CI ……
2.jenkins搭建:①下載jenkins.war ②命令行 java -jar jenkins.war ③瀏覽器打開 http://localhost:8080
3.需要哪些配置:系統集配置(命令行) 工程級配置
※※鯉魚跳龍門第五招——服務端測試工具※※
壓力工具:loadrunner付費 Jmeter免費 自主研發工具
關注指標:cpu 內存(虛存、實存) QPS(每秒請求數包括均值、峰值) 平均響應時間
服務器壓力測試方法:①.搭建服務器模塊,並啟動服務 ②.監控進程相關指標:內存、cpu ③.QPS(log)、平均響應時間 ④收集數據、分析曲線圖 ⑤分析結果得結論
※※鯉魚跳龍門第六招——兼容性測試※※
APP:
①系統(android、ios) 版本 ②分辨率 ③手機品牌 ④看產品用戶群體 (top10)
wap:
①不同平台 不同瀏覽器 ②分辨率 ③轉發到第三方平台顯示
pc頁面:
①操作系統(平板、windows、mac) ②瀏覽器 ③分辨率 ④縮放、字體
中和、交叉測試 雲測平台
※※鯉魚跳龍門第七招——調試※※
app調bug:
①網絡相關工具:fiddler、wareshark、charles ②adb、am、logcat ③雲平台、bug復現
wap調bug:
①chrome調試工具、可設移動APP UA ②winre,web Inspector Remote
pc調bug:
①chrome調試工具 ②火狐的firebug