● 給你一個字串,你怎么判斷是不是ip地址?手寫這段代碼,并寫出測驗用例
參考回答:
IP的格式:(1~255).(0~255).(0~255).(0~255)方法一:基于對字串的處理
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String ipStr = scanner.next();
boolean isIpLegal = isIpLegal(ipStr);
if(isIpLegal) {
System.out.println(ipStr + " 合法");
}
else{
System.out.println(ipStr + " 非法");
}
}
public static boolean isIpLegal(String str){
//檢查ip是否為空
if(str == null){
return false;
}
//檢查ip長度,最短為:x.x.x.x(7位),最長為:xxx.xxx.xxx.xxx(15位)
if(str.length() < 7 || str.length() > 15){
return false;
}
//對輸入字串的首末字符判斷,如果是"."則是非法IP
if(str.charAt(0) == '.' || str.charAt(str.length()-1) == '.'){
return false;
}
//按"."分割字串,并判斷分割出來的個數,如果不是4個,則是非法IP
String[] arr = str.split("\\.");
if(arr.length != 4){
return false;
}
//對分割出來的每個字串進行單獨判斷
for(int i = 0; i < arr.length; i++){
//如果每個字串不是一位字符,且以'0'開頭,則是非法的IP,如:01.002.03.004
if(arr[i].length() > 1 && arr[i].charAt(0) == '0'){
return false;
}
//對每個字串的每個字符進行逐一判斷,如果不是數字0-9,則是非法的IP
for(int j = 0; j < arr[i].length(); j++){
if (arr[i].charAt(j) < '0' || arr[i].charAt(j) > '9'){
return false;
}
}
}
//對拆分的每一個字串進行轉換成數字,并判斷是否在0~255
for(int i = 0; i < arr.length; i++){
int temp = Integer.parseInt(arr[i]);
if(i == 0){
if (temp < 1 || temp > 255){
return false;
}
}
else{
if(temp < 0 || temp > 255){
return false;
}
}
}
return true;
}
方法二:正則運算式
| 1 2 3 4 5 |
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String ipStr = scanner.next();
boolean isIpLegal = isIpLegal(ipStr);
if(isIpLegal) {
|
System.out.println(ipStr + " 合法");
}
else{
System.out.println(ipStr + " 非法");
}
}
public static boolean isIpLegal(String ipStr) {
String ipRegEx = "^([1-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5]))(\\.([0-9]|([1-9][0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5]))){3}$";
Pattern pattern = Pattern.compile(ipRegEx);
Matcher matcher = pattern.matcher(ipStr);
if (matcher.matches()) {
return true;
} else {
return false;
}
}
測驗用例:
等價類劃分:
|
有效可用的IP地址 |
|
|
A類 |
1.0.0.0 -126.255.255.254 |
|
A私有 |
10.0.0.0 -10.255.255.254 |
|
B類 |
128.0.0.0 -191.255.255.254 |
|
B私有 |
172.16.0.0 -172.31.255.254 |
|
C類 |
192.0.0.0 -223.255.255.254 |
|
C私有 |
192.168.0.0-192.168.255.254 |
|
windows自動分配 |
169.254.0.0-169.254.255.254 |
|
有效但不可用的IP地址 |
|
|
D |
224.0.0.0 -239.255.255.254 |
|
E |
240.0.0.0 -255.255.255.254 |
|
全網 |
0.x.x.x, x.x.x.0 |
|
廣播 |
x.x.x.255 |
|
回環 |
127.0.0.0 -127.255.255.254 |
|
輸入 |
結果 |
|
64.11.22.33 |
有效可用 |
|
10.12.13.14 |
有效可用,不能直接訪問公網 |
|
151.123.234.56 |
有效可用 |
|
172.20.123.56 |
有效可用,不能直接訪問公網 |
|
192.127.35.65 |
有效可用 |
|
192.168.128.128 |
有效可用,不能直接訪問公網 |
|
169.254.15.200 |
有效可用,不能直接訪問公網 |
|
224.1.2.3 |
有效不可用,超過有效范圍(D類) |
|
250.11.22.33 |
有效不可用,超過有效范圍(E類) |
|
0.200.3.4 |
有效不可用,全網地址 |
|
64.11.22.0 |
有效不可用,全網地址 |
|
10.12.13.255 |
有效不可用,廣播地址 |
|
127.50.60.70 |
有效不可用,回環地址 |
● 請進行測驗用例設計:一串數字,閏年的判別
參考回答:
判斷閏年的標準是:能整除4且不能整除100,能整除400,設定合法的年份為1-9999public class Test2 {
public static void main(String[] args) {
Scanner in = new Scanner (System.in);
int year=in.nextInt();
if(year<=0||year>9999)
{
System.out.println("請輸入正確的年份");
}
if((year%4==0&&year%100!=0)||year%400==0)
{
System.out.println("閏年");
}else
{
System.out.println("不是閏年");
}
}
}
測驗用例:
|
測驗用例 |
輸入 |
預期輸出 |
|
被 4 整除, 但是不被100 整除的年份 |
2008 |
閏年 |
|
被 4 整除, 同時被100 整除的年份,且被 400 整除的年份 |
2000 |
閏年 |
|
被 4 整除, 同時被100 整除的年份,但是不被400 整除的年份 |
1900 |
不是閏年 |
|
偶數, 不被4 整除的年份 |
2022 |
不是閏年 |
|
奇數年份 |
1999 |
不是閏年 |
|
年份大于9999 |
10000 |
請輸入正確的年份 |
|
年份小于0 |
0 |
請輸入正確的年份 |
● 請你說一說簡單用戶界面登陸程序都需要做哪些分析
參考回答:
一、功能測驗1.輸入正確的用戶名和密碼,點擊提交按鈕,驗證是否能正確登錄,
2.輸入錯誤的用戶名或者密碼,驗證登錄會失敗,并且提示相應的錯誤資訊,
3.登錄成功后能否能否跳轉到正確的頁面
4.用戶名和密碼,如果太短或者太長,應該怎么處理
5.用戶名和密碼,中有特殊字符(比如空格),和其他非英文的情況
6.記住用戶名的功能
7.登陸失敗后,不能記錄密碼的功能
8.用戶名和密碼前后有空格的處理
9.密碼是否非明文顯示顯示,使用星號圓點等符號代替,
10.牽扯到驗證碼的,還要考慮文字是否扭曲過度導致辨認難度大,考慮顏色(色盲使 用者),重繪或換一個按鈕是否好用
11.登錄頁面中的注冊、忘記密碼,登出用另一帳號登陸等鏈接是否正確
12.輸入密碼的時候,大寫鍵盤開啟的時候要有提示資訊,
13.什么都不輸入,點擊提交按鈕,檢查提示資訊,
二、界面測驗
1.布局是否合理,testbox和按鈕是否整齊,
2.testbox和按鈕的長度,高度是否復合要求,
3. 界面的設計風格是否與UI的設計風格統一,
4. 界面中的文字簡潔易懂,沒有錯別字,
三、性能測驗
1.打開登錄頁面,需要的時間是否在需求要求的時間內,
2.輸入正確的用戶名和密碼后,檢查登錄成功跳轉到新頁面的時間是否在需求要求的時間內,
3.模擬大量用戶同時登陸,檢查一定壓力下能否正常登陸跳轉,
四、安全性測驗
1.登錄成功后生成的Cookie,是否是httponly (否則容易被腳本盜取),
2.用戶名和密碼是否通過加密的方式,發送給Web服務器,
3.用戶名和密碼的驗證,應該是用服務器端驗證, 而不能單單是在客戶端用javascript 驗證,
4.用戶名和密碼的輸入框,應該屏蔽SQL注入攻擊,
5.用戶名和密碼的的輸入框,應該禁止輸入腳本 (防止XSS攻擊),
6.防止暴力破解,檢測是否有錯誤登陸的次數限制,
7. 是否支持多用戶在同一機器上登錄,
8. 同一用戶能否在多臺機器上登錄,
五、可用性測驗
1. 是否可以全用鍵盤操作,是否有快捷鍵,
2. 輸入用戶名,密碼后按回車,是否可以登陸,
3. 輸入框能否可以以Tab鍵切換,
六、兼容性測驗
1.不同瀏覽器下能否顯示正常且功能正常(IE,6,7,8,9, Firefox, Chrome, Safari,等),
2.同種瀏覽器不同版本下能否顯示正常且功能正常,
2.不同的平臺是否能正常作業,比如Windows, Mac,
3.移動設備上是否正常作業,比如Iphone, Andriod,
4.不同的解析度下顯示是否正常,
七、本地化測驗
1. 不同語言環境下,頁面的顯示是否正確,
● 請對這個系統做出測驗用例:一個系統,多個攝像頭,抓拍車牌,識別車牌,上傳網上,網上展示
參考回答:
功能:1.每個攝像頭都能抓拍車牌;
2.每個攝像頭抓拍到的車牌能正常交給系統處理;
3.系統能夠正確識別車牌;
4.系統能夠將識別出的車牌上傳;
5.上傳至網路的車牌能夠正常展示出來;
一、功能測驗
1.使用正常的車牌,保持車牌靜止,檢查每個攝像頭是否能抓拍車牌;
2.使用類似非車牌的寫有字的紙板,檢查每個攝像頭是否抓拍;
3.使用正常的車牌,保持車牌較高速移動,檢查每個攝像頭是否能抓拍車牌;
4.在多種情況下檢查每個攝像頭抓拍到的車牌能否正常交給系統處理,如臨時斷電、斷網后能否正常將資料交給系統;
5.使用抓拍到的正常的車牌,交由系統處理,檢查系統能否識別車牌;
6.使用非車牌的其他圖片,交由系統處理,檢查系統能否識別;
7.在多種情況下檢查系統能否將正常識別出的車牌進行上傳,如臨時斷電、斷網后未上傳資料是否能繼續上傳;
8.構造非車牌的其他內容的資料,檢查系統能否將例外內容進行上傳;
9.檢查上傳至網路的車牌能否正常展示出來;
10.上傳非車牌的其他內容的資料,檢查能否正常顯示出來,
二、性能測驗
1.同時向一個攝像頭展示多個靜止的車牌,檢查攝像頭能否抓拍到多個車牌;
2.同時向一個攝像頭展示多個較高速運動的車牌,檢查攝像頭能否抓拍到多個車牌;
3.抓拍后,檢查系統識別車牌的時間是否在需求要求的時間內;
4.模擬大量抓拍照片同時交由系統處理,檢查一定壓力下系統能否正常識別車牌;
5.模擬大量車牌同時上傳,檢查一定壓力下能否上傳成功,
三、安全性測驗
1.檢查是否能夠通過給車牌加裝飾物等方法,使攝像頭無法抓拍或抓拍后系統無法正常識別車牌,
● 請你對吃雞游戲進行壓力測驗
參考回答:
一.首先明確需要測驗壓力的內容:1.游戲服務器硬體
a.硬碟I/o
b.記憶體
c.CPU
2.網路壓力
a.長連接
a1.最大連接數
a2.流量(內網、外網、進、出)
b.長連接短周期(類似Http的TCP應用,這個比較特殊的一個需求,專門針對LoginAgent)
b1.每秒建立的連接數
b2.實際處理能力
3.資料庫
a.每秒事務數
b.每秒鎖等待數
c.平均延時(ms)
d.CPU暫用
4.多執行緒的最優執行緒數
a.資料庫執行的多執行緒
b.多連接處理
二.Windows Server環境測驗方式
1.服務器性能監測
使用Server自帶的性能監測器設定各個行程的監測引數,Window的這個自動工具做的相當強大,大家自己摸一摸基本就會用了,每個引數都由詳細的說明,
2.案例設計注意
a.對于資料庫的性能測驗上,現在由于所有的游戲服務器構架在DB前面都有一個實作DB緩沖功能的行程,以減少資料庫頻繁的讀寫操作,所以其實資料庫的讀是一個輕量級的數量;而資料庫的寫操作是一個周期性能程序,案例設計一定要能夠驅動這種周期性能程序,比如我們游戲的戰斗,導致游戲玩家資料的改變,或驅動所有在線玩家資料的周期性存盤,
b.選擇具有代表性,并且最頻繁的游戲操作,用于進行最高用戶在線的各種性能指標采集,如,開槍、道具拾取、道具使用、移動、聊天
c.聊天性能測驗
廣播聊天是最為考驗游戲資訊發送能力的功能,通過進行全域廣播的壓力測驗,我們可以獲取服務器行程發送資訊到客戶端的最高承載量,進而可以對我們的各種廣播功能進行一個預估和頻率限制,
d.同屏玩家的移動測驗
移動+廣播,這兩種資訊,基本是網路游戲流量的70-80%左右,同屏玩家數量,將會增加各種資料的廣播需求,非常影響游戲性能,所以同屏的移動測驗也是廣播測驗的一個必要環節,需要根據實際結果進行適當的優化,
e.大量玩家同時登錄測驗
玩家登錄時,有大量的資訊需要進行分配和初始化;同時也有大量的資料需要下傳客戶端,服務器需要進行大量的TCP連接建立,所以是一個比較關鍵的程序,這個測驗案例是一個比較特殊,但是運營是肯定會碰到的案例,
f.由于執行緒池處理事務,隨著事務的時耗,存在一個最優執行緒數的問題,過多的執行緒反而會降低服務器效率
3.細節問題
a.進行測驗需要仔細思考客戶端性能影響服務器最后表現的可能性,比如
a1.模擬客戶端的性能無法有效處理服務器回傳資訊,可能就導致服務器發送的資訊快取在服務器系統快取,從而表現出服務器記憶體不斷增加,表現為服務器發送能力不足,其實可能根本就是客戶端的性能問題
a2.客戶端性能問題,導致發起的請求數過少,從而導致單位時間內服務器處理的請求過少,表現為服務器性能不足,其實根本就是客戶端的請求能力不足,
b.網路帶寬導致最后表現不足
b1.確認服務器的各個網卡,以及相互的帶寬,不然可能因為相互帶寬,導致服務器對于客戶端請求的處理延時,表現為服務器卡機
b2.客戶端模擬多個玩家,比如1000個玩家,而客戶端的網卡或者客戶端與服務器之間的中轉服務器帶寬過小,導致服務器資料發送不出,記憶體不斷增加,表現為服務器發送能力不足,其實是中間帶寬問題,
c.debug i/o導致服務器性能下降
c1.進行性能測驗,一定要取消debug用的同步的i/o.比如我們服務器的debuginternalLog.同步i/o是非常影響性能的,特別在壓力測驗下可能導致每秒上千上萬甚至幾十萬次的執行,一處的檔案寫入操作就可以導致幾十萬次的處理能力變成幾千次的處理能力,
c2.客戶端避免進行阻塞操作導致模擬多用戶性能下降,導致服務器表現性能下降
d.流量需要區分內網網
內、外網流量在游戲正式運行時是完全分開的,價格也是完全不同的,一個千M的外網是一個無法想象的運營成本,而kmbps/s現在已經是一個可以接受的代價,游戲行程需要進行不同網卡的配置和系結,確定內外網流量,
● 請你根據微信登錄界面設計測驗用例
參考回答:
一、功能測驗1.輸入正確的用戶名和密碼,點擊提交按鈕,驗證是否能正確登錄,
2.輸入錯誤的用戶名或者密碼,驗證登錄會失敗,并且提示相應的錯誤資訊,
3.登錄成功后能否能否跳轉到正確的頁面
4.檢查能否選擇不同登錄方式進行登錄,如使用手機號登錄、使用微信號登錄或掃碼登錄,
5.記住用戶名的功能
6.登陸失敗后,不能記錄密碼的功能
7.密碼是否非明文顯示顯示,使用星號圓點等符號代替,
8.有驗證碼時,還要考慮文字是否扭曲過度導致辨認難度大,考慮顏色、重繪或換一個按鈕是否好用
9.登錄頁面中的注冊、忘記密碼,登出用另一帳號登陸等鏈接是否正確
10.輸入密碼的時候,大寫鍵盤開啟的時候要有提示資訊,
11.什么都不輸入,點擊提交按鈕,檢查提示資訊,
二、界面測驗
1.布局是否合理,testbox和按鈕是否整齊,
2.testbox和按鈕的長度,高度是否復合要求,
3. 界面的設計風格是否與UI的設計風格統一,
4. 界面中的文字簡潔易懂,沒有錯別字,
三、性能測驗
1.打開登錄頁面,需要的時間是否在需求要求的時間內,
2.輸入正確的用戶名和密碼后,檢查登錄成功跳轉到新頁面的時間是否在需求要求的時間內,
3.模擬大量用戶同時登陸,檢查一定壓力下能否正常登陸跳轉,
四、安全性測驗
1.登錄成功后生成的Cookie,是否是httponly (否則容易被腳本盜取),
2.用戶名和密碼是否通過加密的方式,發送給Web服務器,
3.用戶名和密碼的驗證,應該是用服務器端驗證, 而不能單單是在客戶端用javascript 驗證,
4.用戶名和密碼的輸入框,應該屏蔽SQL注入攻擊,
5.用戶名和密碼的的輸入框,應該禁止輸入腳本 (防止XSS攻擊),
6.防止暴力破解,檢測是否有錯誤登陸的次數限制,
7. 是否支持多用戶在同一機器上登錄,
8. 同一用戶能否在多臺機器上登錄,
五、兼容性測驗
1.不同移動平臺或PC環境下下能否顯示正常且功能正常
2.同種平臺下不同微信版本下能否顯示正常且功能正常,
3.不同的解析度下顯示是否正常,
七、本地化測驗
1. 不同語言環境下,頁面的顯示是否正確,
● 請你對朋友圈點贊功能進行測驗
參考回答:
1.是否可以正常點贊和取消;2.點贊的人是否在可見分組里;
3.點贊狀態是否能即時更新顯示;
4.點贊狀態,共同好友是否可見;
6.性能檢測,網速快慢對其影響;
7.點贊顯示的是否正確,一行幾個;
8.點贊是否按時間進行排序,頭像對應的是否正確;
9.是否能在訊息串列中顯示點贊人的昵稱、5.不同手機,系統顯示界面如何;
備注;
10.可擴展性測驗,點贊后是否能發表評論;
11.是否在未登錄時可查看被點贊的資訊,
● 如果做一個杯子的檢測,你如何測驗
參考回答:
1.功能(1)水倒水杯容量的一半
(2)水倒規定的安全線
(4)水杯容量刻度與其他水杯一致
(5)蓋子擰緊水倒不出來
(6)燙手驗證
2.性能
(1)使用最大次數或時間
(2)掉地上不易損壞
(3)蓋子擰到什么程度水倒不出來
(4)保溫時間長
(5)杯子的耐熱性
(6)杯子的耐寒性
(7)長時間放置水不會漏
(8)杯子上放置重物達到什么程度杯子會被損壞
3.界面
(1)外觀完整、美觀
(2)大小與設計一樣(高、寬、容量、直徑)
(3)拿著舒服
(4)材質與設計一樣
(5)杯子上的圖案掉落
(6)圖案遇水溶解
4.安全
(1)杯子使用的材質毒或細菌的驗證
(2)高溫材質釋放毒性
(3)低溫材質釋放毒性
5.易用性
(1)倒水方便
(2)喝水方便
(3)攜帶方便
(4)使用簡單,容易操作
(5)防滑措施
6.兼容性
(1)杯子能夠容納果汁、白水、酒精、汽油等,
7.震動測驗
(1)杯子加包裝(有填充物),六面震動,檢查產品是否能應對鐵路/公路/航空運輸,
8.可移植性
(1)杯子在不同地方、溫度環境下都可以正常使用,
● 如何對一個頁面進行測驗
參考回答:
1、UI測驗:頁面布局、頁面樣式檢查、控制元件長度是否夠長;顯示時,是否會被截斷;支持的快捷鍵,Tab鍵切換焦點順序正確性等,2、功能測驗:頁面上各類控制元件的測驗范圍,測驗點,結合控制元件的實際作用來補充檢查點: 比如, 密碼框是否*顯示, 輸入是否做trim處理等,
3、安全測驗:輸入特殊字符,sql注入,腳本注入測驗,后臺驗證測驗,對于較重要的表單 ,繞過js檢驗后臺是否驗證;資料傳輸是否加密處理,比如, 直接請求轉發,地址欄直接顯示發送字串?
4、兼容性測驗
5、性能測驗
● 如何對水壺進行測驗
參考回答:
(同快手對水杯的測驗)1.功能
(1)水倒水壺容量的一半
(2)水倒規定的安全線
(4)水壺容量刻度與其他水壺一致
(5)蓋子擰緊水倒不出來
(6)燙手驗證
2.性能
(1)使用最大次數或時間
(2)掉地上不易損壞
(3)蓋子擰到什么程度水倒不出來
(4)保溫時間長
(5)壺的耐熱性
(6)壺的耐寒性
(7)長時間放置水不會漏
(8)壺上放置重物達到什么程度壺會被損壞
3.界面
(1)外觀完整、美觀
(2)大小與設計一樣(高、寬、容量、直徑)
(3)拿著舒服
(4)材質與設計一樣
(5)壺上的圖案掉落
(6)圖案遇水溶解
4.安全
(1)壺使用的材質毒或細菌的驗證
(2)高溫材質釋放毒性
(3)低溫材質釋放毒性
5.易用性
(1)倒水方便
(2)喝水方便
(3)攜帶方便
(4)使用簡單,容易操作
(5)防滑措施
6.兼容性
(1)壺能夠容納果汁、白水、酒精、汽油等,
7.震動測驗
(1)壺加包裝(有填充物),六面震動,檢查產品是否能應對鐵路/公路/航空運輸,
8.可移植性
(1)壺在不同地方、溫度環境下都可以正常使用,
● 如何對淘寶搜索框進行測驗
參考回答:
一, 功能測驗1. 輸入關鍵字,查看: 回傳結果是否準確,回傳的文本長度需限制
1.1輸入可查到結果的正常關鍵字、詞、陳述句,檢索到的內容、鏈接正確性;
1.2輸入不可查到結果的關鍵字、詞、陳述句;
1.3輸入一些特殊的內容,如空、特殊符、標點符、極限值等,可引入等價類劃分的方法等;
2. 結果顯示:標題,賣家,銷售量,單行/多行,是否有圖片
3. 結果排序:價格 銷量 評價 綜合
4.回傳結果龐大時,限制第一頁的現實量,需支持翻頁
5. 多選項搜索:關鍵字 品牌 產地 價格區間 是否天貓 是否全國購
6. 是否支持模糊搜索,支持通配符的查詢
7, 網速慢的情況下的搜索
8. 搜索結果為空的情況
9. 未登錄情況和登錄情況下的搜索(登錄情況下 存盤用戶搜索的關鍵字/搜索習慣)
二.性能測驗:
1壓力測驗:在不同發用戶數壓力下的表現(評價指標如回應時間等)
2負載測驗:看極限能承載多大的用戶量同時正常使用
3穩定性測驗:常規壓力下能保持多久持續穩定運行
4記憶體測驗:有無記憶體泄漏現象
5大資料量測驗:如模擬從龐大的海量資料中搜索結果、或搜索出海量的結果后列示出來,看表現如何等等,
三. 易用性:互動界面的設計是否便于、易于使用
1依據不同的查詢結果會有相關的人性化提示,查不到時告知?查到時統計條數并告知?有疑似輸入條件錯誤時提示可能正確的輸入項等等處理;
2查詢出的結果羅列有序,如按點擊率或其他排序規則,確保每次查詢出的結果位置按規則列示方便定位,顯示字體、字號、色彩便于識別等等;
3標題查詢、全文檢索、模糊查詢、容錯查詢、多關鍵字組織查詢(空格間格開)等實用的檢索方式是否正常?
4輸入搜索條件的控制元件風格設計、位置擺放是否醒目便于使用者注意到,有否快照等快捷查看方式等人性化設計?
四. 兼容性
1WINDOWS/LINUX/UNIX等各類作業系統下及各版本條件下的應用
2IE/FIREFOX/GOOGLE/360/QQ等各類瀏覽器下及各版本條件下、各種顯示解析度條件下的應用
3SQL/ORACLE/DB2/MYSQL等各類資料庫存盤情況下的兼容性測驗
4簡體中文、繁體中文、英文等各類語種軟體平臺下的兼容性測驗
5IPHONE/IPAD、安卓等各類移動應用平臺下的兼容性測驗
6與各相關的監控程式的兼容性測驗,如輸入法、殺毒、監控、防火墻等工具同時使用
五. 安全性
1被洗掉、加密、授權的資料,不允許被SQL注入等攻擊方式查出來的,是否有安全控制設計;
2錄入一些資料庫查詢的保留字符,如單引號、%等等,造成查詢SQL拼接出的陳述句產生漏洞,如可以查出所有資料等等,這方面要有一些黑客攻擊的思想并引入一些工具和技術,如爬網等,
3通過白盒測驗技術,檢查一下在程式設計上是否存在安全方面的隱患;
4對涉及國家安全、法律禁止的內容是否進行了相關的過濾和控制;
● 如何對一瓶礦泉水進行測驗
參考回答:
界面測驗:查看外觀是否美觀功能度:查看水瓶漏不漏;瓶中水能不能被喝到
安全性:瓶子的材質有沒有毒或細菌
可靠性:從不同高度落下的損壞程度
可移植性:再不同的地方、溫度等環境下是否都可以正常使用
兼容性:是否能夠容納果汁、白水、酒精、汽油等
易用性:是否燙手、是否有防滑措施、是否方便飲用
用戶檔案:使用手冊是否對的用法、限制、使用條件等有詳細描述
疲勞測驗:將盛上水(案例一)放24小時檢查泄漏時間和情況;盛上汽油(案例二)放24小時檢查泄漏時間和情況等
壓力測驗:用根針并在針上面不斷加重量,看壓強多大時會穿透
跌落測驗:測驗在何種高度跌落會破壞水瓶
● 如何測驗登陸界面
參考回答:
一、功能測驗1.輸入正確的用戶名和密碼,點擊提交按鈕,驗證是否能正確登錄,
2.輸入錯誤的用戶名或者密碼,驗證登錄會失敗,并且提示相應的錯誤資訊,
3.登錄成功后能否能否跳轉到正確的頁面
4.用戶名和密碼,如果太短或者太長,應該怎么處理
5.用戶名和密碼,中有特殊字符(比如空格),和其他非英文的情況
6.記住用戶名的功能
7.登陸失敗后,不能記錄密碼的功能
8.用戶名和密碼前后有空格的處理
9.密碼是否非明文顯示顯示,使用星號圓點等符號代替,
10.牽扯到驗證碼的,還要考慮文字是否扭曲過度導致辨認難度大,考慮顏色(色盲使 用者),重繪或換一個按鈕是否好用
11.登錄頁面中的注冊、忘記密碼,登出用另一帳號登陸等鏈接是否正確
12.輸入密碼的時候,大寫鍵盤開啟的時候要有提示資訊,
13.什么都不輸入,點擊提交按鈕,檢查提示資訊,
二、界面測驗
1.布局是否合理,testbox和按鈕是否整齊,
2.testbox和按鈕的長度,高度是否復合要求,
3. 界面的設計風格是否與UI的設計風格統一,
4. 界面中的文字簡潔易懂,沒有錯別字,
三、性能測驗
1.打開登錄頁面,需要的時間是否在需求要求的時間內,
2.輸入正確的用戶名和密碼后,檢查登錄成功跳轉到新頁面的時間是否在需求要求的時間內,
3.模擬大量用戶同時登陸,檢查一定壓力下能否正常登陸跳轉,
四、安全性測驗
1.登錄成功后生成的Cookie,是否是httponly (否則容易被腳本盜取),
2.用戶名和密碼是否通過加密的方式,發送給Web服務器,
3.用戶名和密碼的驗證,應該是用服務器端驗證, 而不能單單是在客戶端用javascript 驗證,
4.用戶名和密碼的輸入框,應該屏蔽SQL注入攻擊,
5.用戶名和密碼的的輸入框,應該禁止輸入腳本 (防止XSS攻擊),
6.防止暴力破解,檢測是否有錯誤登陸的次數限制,
7. 是否支持多用戶在同一機器上登錄,
8. 同一用戶能否在多臺機器上登錄,
五、可用性測驗
1. 是否可以全用鍵盤操作,是否有快捷鍵,
2. 輸入用戶名,密碼后按回車,是否可以登陸,
3. 輸入框能否可以以Tab鍵切換,
六、兼容性測驗
1.不同瀏覽器下能否顯示正常且功能正常(IE,6,7,8,9, Firefox, Chrome, Safari,等),
2.同種瀏覽器不同版本下能否顯示正常且功能正常,
2.不同的平臺是否能正常作業,比如Windows, Mac,
3.移動設備上是否正常作業,比如Iphone, Andriod,
4.不同的解析度下顯示是否正常,
七、本地化測驗
1. 不同語言環境下,頁面的顯示是否正確,
● 請你說一下jmeter
參考回答:
Jmeter:Apache JMeter是Apache組織開發的基于Java的壓力測驗工具,用于對軟體做壓力測驗,它最初被設計用于Web應用測驗,但后來擴展到其他測驗領域, 它可以用于測驗靜態和動態資源,例如靜態檔案、Java 小服務程式、CGI 腳本、Java 物件、資料庫、FTP 服務器, 等等,JMeter 可以用于對服務器、網路或物件模擬巨大的負載,來自不同壓力類別下測驗它們的強度和分析整體性能,另外,JMeter能夠對應用程式做功能/回歸測驗,通過創建帶有斷言的腳本來驗證你的程式回傳了你期望的結果,為了最大限度的靈活性,JMeter允許使用正則運算式創建斷言,為什么使用Jmeter:
? 開源免費,基于Java撰寫,可集成到其他系統可拓展各個功能插件
? 支持介面測驗,壓力測驗等多種功能,支持錄制回放,入門簡單
? 相較于自己撰寫框架或其他開源工具,有較為完善的UI界面,便于介面除錯
? 多平臺支持,可在Linux,Windows,Mac上運行
用例生成與匯出:
Jmeter的用例格式為jmx檔案,實際為xml格式,感興趣可以學習下自己定制生成想要的jmx檔案,
生成原則:
每個功能模塊為一個獨立的jmx檔案,增加可維護性,(盡量不要將一個jmx檔案放入太多功能,后期維護成本會很高,)
模塊的私有變數保存在模塊中,多模塊共有的(例如服務器ip埠等)可以考慮存在單獨的檔案中讀取,
介面測驗不要放太多執行緒,畢竟不是做壓力測驗,意義也不大,
匯出方法:
撰寫測驗用例
檔案——保存為——確定:Jmeter運行模式及引數
GUI模式
打開已有的jmx檔案(檔案——打開)
點擊啟動按鈕運行
命令列模式
依賴:
配置jmeter環境變數(windows下為將${jmeterhome}/bin加入Path變數)
如果未加入環境變數,在執行的時候可以直接給出全路徑或在${jmeterhome}/bin下執行
命令:
jmeter -n -t <testplan filename> -l <listener filename>
引數:
-h 幫助 -> 列印出有用的資訊并退出
-n 非 GUI 模式 -> 在非 GUI 模式下運行 JMeter
-t 測驗檔案 -> 要運行的 JMeter 測驗腳本檔案
-l jtl檔案 -> 記錄結果的檔案
-r 遠程執行 -> 啟動遠程服務
-H 代理主機 -> 設定 JMeter 使用的代理主機
-P 代理埠 -> 設定 JMeter 使用的代理主機的埠號
-j 日志檔案->設定JMeter日志檔案的名稱
實體:
JMeter -n -t my_test.jmx -l log.jtl -H my.proxy.server -P 8000
執行步驟:
JMeter 默認去當前目錄尋找腳本檔案,并把日志記錄在當前目錄,比如你在 C:\tools\apache-jmeter-2.11\bin 目錄下執行以上命令,JMeter 會去該目錄下尋找 test.jmx 腳本并把執行結果放在該目錄,如果你的腳本在其他目錄,而且想要把執行結果放在另外檔案夾,可以使用絕對路徑告訴 JMeter,
執行結果查看:
GUI界面打開聚合報告
在GUI界面創建一個聚合報告
聚合報告界面點擊瀏覽,選中生成的.jtl檔案,打開
Jmeter使用
Jmeter創建介面測驗計劃實體
測驗用例應該作為測驗的基礎內容,而用例的結構可能劃分,則是用例的基礎(忽然在這里想說一下,用例僅僅是一項測驗活動的綱要,有最好,沒有的話能保證質量也OK,更不用說用例的格式問題,無論是表格還是導圖,其實都無所謂!本文的用例是指jmx檔案中的控制元件結構),
? 模塊名稱(測驗計劃):每個模塊獨立劃分為一個jmx檔案(例如登陸模塊),最好與介面類一一對應,對應的服務器資訊,資料庫資訊等可存在這里,
? 資料準備:用于測驗資料的準備(例如賬號資訊),
? 結果查看:用于放置需要查看結果的控制元件(例如結果樹),
? 執行緒組:所有的介面測驗用例放在執行緒組下,集中定義執行緒等資訊
? 獲取執行緒對應測驗資料:用于獲取針對獨立執行緒的測驗資料,例如在資料準備里面獲得了賬號資訊,在這里根據賬號資訊去資料庫獲取對應的名稱,ID等資訊,
? 請求名稱:用簡單控制器為檔案夾,內有不同的請求,簡單控制器為一個獨立的介面,不同請求對應不同的代碼路徑(例如成功請求,失敗請求等),建議請求名稱最好用英文形式,否則后期持續集成或許會出現問題(no zuo no die!),
? 在每條請求內放置正則匹配(用于應對需要回傳值作為下次請求的引數的情況)以及斷言,
● 請你進行測驗:前端下拉框實作,測驗下拉框定位方式
參考回答:
Selenium+Python自動化測驗對下拉選單的定位1.通過selenium.webdriver.support.ui的Select進行定位
下拉選單如下圖:
定位代碼:
from selenium.webdriver.support.ui import Select
# 通過index進行選擇
Select(driver.find_element_by_id("gender")).select_by_index(1)
# 通過value進行選擇
Select(driver.find_element_by_id("gender")).select_by_value("2")
# 通過選項文字進行選擇
Select(driver.find_element_by_id("gender")).select_by_visible_text("Male")
注:Select only works on <select> elements(Select只對<select>標簽的下拉選單有效).
2.定位非<select>標簽的下拉選單
非<select>標簽的下拉選單如下圖所示:
定位非<select>標簽的下拉選單中的選項,需要兩個步驟,先定位到下拉選單,再對其中的選項進行定位,
定位代碼:
# 先定位到下拉選單
drop_down = driver.find_element_by_css_selector("div#select2_container > ul")
# 再對下拉選單中的選項進行選擇
drop_down.find_element_by_id("li2_input_2").click()
注:也可以用此方法定位<select>標簽的下拉選單,
● 請你來聊一聊appium斷言
參考回答:
appium-unittest單元測驗框架中,TestCase 類提供了一些方法來檢查并報告故障,如下圖 :上面所提供的斷言方法(assertRaises(), assertRaisesRegexp()除外)接收 msg 引數,如果指定, 將體作為失敗的錯誤資訊,
try:
num = input("Enter a number:")
assert (num == 10), "The number is not 10!"
except AssertionError,msg:
print msg
print ("Sadly, num not equals to 10")
在上面的程式中,運行到的python 的例外與斷言,通過 raw_input()方法要求用戶輸入一個數字,通過 arrsert 判斷用戶輸入的 num 是否等于10 ; 通過 python 的 AssertionError 型別的例外來實捕獲這個例外, msg 接收例外資訊并列印, 注意, msg 所結構的例外資訊是我們自定義的("The number is not10!") ,
?assertEqual(first, second, msg=None):判斷 first 和 second 的值是否相等,如果不相等則測驗失敗,msg 用于定義失敗后所拋出的異 常資訊,?assertNotEqual(first, second, msg=None):測驗 first 和 second 不相等,如果相等,則測驗失敗,
?assertTure(expr,msg=None)、assertFalse(expr,msg=None):測驗 expr 為 Ture(或為 False)
以下為python 2.7 版新增的斷言方法:
?assertIs(first, second, msg=None)、assertIsNot(first, second, msg=None):測驗的 first 和 second 是(或 不是)相同的物件,
?assertIsNone(expr, msg=None)、assertIsNotNone(expr, msg=None):測驗 expr 是(或 不是)為 None
?assertIn(first, second, msg=None)、assertNotIn(first, second, msg=None):測驗 first 是(或不是)在 second 中,second 包含是否包含 first ,
?assertIsInstance(obj, cls, msg=None)、assertNotIsInstance(obj, cls, msg=None):測驗 obj 不(或 不是)cls 的一個實體, (obj 和 cls 可以是一個類或元組) ,要檢查他們的型別使用 assertIs(type(obj), cls),
● 請你來說一下購物車的測驗用例
參考回答:
界面測驗? 界面布局、排版是否合理;文字是否顯示清晰;不同賣家的商品是否區分明顯,
2.功能測驗
未登錄時:
? 將商品加入購物車,頁面跳轉到登錄頁面,登錄成功后購物車數量增加;
? 點擊購物車選單,頁面跳轉到登錄頁面,
登錄后:
? 所有鏈接是否跳轉正確;
? 商品是否可以成功加入購物車;
? 購物車商品總數是否有限制;
? 商品總數是否正確;
? 全選功能是否好用;
? 洗掉功能是否好用;
? 填寫委托單功能是否好用;
? 委托單中填寫的價格是否正確顯示;
? 價格總計是否正確;
? 商品文字太長時是否顯示完整;
? 店鋪名字太長時是否顯示完整;
? 創新券商品是否打標;
? 購物車中下架的商品是否有特殊標識;
? 新加入購物車商品排序(添加購物車中存在店鋪的商品和購物車中不存在店鋪的商品);
? 是否支持TAB、ENTER等快捷鍵;
? 商品洗掉后商品總數是否減少;
? 購物車結算功能是否好用,
3.兼容性測驗
? 不同瀏覽器測驗,
4.易用性測驗
? 洗掉功能是否有提示;是否有回到頂部的功能;商品過多時結算按鈕是否可以浮動顯示,
5.性能測驗
? 壓力測驗;并發測驗,
● 請你進行一下弱網模擬
參考回答:
方法一:charles弱網模擬配置引數決議:
bandwidth —— 帶寬,即上行、下行資料傳輸速度
utilisation —— 帶寬可用率,大部分modern是100%
round-trip latency —— 第一個請求的時延,單位是ms,
MTU —— 最大傳輸單元,即TCP包的最大size,可以更真實模擬TCP層,每次傳輸的分包情況,
Releability —— 指連接的可靠性,這里指的是10kb的可靠率,用于模擬網路不穩定,
Stability —— 連接穩定性,也會影響帶寬可用性,用于模擬移動網路,移動網路連接一般不可靠,
使用chrome的webview除錯工具,缺點是只適用于web頁面的弱網模擬,
方法二:chrome的webview除錯工具弱網模擬
使用chrome的webview除錯工具,缺點是只適用于web頁面的弱網模擬,
具體步驟:
(1)應用打開webview除錯功能,具體如下:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
}
(2)手機鏈接電腦,運行APP,進入具體H5頁面;
(3)chrome的DevTools中打開Webview:進入chrome://inspect/#devices,會顯示已經連接設備,選中待除錯webview的inspect
network頁面,No throttling下拉框,可以進行網路模擬,
方法三:iOS手機自帶Network Link Conditioner 弱網模擬
iPhone手機打開開發者選項,具體參考:
設定-開發者選項 > Network Link Conditioner 入口,
系統已經內置常見網路配置,也可以增加自定義配置,
具體配置引數:
in Bandwidth 下行帶寬,即下行網路速度
In packet loss 下行丟包率
in delay 下行延遲,單位ms
out bandwidth 上行帶寬
out packet loss 上行丟包率
out delay 上行延遲
DNS delay DNS決議延遲
protocol 支持Any,IPV4、IPV6
interface 支持Any,WI-Fi,cellular(蜂窩網)
● 你寫的測驗程式是怎么樣的,你寫過前端、后端程式嗎?
參考回答:
開發測驗驅動程式一般分為4步:1,指出需要的新特性,可以記錄下來,然后為其撰寫一個測驗,
2,撰寫特性的概要代碼,這樣程式就可以運行而沒有任何語法等方面的錯誤,但是測驗會失敗,看到測驗失敗是很重要的,這樣就能確定測驗可以失敗,如果測驗代碼中出現了錯誤,那么就有可能出現任何情況,測驗都會成功,這樣等于沒測驗任何東西,再強調一遍:在試圖測驗成功之前,先要看到它失敗,
3,為特性的概要撰寫虛設代碼,能滿足測驗要求就行,不用準確的實作功能,只要保證測驗可以通過即可,這樣一來就可以保證在開發的時候總是通過測驗了,(除了第一次測驗的時候)甚至在最初實作功能時亦是如此,
4,現在重寫(或者重構)代碼,這樣它就會做自己應該做的事,從而保證測驗一直成功,
在編碼完成時,應該保證代碼處于健康狀態--不要遺留下任何測驗失敗,
寫過前段程式,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/264099.html
標籤:其他
下一篇:shell編程基礎二
