測試理論基礎題目
你是如何做測試分析的?
確認需求,先定性後定量
定性:那些事顯性需求,那些事隱形需求,功能在範圍內? 性能、可靠性、安全性、兼容性這些需要測嗎?
定量:功能要測,有哪些功能,每個功能點上什麼?入口是什麼,出口是什麼, 數據那裏構造?
上線標準是什麼?
1.所有功能點(需求)都被用例覆蓋到了
2.所有用例執行過至少一遍
3.所有發現的bug被修復並驗證,做過regression了。
4.不能修復的記錄了/關閉了/known issue了。
5.bug曲線區域平穩了
如果項目週期很短,測試人力匱乏,你是怎麼協調的?
範圍不變,趕工/增加人手,快速跟進/並行開始任務。
範圍能變,砍低優先級用例,縮小測試範圍。
爲什麼要做接口測試?
1、越底層發現bug,修復成本越低;
2、前端隨便變,接口測好了,後端不需要變;
3、檢查系統的安全性、穩定性,前端傳參不可信;
4、接口測試較容易實現自動化持續集成,相比UI自動化穩定,可以減少人工迴歸成本與時間,縮短測試周期;
5、現在很多系統都是前後端分離的,從安全層面說:
(1)、只依賴前端進行限制已經完全不能滿足系統的安全要求(繞過前面實在太容易), 需要後端同樣進行控制,在這種情況下就需要從接口層面進行驗證。
(2)、前後端傳輸、日誌打印等信息是否加密傳輸也是需要驗證的,特別是涉及到用戶的隱私信息,如身份證,銀行卡等。
你們公司是如何做接口測試的?
1.接口規範拿到。
2.設計接口測試功能用例(主要從用戶角度出發看接口能否實現業務需求,用例設計就是黑盒用例那一套)。
3.各種入參驗證(正常情況,異常情況包括輸入參數個數不對,類型不對,可選/必選, 還有考慮參數有互斥或關聯的情況)。
4.接口返回值各種驗證(符合接口文檔需求)
5.瞭解接口實現邏輯,實現邏輯覆蓋(語句/條件/分支/判定/。。。。。)
6.接口能併發執行嗎?
6.採用工具或者自寫代碼來驗證,HTTP接口一般SoapUI, Jmeter, Fiddler, Postman等都能驗證,自己寫更好。web service接口一般要寫代碼來調用。根據測試用例自動化。
7.發現問題跟功能測試一樣,該報bug報bug,該跟蹤狀態跟蹤狀態
接口測試質量評估標準是什麼?
接口功能覆蓋是否完整、參數驗證正確性、接口異常場景覆蓋、接口覆蓋率、性能指標、安全指標;
請問你們公司是如何做性能測試的?請講訴性能測試的相關指標?
先確定需求,再定性,定量。
1.拿到測試需求,確定測試軟硬件環境/測試指標, 使用測試工具 jmeter編寫測試代碼,逐步加壓,直到測試目的達成。
2.分析測試結果,編寫測試報告,突出性能指標包括成功,失敗情況,並加以分析。
3.調優(一般都是開發的事)
【常見性能指標】
【吞吐量】1s內能處理的請求個數 tps 事務/秒
【峯值吞吐量】一段時間內吞吐量的最大值,是用來評估系統容量的重要指標之一
【響應時間】一次事務的處理時間。通常指從一個請求發出,到服務器進行處理後返回,再到接受完畢應答數據的時間間隔 ms
【90%響應時間】一段時間內90%的事務響應要比此值小,反映總體響應速度,和高於該值的10%超時率; 是用來評估系統容量的重要指標之一
【CPU佔用率】 cpu被使用情況,反映了資源利用情況;
【併發數】系統同時處理的request/事務數
最大併發數如何確定:
a1面積越大,說明系統的性能能力越強
a2面積越大,說明系統穩定性越好
a3面積越大,說明系統的容錯能力越好
壓力測試和負載測試的區別
一個(壓力測試)把最後一根稻草仍你身上,一個(負載測試)就剩最後一根稻草沒仍,或者仍給你指定數目稻草。
服務器中一般要監控哪些數據,如何監控的,怎麼從監控數據中發現問題?
CPU, 內存, 網絡, I/O, 數據庫。等等。 一般用工具監控,另外Windows上有性能監視器。
發現問題,一般要關注閾值,比如CPU利用率超過85%,說明server壓力太大了,數據量一大DB某條SQL寫入速度變慢了等等等等
假設系統A調用系統B,我把B的接口都mock了,進行性能測試,這樣有什麼好處和壞處?
好處是防止系統B出錯引起測試錯誤;不會因系統B的開發進度影響測試;mock後可以快速返回結果,提高測試效率;
壞處是真實性能要比測出來的性能差, 性能指標不準確。 因爲Mock的服務再真也不能代替真實服務;
服務器掛了,怎麼排查?
一定記得先確認需求,再定性,定量;
服務器是哪個服務器?後端應用服務器?數據服務器?緩存系統服務器?中間件服務器?文件系統服務器?
然後面試官說個,不說就自己假定一個, 然後第一次掛第二次掛分開說,先問有沒有錯誤碼,日誌有嗎,有就看日誌,沒有就猜 是應用服務器掛了啊,是不是高峯期頂不住這麼大併發訪問啊?是數據庫服務器啊,是不是頻繁讀寫受不了啊,讀寫有分開嗎?同步還是異步; 服務器內存不夠,遭到惡意攻擊
如何看待自動化和手動測試?怎樣的一個比例纔是健康的?
一切穩定了的功能最好全部自動化掉。
你們公司的自動化投入產出比怎樣?效益怎樣?
UI自動化測試發現新bug的效益很低,主要用在迴歸測試上,減少測試工作量。接口測試可就不一樣了,可以小步快跑,也可以集團作戰。
自動化測試用例的覆蓋率多少?
50%, 一般核心業務裏的最高優先級用例100%覆蓋,這些用例也可以跑冒煙測試;
完整運行一次自動化用例需要多久時間?
1條測試用例1s左右;
測試腳本的維護成本是怎麼樣的?
不壞就不要修改;
什麼是分層自動化?
金字塔結構, 最底層UnitTest,往上接口API/集成起來的service, 最上面UI自動化
如果有一個登錄接口需要服務端返回參數,再帶着這個參數去請求才能完成登錄,用jmeter 怎麼做?
可以利用Regular Expression Extractor傳參
冒泡排序
def dubble_sort(li):
for i in range(len(li)-1):
for j in range(len(li)-i-1):
if li[j]>li[j+1]:
li[j],li[j+1]=li[j+1],li[j]
return li
1~9999數列中數字3出現的次數。用遞推方法解出。
def count_digit(number):
return len(str(number))
def countThree(digit):
if not isinstance(digit,int):
raise TypeError('number is not int')
# digit = len(str(number))
if(digit <=0):
return 0
if(digit ==1):
return 1
return 10*countThree(digit-1) + 10 **(digit-1)
print(countThree(count_digit(9999)))
從一個數組中找出前4個最大的數,用最優解。
li=sorted([5,6,78,9,34,56,90,0,4])[-4:]
print(li)
def quickSort(li):
if len(li)<2:
return li
else:
basevalue=li[0]
less=[m for m in li[1:] if m <=basevalue]
equal=[n for n in li if n == basevalue]
greater=[i for i in li[1:] if i > basevalue]
return quickSort(less)+equal+quickSort(greater)
li=[3,40,26,589,256,365,2,2,96]
print(quickSort(li)[-4:])
寫一段程序,刪除字符串a中包含的字符串b,舉例 輸入a = “asdw”,b = “sd” 返回 字符串 “aw”,並且測試這個程序。
def remove_str(str1,sub_str):
if not isinstance(str1,str):
raise TypeError('str is not str')
if not isinstance(sub_str,str):
raise TypeError('sub_str is not str')
if len(str1)<len(sub_str):
raise Exception('sub_str must large to str length')
start_index=str1.find(sub_str)
if start_index==-1:
raise Exception('sub_str is not sub_str')
else:
len_substr=len(sub_str)
res=str1[:start_index]+str1[start_index+len_substr:]
return res
print(remove_str('asdw',11))
寫一個方法,把字符串轉成數字,並測試這個程序;
from functools import reduce
def fn(x,y): ##定義reduce函數處理邏輯把數字列表進過處理生成整數
return x*10+y
#定義map函數邏輯把數字字符串生成列表如'12345'進過處理生成[1,2,3,4,5]
def char2num(s):
digits={'0':0,'1':1,'2':2,'3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
return digits[s]
#從內往外執行首先把12345進過map處理生成列表[1,2,3,4,5]然後在進過reduce處理生成整數12345打印出來
#處理過程是((((1*10+2)*10)+3)*10+4)*10+5
res=reduce(fn,map(char2num,'123456789'))
print(res)
SQL:
說下左連接和右連接
左連接會讀取左邊數據表的全部數據,B表如果沒有內容匹配用NULL代替。。(如果兩個表中數據有相同部分,只顯示一個)
右連接會讀取右邊數據表的全部數據,即使左邊數據表沒有對應數據。(如果兩個表中數據有相同部分,只顯示一個)
介紹下什麼是索引
索引是一個排序的列表,在這個列表中存儲着索引的值和包含這個值的數據所在行的物理地址,在數據十分龐大的時候,索引可以大大加快查詢的速度,這是因爲使用索引後可以不用掃描全表來定位某行的數據,而是先通過索引表找到該行數據對應的物理地址然後訪問相應的數據。
ALTER TABLE my_table ADD [UNIQUE] INDEX index_name(column_name);
使用sql生產10萬條數據
平常沒接觸過這麼大數據量,分批次吧,每次插入1w條,應該沒什麼壓力
1:使用excel新增少量數據1w-----》2、navicat for mysql 導入excel表中數據
------》3、使用insert into 表(字段) select 字段 from 表----》修改表數據保持差異性
Linux
你常用的命令是什麼?
ls, mkdir, cat, vi, ps touch
用什麼查看log?
watch, tail、cat、tac、head、echo
如何查找一個文件大小超過5M的文件
find -type -f -size +5M
如何查看進程
ps 顯示當前運行中進程相關信息,包括進程的PID
top:狀態自動刷新
https://www.jianshu.com/p/f3bfe04549c5