面試的那些事兒--01

罐裝七喜發表於2021-03-10

相信大家一直都在為面試的時候的筆試 以及面試官所提出的問題而煩惱吧 今天就來談談我的一些面試經驗以及面試覆盤吧

  剛入門的時候肯定是都是圍繞著黑盒測試也就是所謂的功能測試為中心,再進行發散性的測試,其中包括一些測試方法及其測試用例的設計讓你闡述一下你在日常工作中是如何進行測試的。相信大家都遇到過這種問題,直到前不久我去長沙面試找工作的時候,技術方面已經不僅僅只侷限於功能的一點點,更多的是效能跟安全。介面自動化以及測開到沒有要求那麼多,可見現在的趨勢發展慢慢的可以延伸到安全跟效能了,那麼我總結一下我面試時遇到過的問題吧,可能在這篇文章的你也遇到過類似的,可以一起吐槽一下呀!

 

1、設計測試用例的八大要素

 答:測試用例的編號、被測模組、測試用例的標題、前置條件、操作步驟、預期結果、實際結果、測試用例的優先順序。

 

2、整個軟體的測試周期是怎麼樣的

軟體測試生命週期:專案測試幾乎--需求分析--測試用例設計--測試用例執行
 
產品下發需求--評審需求(確定需求)--設計測試用例(這個時候可以說說你在設計測試用例的時候使用的方法,比如場景法、等價類)--評審用例(冒煙用例、介面測試用例)--開發自測(開發自己進行單元測試)--提測(冒煙測試通過)--測試(執行測試用例)--發現bug--提給對應的開發人員--修復--通過--專案後期釋出--輸出測試報告
 
PS:其實大部分公司都不會按照這些標準一步一步執行,不過面試的時候需要全部說出來,畢竟你是在面試!
 

3、如何對一部電梯進行測試

 
功能:
1.按鈕是否能夠正常執行
2.報警器是否能用
3.電梯上/下行執行是否正常
4.電梯通風口
5.螢幕是否正常
6.手機在電梯中是否有訊號
7.電梯門的開啟/關閉是否正常
8.電梯是否與其他裝置相容
9.電梯門是否有感應裝置
 
可靠性:
1.同時按上行下行鍵
2.根據按鍵次數不同選擇是否選擇和取消
 
易用性:
1.電梯內部是否防滑
2.電梯內部是否具有扶手
3.對特殊人群是否友好
4.按鈕的寬度
 
介面(ui):
1.按鈕是否美觀
2.電梯的形狀(原型,方形)
3.電梯內的空間大小
 
穩定性:
1.電梯在最大負載下的執行時間
2.電梯的繩索在一直上升狀態下最大的執行時間
3.電梯的繩索在一直下降狀態下最大執行時間
 
相容性:

1.電梯在不同氣壓下的執行情況
2.電梯與樓層牆壁之間的縫隙
3.電梯在不同電壓下執行的情況

 安全性:1.暴力測試(在電梯內中劇烈跳動,用錘子砸)
2.攝像頭能否正常看清楚電梯內的使用者
3.能否在電梯出現故障的情況下,容易將使用者解救出來
4.在電梯停電時是否有臨時電源進行供應

 

4、測試方法有哪些,請舉例說明一下

 
黑白灰 靜態動態 單元整合 確認系統 驗收回歸
 

5、一個登陸介面 讓你去設計測試用例 請從 功能 安全 效能幾個方面做一個設計

 

用例設計:測試需求分析完成後,開始用例設計,主要可以從以下幾個方面考慮:

功能測試(Function Test)

1、輸入正確的賬號和密碼,點選提交按鈕,驗證是否能正確登入。(正常輸入)

2、輸入錯誤的賬號或者密碼, 驗證登入會失敗,並且提示相應的錯誤資訊。(錯誤校驗)

3、登入成功後能否跳轉到正確的頁面(低)

4、賬號和密碼,如果太短或者太長,應該怎麼處理(安全性,密碼太短時是否有提示)

5、賬號和密碼,中有特殊字元(比如空格),和其他非英文的情況(是否做了過濾)

6、記住賬號的功能

7、登入失敗後,不能記錄密碼的功能

8、賬號和密碼前後有空格的處理

9、密碼是否加密顯示(星號圓點等)

10、牽扯到驗證碼的,還要考慮文字是否扭曲過度導致辨認難度大,考慮顏色(色盲使用者),重新整理或換一個按鈕是否好用

11、登入頁面中的註冊、忘記密碼,登出用另一帳號登入等連結是否正確

12、輸入密碼的時候,大寫鍵盤開啟的時候要有提示資訊。

13、什麼都不輸入,點選提交按鈕,看提示資訊。(非空檢查)

介面測試(UI Test)

1、佈局是否合理,2個Testbox 和一個按鈕是否對齊

2、Testbox和按鈕的長度,高度是否複合要求

3、介面的設計風格是否與UI的設計風格統一

4、介面中的文字簡潔易懂,沒有錯別字。

效能測試(Performance Test)

1、開啟登入頁面,需要幾秒

2 、輸入正確的賬號和密碼後,登入成功跳轉到新頁面,不超過5秒

安全性測試(Security Test)

1、登入成功後生成的Cookie是否有HttpOnly(降低指令碼盜取風險)

2、賬號和密碼是否通過加密的方式,傳送給Web伺服器

3、賬號和密碼的驗證,應該是用伺服器端驗證,而不能單單是在客戶端用javaScript驗證

4、賬號和密碼的輸入框,應該遮蔽SQL隱碼攻擊

5、賬號和密碼的的輸入框,應該禁止輸入指令碼(防止XSS攻擊)

6、錯誤登入的次數限制(防止暴力破解)

7、考慮是否支援多使用者在同一機器上登入;

8、考慮一使用者在多臺機器上登入

可用性測試(Usability Test)

1、是否可以全用鍵盤操作,是否有快捷鍵

2、輸入賬號,密碼後按回車,是否可以登入

3、輸入框是否可以以Tab鍵切換

相容性測試(Compatibility Test)

1、主流的瀏覽器下能否顯示正常已經功能正常(IE6~11, FireFox, Chrome, Safari 等 )

2、不同的平臺是否能正常工作,比如Windows, Mac

3、移動裝置上是否正常工作,比如iPhone, Android

4、不同的解析度

 

6、如果用fiddler做斷點,設定弱網?

 
在選單欄Rules-》Automatic BreakPoints的下拉選單裡選擇設定斷點的方式(Before Requests,After Responses),取消斷點選擇Disabled。這種設斷點的方式是對所有url生效。
 
也可以使用快捷鍵F11 
 

7、能具體說說安全測試中的sql注入嗎?如果讓你來做你會如何預防?

原文連結:https://blog.csdn.net/github_36032947/article/details/78442189
 
1.數字注入
 
在瀏覽器位址列輸入:learn.me/sql/article.php?id=1,這是一個get型介面,傳送這個請求相當於呼叫一個查詢語句:
 
 
$sql = "SELECT * FROM article WHERE id =",$id

 

正常情況下,應該返回一個id=1的文章資訊。那麼,如果在瀏覽器位址列輸入:learn.me/sql/article.php?id=-1 OR 1 =1,這就是一個SQL隱碼攻擊了,可能會返回所有文章的相關資訊。為什麼會這樣呢?

這是因為,id = -1永遠是false,1=1永遠是true,所有整個where語句永遠是ture,所以where條件相當於沒有加where條件,那麼查詢的結果相當於整張表的內容


 

2.字串注入
 
 

有這樣一個使用者登入場景:登入介面包括使用者名稱和密碼輸入框,以及提交按鈕。輸入使用者名稱和密碼,提交。

這是一個post請求,登入時呼叫介面learn.me/sql/login.html,首先連線資料庫,然後後臺對post請求引數中攜帶的使用者名稱、密碼進行引數校驗,即sql的查詢過程。假設正確的使用者名稱和密碼為user和pwd123,輸入正確的使用者名稱和密碼、提交,相當於呼叫了以下的SQL語句:

SELECT * FROM user WHERE username = 'user' ADN password = 'pwd123'

由於使用者名稱和密碼都是字串,SQL隱碼攻擊方法即把引數攜帶的資料變成mysql中註釋的字串。mysql中有2種註釋的方法:
1)'#':'#'後所有的字串都會被當成註釋來處理

使用者名稱輸入:user'#(單引號閉合user左邊的單引號),密碼隨意輸入,如:111,然後點選提交按鈕。等價於SQL語句:

SELECT * FROM user WHERE username = 'user'#'ADN password = '111'

'#'後面都被註釋掉了,相當於:

SELECT * FROM user WHERE username = 'user' 

2)'-- ' (--後面有個空格):'-- '後面的字串都會被當成註釋來處理

使用者名稱輸入:user'-- (注意--後面有個空格,單引號閉合user左邊的單引號),密碼隨意輸入,如:111,然後點選提交按鈕。等價於SQL語句:

SELECT * FROM user WHERE username = 'user'-- 'AND password = '1111'

'-- '後面都被註釋掉了,相當於:SELECT * FROM user WHERE username = 'user'  

因此,以上兩種情況可能輸入一個錯誤的密碼或者不輸入密碼就可登入使用者名稱為'user'的賬號,這是十分危險的事情。

 

如何預防SQL隱碼攻擊?

這是開發人員應該思考的問題,作為測試人員,瞭解如何預防SQL隱碼攻擊,可以在發現注入攻擊bug時,對bug產生原因進行定位。

1)嚴格檢查輸入變數的型別和格式

對於整數引數,加判斷條件:不能為空、引數型別必須為數字

對於字串引數,可以使用正規表示式進行過濾:如:必須為[0-9a-zA-Z]範圍內的字串

2)過濾和轉義特殊字元

在username這個變數前進行轉義,對'、"、\等特殊字元進行轉義,如:php中的addslashes()函式對username引數進行轉義

3)利用mysql的預編譯機制

把sql語句的模板(變數採用佔位符進行佔位)傳送給mysql伺服器,mysql伺服器對sql語句的模板進行編譯,編譯之後根據語句的優化分析對相應的索引進行優化,在最終繫結引數時把相應的引數傳送給mysql伺服器,直接進行執行,節省了sql查詢時間,以及mysql伺服器的資源,達到一次編譯、多次執行的目的,除此之外,還可以防止SQL隱碼攻擊。具體是怎樣防止SQL隱碼攻擊的呢?實際上當將繫結的引數傳到mysql伺服器,mysql伺服器對引數進行編譯,即填充到相應的佔位符的過程中,做了轉義操作。

  

 

8、如何使用Charles做斷點,修改入參請求

 
1.對要打斷點的介面右鍵,選擇【Breakpoints】
2.再次請求的時候頁面就會卡住,這個時候就能修改入參,修改完成之後點選【execute】,就會傳送請求
3.之後頁面會重新整理,這個時候就會看見返回引數,返回引數也能夠修改,再次點選【execute】,就會傳送請求了
 

9、mysql 請寫出左表查詢的語句

select a.xx b.kk from student a left join  score b  on a.id = b.id ;
 

10、mysql 請寫出右邊查詢的語句

select a.xx b.kk from student a right outer join  score b  on a.id = b.id ;

 

今天就先分享到這兒吧 未完待續......
 
 
 
歡迎轉載  請註明原出處 https://www.cnblogs.com/yushengaqingzhijiao/p/14514826.html
但未經本人允許轉載或複製   如有發現需要承擔法律責任 @罐裝七喜的後花園

 


 

相關文章