測試流程
分析需求——>制定測試計劃——>設計測試用例——>執行測試——>編寫測試報告
黑盒測試
等價類劃分、邊界值分析法、猜錯法、隨機數法、因果圖。
白盒測試
代碼檢查法、程序變異、靜態結構分析法、靜態質量度量法、符號測試法、邏輯覆蓋法、域測試、Z路徑覆蓋和基本路徑測試法。
冒煙測試
對版本最基本的功能進行測試,保證基本的功能和流程。是版本驗證測試,優點在于節約測試的時間成本,減少測試輪數。
回歸測試
是軟件維護階段對軟件修改后進行的測試,指修改了舊代碼后,重新進行測試以確認修改沒有引入新的錯誤或導致其他代碼產生錯誤。
等待
強制等待、顯示等待、隱形等待
selenium如何定位隱藏元素
隱藏元素可以正常定位,只是不能操作。如果想要操作隱藏元素,可以用js的方法。
js = 'document.getElementById("id").click()' driver.execute_script(js)
如何做好用例的編寫,從哪些維度去考慮問題
缺陷的生命周期
Linux 查看/編輯文件的命令
場景設計(正例、反例)
數據庫三范式
1NF(原子性)存儲數據不可再分
2NF(唯一性)在滿足第一范式的基礎上,非主鍵列須完全依賴于主鍵
3NF(獨立性)…非主鍵列不能與其他非主鍵列間存在依賴關系
mysql常用的存儲引擎?區別?
常用的存儲引擎是:InnoDB,MyISAM
區別:
InnoDB支持事務,而MyISAM不支持事務
InnoDB支持行級鎖,而MyISAM支持表級鎖
InnoDB支持MVC, 而MyISAM不支持
InnoDB支持外鍵,而MyISAM不支持
InnoDB不支持全文索引,而MyISAM支持。
Cookie與Session的區別
Cookie:存儲在客戶端,通過Expires字段來設置過期時間
Session:存儲服務端,關閉瀏覽器后,服務器存儲的Session就會失效
打開瀏覽器到看到瀏覽器顯示頁面,過程步驟和環節?
DNS域名解析
TCP三次握手
發生http請求
接受http響應
瀏覽器解析響應文件(js,css,html)
TCP/UDP的區別
1.TCP面向連接,TCP面向字節流,TCP連接只能是點到點,首部開銷大,全雙工。
2.UDP是無連接的,面向報文的UDP沒有擁塞控制,首部開銷小,只有8個字節。
網頁崩潰原因
-
內存泄漏
-
網頁代碼復雜和瀏覽器bug
-
網頁數據過多
-
Ajax的Web服務漏洞
上傳頭像失敗
1.圖片限制(大小、格式、尺寸)
2.前端(組件)組件出現bug
3.后端(接口)數據庫異常、調用接口,參數傳遞不正常、接口掛了
4.網絡(訪問對象存儲訪問超時)
app閃退原因
1.外部 手機內存不足,網絡不佳、版本低、軟件沖突,資源競爭
2.內部 版本低與后端接口沖突、不兼容操作系統、程序bug(空指針異常、數組越界、堆棧溢出、邏輯錯誤)
偶然閃退的排查?
1.查看 crash 日志
2.遍歷測試,暴力復現
網頁卡頓原因
1.http 請求次數太多。規范接口設計,減少 http 請求次數。
2.頁面資源加載。靜態資源統一放在一個靜態域名上,減輕重復下載靜態資源的負擔。
3.cookie 影響。減小 cookie 的影響 。去除沒有必要的 cookie。
排查少量的用戶反饋功能異常
1.APP 版本過低,接口改動未考慮版本控制
2.操作系統版本不兼容。
3.跟會員用戶有關,某些功能僅爭對 VIP 會員開放,然該部分功能缺陷。
4.跟用戶分布地域有關,有些地區未開放功能,但也為這些用戶展示了入口。
排查登錄的按鈕不能點擊
1.前端未響應用戶點擊事件,導致請求發不出去。
2.前端發起 HTTP 請求,但后端接口返回異常,前端捕獲異常之后,沒有處理。
3.網絡異常,不能發出請求。
4.內存不夠,導致頁面卡死。
APP提示無法連接網絡
第一步:檢查網絡環境
1.檢查流量和WiFi信號
2.檢查是否有網絡限制, APP是否只能在內網使用,無法連接公網。
3.檢查是否連接了代理或代理連接是否出現異常,手機連接電腦代理之后,如果不安裝證書,發起 https 的請求將出現異常。
第二步:檢查 APP 的網絡請求
抓包,檢查 APP 請求的域名是否正確,檢查后端接口是否響應超時,檢查后端接口是否返回異常。
判斷BUG位置?
1.樣式和交互層面的 Bug,大概率都是前端的 Bug
2.數據相關的 Bug,大概率都是后端的 Bug
使用python實現多線程
import time, threading# 新線程執行的代碼:
def loop():print('thread %s is running...' % threading.current_thread().name)n = 0while n < 5:n = n + 1print('thread %s >>> %s' % (threading.current_thread().name, n))time.sleep(1)print('thread %s ended.' % threading.current_thread().name)print('thread %s is running...' % threading.current_thread().name)
t = threading.Thread(target=loop, name='LoopThread')
t.start()
t.join()
print('thread %s ended.' % threading.current_thread().name)
數組、list與arrayList區別
1.數組是在內存空間中申請一段連續的內存地址
2.ArrayList的大小是按照其中存儲的數據來動態擴充
3.list定義了ArrayList的數據類型
JDK、JVM、JRE
1.Java 虛擬機(JVM)是運行 Java 字節碼的虛擬機。JVM 利用字節碼(即擴展名為 .class 的文件)針對不同系統,特定實現。
2.JDK 是 Java Development Kit,它是功能齊全的 Java SDK。它擁有 JRE 所擁有的一切,還有編譯器(javac)和工具(如 javadoc 和 jdb)。它能夠創建和編譯程序。
3.JRE 是 Java 運行時環境。它是運行已編譯 Java 程序所需的所有內容的集合,包括 Java 虛擬機(JVM),Java 類庫,java 命令和其他的一些基礎構件。但是,它不能用于創建新程序。