1、什么是接口?
我們注重客戶提出的每個(gè)要求,我們充分考慮每一個(gè)細(xì)節(jié),我們積極的做好成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)服務(wù),我們努力開拓更好的視野,通過不懈的努力,創(chuàng)新互聯(lián)贏得了業(yè)內(nèi)的良好聲譽(yù),這一切,也不斷的激勵(lì)著我們更好的服務(wù)客戶。 主要業(yè)務(wù):網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)站設(shè)計(jì),微信小程序開發(fā),網(wǎng)站開發(fā),技術(shù)開發(fā)實(shí)力,DIV+CSS,PHP及ASP,ASP.Net,SQL數(shù)據(jù)庫的技術(shù)開發(fā)工程師。
2、什么是接口測(cè)試?
3、接口組成的要素有哪些?
4、Python 的 requests 包是干什么的?
5、如何使用 Python 的 requests 包?
6、為什么開展接口測(cè)試?
7、為什么要寫接口測(cè)試用例?
8、接口測(cè)試用例設(shè)計(jì)主要考慮哪些?
9、接口測(cè)試用例包含哪些內(nèi)容?
10、接口測(cè)試如何設(shè)計(jì)用例?
11、通用接口用例設(shè)計(jì)?
12、接口測(cè)試報(bào)告包含哪些內(nèi)容?
13、測(cè)試指標(biāo)范圍包含哪些?
14、做接口測(cè)試運(yùn)用過哪些測(cè)試工具?
15、抓包工具用過哪些?
16、為什么進(jìn)行抓包測(cè)試?
17、TCP/IP 參考模型有哪幾層?
18、常用協(xié)議的端口號(hào)?
19、常見的狀態(tài)碼有哪些?
20、你們公司的接口測(cè)試流程是怎樣的?
21、請(qǐng)?jiān)敿?xì)闡述接口測(cè)試和 UI 測(cè)試在測(cè)試活動(dòng)中是如何協(xié)同測(cè)試的?
22、接口測(cè)試注意事項(xiàng)?
23、接口測(cè)試執(zhí)行中對(duì)比數(shù)據(jù)庫嗎?
24、請(qǐng)簡(jiǎn)述一下 cookie、session 以及 token 的區(qū)別?
25、談?wù)勀銓?duì) HTTP 協(xié)議的了解?
26、你對(duì) http 請(qǐng)求跟 webservice 請(qǐng)求的了解?
27、在接口測(cè)試中關(guān)聯(lián)是什么含義?如何使用 Postman 設(shè)置關(guān)聯(lián)?
28、接口自動(dòng)化測(cè)試框架一般分為幾層?
29、測(cè)試框架里如何做到數(shù)據(jù)和代碼分離?
1、什么是接口?
接口就是 API,意思是應(yīng)用程序編程接口。
接口本質(zhì)上是程序開發(fā)的函數(shù)和方法,提供參數(shù)和返回值。
2、什么是接口測(cè)試?
接口測(cè)試是測(cè)試系統(tǒng)組件間接口的一種測(cè)試,接口測(cè)試主要用于檢測(cè)外部系統(tǒng)和內(nèi)部系統(tǒng)之間以及各個(gè)子系統(tǒng)之間的交互點(diǎn)。測(cè)試的重點(diǎn)是檢查數(shù)據(jù)的交換、傳遞和控制管理的過程,以及系統(tǒng)間的相互邏輯依賴關(guān)系等。
3、接口組成的要素有哪些?
接口訪問的地址、請(qǐng)求的方法、參數(shù)、返回值
(1)接口訪問的地址 協(xié)議://IP 地址或域名:端口號(hào)/應(yīng)用名/功能名
(2)請(qǐng)求的方法 get、post 等
(3)參數(shù) 用戶使用接口時(shí),需要向接口提供的數(shù)據(jù)。
(4)返回值 接口給用戶的反饋結(jié)果。
4、Python 的 requests 包是干什么的?
requests 是一個(gè) HTTP 庫,作用是發(fā)送 HTTP 請(qǐng)求,獲得響應(yīng),往往使用在網(wǎng)絡(luò)爬蟲,接口自動(dòng)化測(cè)試中。
5、如何使用 Python 的 requests 包?
(1)安裝 Python
(2)安裝 requests 模塊
(3)創(chuàng)建.py 文件
(4)導(dǎo)入 requests 模塊
(5)編寫 Python 代碼
(6)調(diào)用 requests 方法
6、為什么開展接口測(cè)試?
接口測(cè)試屬于集成測(cè)試、測(cè)試接入越早,就越能在項(xiàng)目早期發(fā)現(xiàn)問題,修復(fù)問題成本降低。
接口測(cè)試非??焖?,UI 自動(dòng)化執(zhí)行一個(gè)測(cè)試用例 10s 左右,接口用例執(zhí)行一般毫秒級(jí)。
7、為什么要寫接口測(cè)試用例?
(1)理清思路,避免漏測(cè)和重復(fù)測(cè)試。
(2)提高測(cè)試效率、跟進(jìn)測(cè)試進(jìn)度、告訴領(lǐng)導(dǎo)做過、跟進(jìn)重復(fù)性工作。
(3)更好的記錄問題、發(fā)現(xiàn)問題、復(fù)現(xiàn)問題、同時(shí)這也是接口測(cè)試流程中的一個(gè)產(chǎn)物。
8、接口測(cè)試用例設(shè)計(jì)主要考慮哪些?
(1)功能是否正常。
(2)功能是否按照接口文檔實(shí)現(xiàn)、是否依賴業(yè)務(wù)、異常情況(參數(shù)異常、數(shù)據(jù)異常)、安全測(cè)試等。
9、接口測(cè)試用例包含哪些內(nèi)容?
用例名稱、接口地址、請(qǐng)求方式、前置條件、描述、請(qǐng)求頭部、請(qǐng)求參數(shù)、狀態(tài)碼、預(yù)期返回結(jié)果
10、接口測(cè)試如何設(shè)計(jì)用例?
接口測(cè)試一般考慮入?yún)⑿问降淖兓徒涌诘臉I(yè)務(wù)邏輯。
一般設(shè)計(jì)接口測(cè)試用例采用等價(jià)類、邊界值、場(chǎng)景法居多。
接口測(cè)試用例設(shè)計(jì)思路:
(1)接口業(yè)務(wù)邏輯測(cè)試,接口邏輯測(cè)試是指根據(jù)業(yè)務(wù)邏輯,輸入?yún)?shù),輸出值的描述,對(duì)正常輸入情況下所得輸出值是否正確的測(cè)試,也就是測(cè)試對(duì)外提供的接口服務(wù)是否正常。
(2)模塊接口測(cè)試,模塊接口測(cè)試是為了保證數(shù)據(jù)的安全及程序在異常情況下的邏輯正確性而進(jìn)行的測(cè)試模塊,接口測(cè)試主要包括以下幾個(gè)方面
a.鑒權(quán)碼 token 異常(為空、沒有、錯(cuò)誤、過期)
b.其他參數(shù)的異常,必填項(xiàng)的檢查,參數(shù)的長(zhǎng)度、類型、格式異常。常規(guī)的參數(shù)有數(shù)字,字符串,日期;參數(shù)長(zhǎng)度,位數(shù)、身份證、電話的長(zhǎng)度;參數(shù)的類型,數(shù)字精度,字母,中文,帶空格的參數(shù),特殊字符;日期格式,日期年月日,年月日時(shí)分秒,日期格式(包含/-:等)
c.錯(cuò)誤碼異常覆蓋
11、通用接口用例設(shè)計(jì)?
(1)通過性驗(yàn)證:首先肯定要保證這個(gè)接口功能是好使的,也就是正常的通過性測(cè)試,按照接口文檔上的參數(shù),正常傳入,是否可以返回正確的結(jié)果。
(2)參數(shù)組合:現(xiàn)在有一個(gè)操作商品的接口,有個(gè)字段 type,傳 1 的時(shí)候代表修改商品,商品 id、商品名稱、價(jià)格有一個(gè)是必傳的,type 傳 2 的時(shí)候是刪除商品,商品 id 是必傳的,這樣就要測(cè)參數(shù)組合了,type 傳 1 的時(shí)候,只傳商品名稱能不能修改成功,id、名稱、價(jià)格都傳的時(shí)候能不能修改成功。
(3)接口安全:繞過驗(yàn)證,比如說購(gòu)買了一個(gè)商品,它的價(jià)格是 300 元,那我在提交訂單時(shí)候,我把這個(gè)商品的價(jià)格改成 3 元,后端有沒有做驗(yàn)證,更狠點(diǎn),我把錢改成-3,是不是我的余額還要增加?繞過身份授權(quán),比如說修改商品信息接口,那必須得是賣家才能修改,那我傳一個(gè)普通用戶,能不能修改成功,我傳一個(gè)其他的賣家能不能修改成功。參數(shù)是否加密,比如說我登陸的接口,用戶名和密碼是不是加密,如果不加密的話,別人攔截到你的請(qǐng)求,就能獲取到你的信息了,加密規(guī)則是否容易破解。密碼安全規(guī)則,密碼的復(fù)雜程度校驗(yàn)。
(4)異常驗(yàn)證:所謂異常驗(yàn)證,也就是我不按照你接口文檔上的要求輸入?yún)?shù),來驗(yàn)證接口對(duì)異常情況的校驗(yàn)。比如說必填的參數(shù)不填,輸入整數(shù)類型的,傳入字符串類型,長(zhǎng)度是 10 的,傳 11,總之就是你說怎么來,我就不怎么來,其實(shí)也就這三種,必傳非必傳、參數(shù)類型、入?yún)㈤L(zhǎng)度。
12、接口測(cè)試報(bào)告包含哪些內(nèi)容?
系統(tǒng)接口概況、測(cè)試目的與范圍、測(cè)試工具與資源、測(cè)試記錄及結(jié)果分析(單場(chǎng)景接口、混合場(chǎng)景接口)、測(cè)試結(jié)論
13、測(cè)試指標(biāo)范圍包含哪些?
(1)被測(cè)接口接收請(qǐng)求和返回報(bào)文。
(2)被測(cè)接口返回狀態(tài)、被測(cè)接口對(duì)應(yīng)業(yè)務(wù)邏輯處理、涉及數(shù)據(jù)沉淀的處理、復(fù)雜場(chǎng)景下多個(gè)接口串聯(lián)交互。
14、做接口測(cè)試運(yùn)用過哪些測(cè)試工具?
(1)Postman
(2)JMeter
(3)SoapUI
(4)Python + requests
(5)Java + HttpClient
(6)Java + OkHttp
15、抓包工具用過哪些?
(1)Fiddler
(2)Charles
(3)Wireshark
16、為什么進(jìn)行抓包測(cè)試?
有些時(shí)候公司沒有標(biāo)準(zhǔn)的接口文檔,測(cè)試人員只能抓包來獲取接口信息。
抓包可以迅速找到請(qǐng)求,通過抓包可以查看整個(gè)請(qǐng)求過程,以及響應(yīng)過程,可以通過抓包來分辨前臺(tái)還是后臺(tái) bug。
通過抓包,可以查看是否有敏感信息泄露,比如用戶密碼和個(gè)人賬號(hào)信息等數(shù)據(jù)。
通過抓包進(jìn)行測(cè)試,攔截請(qǐng)求,修改請(qǐng)求數(shù)據(jù),查看對(duì)應(yīng)響應(yīng)結(jié)果,抓包本身就是接口測(cè)試的一部分。
17、TCP/IP 參考模型有哪幾層?
應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、網(wǎng)絡(luò)接口層
18、常用協(xié)議的端口號(hào)?
(1)21/tcp FTP 文件傳輸協(xié)議
(2)22/tcp SSH 安全登錄、文件傳送(SCP)和端口重定向
(3)23/tcp Telnet 不安全的文本傳送
(4)25/tcp SMTP Simple Mail Transfer Protocol(E-mail)
(5)69/udp TFTP Trivial File Transfer Protocol(微型文件傳輸協(xié)議)
(6)80/tcp HTTP 超文本傳送協(xié)議(WWW)
(7)110/tcp POP3 Post Office Protocol(E-mail)
(8)443/tcp HTTPS used for securely transferring web pages
(9)3389/tcp 遠(yuǎn)程訪問 5631/tcp
(10)5632/udp pcanywhere 端口號(hào)
(11)1433 SqlServer 服務(wù)端口號(hào)
(12)1521 Oracle 服務(wù)端口號(hào)
(13)3306 Mysql 服務(wù)端口號(hào)
(14)8080 Tomcat 默認(rèn)服務(wù)端口號(hào)
19、常見的狀態(tài)碼有哪些?
(1)1XX 信息提示,用于指定客戶端相應(yīng)的某些動(dòng)作。
(2)2XX 成功,用于表示請(qǐng)求成功。
(3)3XX 重定向,用于移動(dòng)的文件并且常被包含在定位頭信息中制定的新的地址信息。
(4)4XX 客戶端錯(cuò)誤,用于指出客戶端的錯(cuò)誤。
(5)5XX 服務(wù)器錯(cuò)誤,用于指出服務(wù)器的錯(cuò)誤。
20、你們公司的接口測(cè)試流程是怎樣的?
(1)從開發(fā)中取得接口文檔,了解接口業(yè)務(wù),主要包括接口地址、請(qǐng)求方式、入?yún)?、出參、返回格式等信息?/p>
(2)使用 Jmeter 進(jìn)行接口測(cè)試,創(chuàng)建一個(gè)線程組,然后建立一個(gè) http 請(qǐng)求默認(rèn)值,再新建很多 http 請(qǐng)求,一個(gè)請(qǐng)求是一個(gè)用例,輸入相應(yīng)接口路徑、訪問方式、參數(shù)等,創(chuàng)建斷言和察看結(jié)果樹。
(3)最后調(diào)用并執(zhí)行測(cè)試用例,編寫測(cè)試報(bào)告。
(4)在做接口測(cè)試的時(shí)候遇到過很多問題,都是自己獨(dú)立解決的,比如返回值亂碼(修改 Jmeter 的配置文件為 UTF-8)。
21、請(qǐng)?jiān)敿?xì)闡述接口測(cè)試和 UI 測(cè)試在測(cè)試活動(dòng)中是如何協(xié)同測(cè)試的?
接口測(cè)試和 UI 測(cè)試這兩塊其實(shí)是有一部分是重疊的,UI 測(cè)試是通過前端寫的界面來調(diào)用接口,而接口測(cè)試是直接調(diào)接口。所以排除前端的處理的邏輯和調(diào)用的正確性,在理論上接口測(cè)試是可以覆蓋所有的 UI 測(cè)試。但實(shí)際過程中,如果只是在接口層覆蓋所有的業(yè)務(wù)流,在 UI 上只測(cè)試前端的邏輯,最終的結(jié)果可能會(huì)是忽視很多原有的功能點(diǎn),導(dǎo)致了 UI 測(cè)試的不充分。所以存在多人分工且時(shí)間充分的時(shí)候可以嘗試接口去做業(yè)務(wù)流的全覆蓋,否則不要輕易嘗試。
22、接口測(cè)試注意事項(xiàng)?
(1)改變請(qǐng)求參數(shù),看響應(yīng)結(jié)果是否和接口文檔一致。
(2)查看參數(shù)是否有敏感信息(比如個(gè)人賬戶信息,資金信息)。
(3)查看是否對(duì)關(guān)鍵參數(shù)進(jìn)行加密處理(密碼信息)。
(4)所有列表頁接口必須考慮排序值。
(5)接口返回的圖片地址能否打開,圖片尺寸是否符合需求。
(6)接口有翻頁時(shí),頁碼與頁數(shù)的異常值測(cè)試。
(7)當(dāng)輸出參數(shù)有聯(lián)動(dòng)性時(shí),需要校驗(yàn)返回兩參數(shù)的實(shí)際結(jié)果是否都符合需求每個(gè)接口入?yún)⒌哪J(rèn)值、異常類型、非空校驗(yàn)。
(8)入?yún)⒅С侄鄠€(gè)值時(shí),要考慮傳的值的個(gè)數(shù)多的情況下,接口會(huì)不會(huì)報(bào)錯(cuò)。
23、接口測(cè)試執(zhí)行中對(duì)比數(shù)據(jù)庫嗎?
肯定要對(duì)比,因?yàn)榻涌诜祷刂档臄?shù)據(jù)來源于數(shù)據(jù)庫,接口對(duì)數(shù)據(jù)的操作還要進(jìn)行深層次的數(shù)據(jù)庫檢查。
24、請(qǐng)簡(jiǎn)述一下 cookie、session 以及 token 的區(qū)別?
cookie 數(shù)據(jù)存放在客戶的瀏覽器上、session 數(shù)據(jù)放在服務(wù)器上、token 是接口測(cè)試時(shí)鑒權(quán)碼,一般情況下登陸后才可以獲取到 token,然后在每次請(qǐng)求接口時(shí)需要帶上 token 參數(shù)。
cookie 不安全,別人可以分析存在本地的 cookie 并進(jìn)行 cookie 欺騙,考慮到安全應(yīng)當(dāng)使用 session 可以將登錄信息等重要信息存放為 session,其他信息可以保存在 cookie。
25、談?wù)勀銓?duì) HTTP 協(xié)議的了解?
超文本傳輸協(xié)議,端口為 80,是由請(qǐng)求和響應(yīng)兩部分組成的。
請(qǐng)求是由請(qǐng)求頭,請(qǐng)求行,請(qǐng)求正文組成;響應(yīng)是由響應(yīng)頭、響應(yīng)行、響應(yīng)正文組成。
面向安全的話使用 https。
26、你對(duì) http 請(qǐng)求跟 webservice 請(qǐng)求的了解?
(1)http api 接口:是走 http 協(xié)議,通過路徑來區(qū)分調(diào)用的方法,請(qǐng)求報(bào)文都是 key-value 形式的,返回報(bào)文一般都是 json 串,有 get 和 post 等方法,這也是最常用的兩種請(qǐng)求方式??梢允褂玫墓ぞ哂?postman、RESTClient、jmeter、loadrunner 等。
(2)webservice 接口:是走 soap 協(xié)議通過 http 傳輸,請(qǐng)求報(bào)文和返回報(bào)文都是 xml 格式的,都是通過工具才能進(jìn)行調(diào)用與測(cè)試??梢允褂玫墓ぞ哂?SoapUI、jmeter、loadrunner 等。
27、在接口測(cè)試中關(guān)聯(lián)是什么含義?如何使用 Postman 設(shè)置關(guān)聯(lián)?
關(guān)聯(lián)就是把上一個(gè)接口返回值的部分截取出來,作為下一個(gè)接口的參數(shù),能讓接口串聯(lián)運(yùn)行。
在 Postman 中設(shè)置關(guān)聯(lián)的步驟如下:
(1)通過正則表達(dá)式提取的方式或 json 取值的方式把下一個(gè)接口需要的信息從上一個(gè)接口截取出來。
(2)使用設(shè)置全局變量的代碼把取出來的值保存到全局變量里。
(3)在下一個(gè)接口中,使用(全局變量)代替要替換的靜態(tài)值。
28、接口自動(dòng)化測(cè)試框架一般分為幾層?
自動(dòng)化測(cè)試框架一般分為 5 層(配置層,腳本層,數(shù)據(jù)層,測(cè)試報(bào)告層,驅(qū)動(dòng)層)
接口項(xiàng)目工程規(guī)劃大致可分為幾類,首先是測(cè)試結(jié)果類,比如說叫 test_rusult,里面存放一些比如日志文件,測(cè)試報(bào)告。然后是測(cè)試用例 testcase,里面分模塊存放測(cè)試用例。接下來是公共方法類,比如說叫 public,或者是 tools,里面存放一些,讀取 excel 數(shù)據(jù)的方法,發(fā)送 http 請(qǐng)求的方法,收集 log 日志的方法,發(fā)送郵件,操作數(shù)據(jù)庫等方法。還有就是配置文件類,比如說叫 config,里面存放一些指定運(yùn)行部分用例的配置文件,連接數(shù)據(jù)庫的配置文件。最后是寫一個(gè) run 方法,運(yùn)行所有的用例。
29、測(cè)試框架里如何做到數(shù)據(jù)和代碼分離?
第一種:寫在 excel 表格里,像這種主要是讀取 excel 數(shù)據(jù)有點(diǎn)麻煩,常用的用來讀取 excel 的第三方庫有 openpyxl,xlrd 等。當(dāng)然讀取 excel 數(shù)據(jù)最好用的還是用來做數(shù)據(jù)分析的 pandas 模塊,不用寫那么多 for 循環(huán)。
第二種:數(shù)據(jù)存放到 yaml 文件里,一個(gè)模塊或者是一個(gè)功能寫一個(gè) yaml 文件,最后寫個(gè)讀取 yaml 文件的公共方法就行了。yaml 格式的文件比較簡(jiǎn)單。
第三種:存放在數(shù)據(jù)庫里面。
第四種:數(shù)據(jù)存放在 json 文件里。
從測(cè)試過程的角度來說我們也可以把數(shù)據(jù)庫測(cè)試分為:
系統(tǒng)測(cè)試
傳統(tǒng)軟件系統(tǒng)測(cè)試的測(cè)試重點(diǎn)是需求覆蓋,而對(duì)于我們的數(shù)據(jù)庫測(cè)試同樣也需要對(duì)需求覆蓋進(jìn)行保證。那么數(shù)據(jù)庫在初期設(shè)計(jì)中也需要對(duì)這個(gè)進(jìn)行分析,測(cè)試。例如存儲(chǔ)過程,視圖,觸發(fā)器,約束,規(guī)則等我們都需要進(jìn)行需求的驗(yàn)證確保這些功能設(shè)計(jì)是符合需求的.另一方面我們需要確認(rèn)數(shù)據(jù)庫設(shè)計(jì)文檔和最終的數(shù)據(jù)庫相同,當(dāng)設(shè)計(jì)文檔變化時(shí)我們同樣要驗(yàn)證改修改是否落實(shí)到數(shù)據(jù)庫上。
這個(gè)階段我們的測(cè)試主要通過數(shù)據(jù)庫設(shè)計(jì)評(píng)審來實(shí)現(xiàn)。
集成測(cè)試
集成測(cè)試是主要針對(duì)接口進(jìn)行的測(cè)試工作,從數(shù)據(jù)庫的角度來說和普通測(cè)試稍微有些區(qū)別對(duì)于數(shù)據(jù)庫測(cè)試來說,需要考慮的是數(shù)據(jù)項(xiàng)的修改操作、數(shù)據(jù)項(xiàng)的增加操作、數(shù)據(jù)項(xiàng)的刪除操作、數(shù)據(jù)表增加滿、數(shù)據(jù)表刪除空、刪除空表中的記錄、數(shù)據(jù)表的并發(fā)操作、針對(duì)存儲(chǔ)過程的接口測(cè)試、結(jié)合業(yè)務(wù)邏輯做關(guān)聯(lián)表的接口測(cè)試。
同樣我們需要對(duì)這些接口考慮采用等價(jià)類、邊界值、錯(cuò)誤猜測(cè)等方法進(jìn)行測(cè)試。
單元測(cè)試
單元測(cè)試側(cè)重于邏輯覆蓋,相對(duì)對(duì)于復(fù)雜的代碼來說,數(shù)據(jù)庫開發(fā)的單元測(cè)試相對(duì)簡(jiǎn)單些,可以通過語句覆蓋和走讀的方式完成。
系統(tǒng)測(cè)試相對(duì)來說比較困難,這要求有很高的數(shù)據(jù)庫設(shè)計(jì)能力和豐富的數(shù)據(jù)庫測(cè)試經(jīng)驗(yàn)。而集成測(cè)試和單元測(cè)試就相對(duì)簡(jiǎn)單了。
而我們也可以從測(cè)試關(guān)注點(diǎn)的角度對(duì)數(shù)據(jù)庫進(jìn)行分類:
功能測(cè)試
對(duì)數(shù)據(jù)庫功能的測(cè)試我們可以依賴與工具進(jìn)行:
DBunit:一款開源的數(shù)據(jù)庫功能測(cè)試框架,可以使用類似與Junit的方式對(duì)數(shù)據(jù)庫的基本操作進(jìn)行白盒的單元測(cè)試,對(duì)輸入輸出進(jìn)行校驗(yàn)。
QTP:大名鼎鼎的自動(dòng)測(cè)試工具,通過對(duì)對(duì)象的捕捉識(shí)別,我們可以通過QTP來模擬用戶的操作流程,通過其中的校驗(yàn)方法或者結(jié)合數(shù)據(jù)庫后臺(tái)的監(jiān)控對(duì)整個(gè)數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行測(cè)試。個(gè)人覺得比較偏向灰盒。
DataFactory:一款優(yōu)秀的數(shù)據(jù)庫數(shù)據(jù)自動(dòng)生成工具,通過它你可以輕松的生成任意結(jié)構(gòu)數(shù)據(jù)庫,對(duì)數(shù)據(jù)庫進(jìn)行填充,幫助你生成所需要的大量數(shù)據(jù)從而驗(yàn)證我們數(shù)據(jù)庫中的功能是否正確。這是屬于黑盒測(cè)試。
數(shù)據(jù)庫性能雖然我們的硬件最近幾年進(jìn)步很快,但是我們需要處理的數(shù)據(jù)以更快的速度在增加。幾億條記錄的表格在現(xiàn)在是司空見慣的,如此龐大的數(shù)據(jù)量在大量并發(fā)連接操作時(shí),我們不能像以前一樣隨意的使用查詢,連接查詢,嵌套查詢,視圖,這些操作如果不當(dāng)會(huì)給系統(tǒng)帶來非常巨大的壓力,嚴(yán)重影響系統(tǒng)性能。
性能優(yōu)化分4部分:
1、物理存儲(chǔ)方面
2、邏輯設(shè)計(jì)方面
3、數(shù)據(jù)庫的參數(shù)調(diào)整
4、SQL語句優(yōu)化
性能測(cè)試:
我們?nèi)绾螌?duì)性能方面進(jìn)行測(cè)試呢,業(yè)界也提供了很多工具通過數(shù)據(jù)庫系統(tǒng)的SQL語句分析工具,我們可以分析得到數(shù)據(jù)庫語句執(zhí)行的瓶頸,從而優(yōu)化SQL語句。
Loadrunner:這個(gè)不用多說,我們可以通過對(duì)協(xié)議的編程來對(duì)數(shù)據(jù)庫做壓力測(cè)試。
Swingbench:(這是一個(gè)重量級(jí)別的feature,類似LR,而且非常強(qiáng)大,只不過專門針對(duì)oracle而已)數(shù)據(jù)庫廠商也意識(shí)到這點(diǎn),例如oracle11g已經(jīng)提供了real applicationtest,提供數(shù)據(jù)庫性能測(cè)試,分析系統(tǒng)的應(yīng)用瓶頸。
還有很多第三方公司開發(fā)了SQL語句優(yōu)化工具來幫助你自動(dòng)的進(jìn)行語句優(yōu)化工作從而提高執(zhí)行效率。
安全測(cè)試:
軟件日益復(fù)雜,而數(shù)據(jù)又成為了系統(tǒng)中重中之重的核心,從以往對(duì)系統(tǒng)的破壞現(xiàn)在更傾向于對(duì)數(shù)據(jù)的獲取和破壞。而數(shù)據(jù)庫的安全被提到了最前端自從SQL 注入攻擊被發(fā)現(xiàn),冒失萬無一失的數(shù)據(jù)庫一下從后臺(tái)變?yōu)榱饲芭_(tái),而一旦數(shù)據(jù)庫被攻破,整個(gè)系統(tǒng)也會(huì)暴露在黑客的手下,通過數(shù)據(jù)庫強(qiáng)大的存儲(chǔ)過程,黑客可以輕松的獲得整個(gè)系統(tǒng)的權(quán)限。而SQL的注入看似簡(jiǎn)單缺很難防范,對(duì)于安全測(cè)試來說,如何防范系統(tǒng)被注入是測(cè)試的難點(diǎn)。
業(yè)界也有相關(guān)的數(shù)據(jù)庫注入檢測(cè)工具,來幫助用戶對(duì)自身系統(tǒng)進(jìn)行安全檢測(cè)。
對(duì)于這點(diǎn)來說業(yè)界也有標(biāo)準(zhǔn),例如ISO IEC 21827,也叫做SSE CMM 3.0,是CMM和ISO的集成的產(chǎn)物,專門針對(duì)系統(tǒng)安全領(lǐng)域的另外一方面,數(shù)據(jù)庫的健壯性,容錯(cuò)性和恢復(fù)能力也是我們測(cè)試的要點(diǎn)
我們也可以發(fā)現(xiàn)功能測(cè)試,性能測(cè)試,安全測(cè)試,是一個(gè)由簡(jiǎn)到繁的過程,也是數(shù)據(jù)庫測(cè)試人員需要逐步掌握的技能,這也是以后公司對(duì)數(shù)據(jù)庫測(cè)試人員的要求。
URL:統(tǒng)一資源定位符。
URI:統(tǒng)一資源標(biāo)識(shí)符。
URL可以看作是URI的具體實(shí)現(xiàn)。
·protocol
·domain
·port
·path
·url parameters
示例:
協(xié)議,一般是指://之前的部分,表明通信雙方所采用的通信協(xié)議。
協(xié)議:是指通信雙方對(duì)于通信的數(shù)據(jù)所采用的數(shù)據(jù)格式、規(guī)程、含義等所作的約定。
對(duì)于協(xié)議,建議大家了解兩個(gè)模型:OSI模型和TCP/IP模型。
從接口測(cè)試的角度來說,在不同的通信層可以通過不同的協(xié)議來實(shí)現(xiàn)接口的測(cè)試。
一般來說,應(yīng)用層的協(xié)議是最接近用戶,最容易實(shí)現(xiàn)的。
常見的應(yīng)用層協(xié)議有:
http
https http+ssl
ftp
ssh
smtp
pop3
mysql
oracle
MS SQL
是指://之后的服務(wù)器地址。域名可以是真實(shí)的服務(wù)器機(jī)器的機(jī)器名、IP地址、虛擬的域名。
示例:
ke.qq.com
192.168.1.100
是指通過冒號(hào)連接在域名之后的數(shù)字。
端口:0--65535
端口是由服務(wù)器自身來進(jìn)行設(shè)定的,是服務(wù)器用來發(fā)布服務(wù),監(jiān)聽客戶端的請(qǐng)求的。
如果服務(wù)器所設(shè)置的監(jiān)聽端口是所提供服務(wù)的通信協(xié)議的默認(rèn)通信端口,則用戶在訪問服務(wù)器時(shí),可以省略端口。
常見的協(xié)議及其默認(rèn)的通信端口:
http 80
https 443
ftp 21
ssh 22
smtp 25
pop3 110
mysql 3306
oracle 1521
MS SQL 1433
是指在端口之后的所有內(nèi)容。
一般來說path是指我們要訪問的資源or服務(wù)在服務(wù)器的容器下的路徑。
通常path就會(huì)和接口的功能直接掛鉤。
URL地址參數(shù)也是屬于PATH的一部分。
url地址參數(shù)是指通過問號(hào)的方式連接在path之后的部分。
url地址參數(shù)采用的是鍵值對(duì)的方式傳遞參數(shù)值,多個(gè)鍵值對(duì)之間使用作為連接符。
http協(xié)議:HypeText Transfer Protocol,超文本傳輸協(xié)議。
目前來說,http協(xié)議是絕大多數(shù)服務(wù)首選的通信協(xié)議。
http協(xié)議是一種基于request(請(qǐng)求)和response(響應(yīng))的協(xié)議。
這就意味著http協(xié)議是分為兩個(gè)部分:
·http request:http請(qǐng)求,是用來定義請(qǐng)求的發(fā)送者應(yīng)該如何去組織數(shù)據(jù)。
·http response:http響應(yīng),是用來定義請(qǐng)求的處理者應(yīng)該如何去組織返回的數(shù)據(jù)。
http請(qǐng)求是由三個(gè)部分構(gòu)成:
請(qǐng)求行是指請(qǐng)求數(shù)據(jù)包中的第一行內(nèi)容。
示例:GET /phpwind/ HTTP/1.1
一般來說,請(qǐng)求行中包含以下信息:
所有的http請(qǐng)求都必須有請(qǐng)求方法,如果沒有指定,則默認(rèn)為get方法。
常見的請(qǐng)求方法有:get、post、put、patch、delete、options、trace、header等。
接口使用何種請(qǐng)求方法,和測(cè)試沒有關(guān)系,只和設(shè)計(jì)、開發(fā)有關(guān)系。
get和post的區(qū)別:
請(qǐng)求路徑就是指URL中的路徑部分,包含url地址參數(shù)。
請(qǐng)求頭是指請(qǐng)求數(shù)據(jù)包中從第二行開始到第一個(gè)空行截止的所有內(nèi)容。
請(qǐng)求頭是客戶端用來和服務(wù)器進(jìn)行交互信息、控制信息的交互的,通常和業(yè)務(wù)本身是沒有關(guān)系。
請(qǐng)求頭是鍵值對(duì)應(yīng)的。
標(biāo)準(zhǔn)的請(qǐng)求頭都是有其特殊的含義和作用的。
比較常用的請(qǐng)求頭:
· User-Agent :簡(jiǎn)稱UA,客戶端用來告知服務(wù)器,客戶端的環(huán)境信息。
PS:服務(wù)器通常會(huì)根據(jù)該信息頭來判斷客戶請(qǐng)求的來源。
session和cookie的維持和該請(qǐng)求頭有關(guān)(一致性)。
· Content-Type :如果請(qǐng)求body中有數(shù)據(jù),則該信息一定要添加。
PS:
·該信息頭是用來告知服務(wù)器,請(qǐng)求主體中的數(shù)據(jù)的數(shù)據(jù)組織格式。
常見的組織格式有:
鍵值對(duì)格式:
示例: aaa=1bbb=2
混合表單格式,多用于文件上傳類型的接口。boundary表示分隔符,實(shí)際的請(qǐng)求主體中的分隔符比請(qǐng)求頭中的分隔符要多"--"。
表示發(fā)送的是json格式的數(shù)據(jù)。
示例:{"aaa":1,"bbb":2}
·請(qǐng)求中具體使用何種格式的數(shù)據(jù)組織格式,由接口本身決定。
·要避免在全局請(qǐng)求頭中使用Content-Type。
·c ookie、token :狀態(tài)相關(guān)的信息頭。一般來說cookie不用額外處理。
token這樣的信息頭基本上都需要做關(guān)聯(lián)處理。
是指請(qǐng)求數(shù)據(jù)包中從第一個(gè)空行開始到最后的所有內(nèi)容。
·請(qǐng)求主體一般都是和業(yè)務(wù)相關(guān)的,是客戶端發(fā)送給服務(wù)器的業(yè)務(wù)數(shù)據(jù)。
·請(qǐng)求主體中的數(shù)據(jù)是有特定組織格式(Content-Type),由開發(fā)決定,和測(cè)試無關(guān)。
·查看請(qǐng)求數(shù)據(jù),建議通過raw格式。。尤其是進(jìn)行調(diào)試的時(shí)候。
一般來說http響應(yīng)也是分為三個(gè)部分。
·response line:響應(yīng)行
·response headers:響應(yīng)頭
·response body:響應(yīng)主體
響應(yīng)行是指響應(yīng)數(shù)據(jù)包中的第一行內(nèi)容。
通常來說包含下列信息。
示例:
HTTP/1.1 200 OK
響應(yīng)代碼,又叫status、status code,狀態(tài)、狀態(tài)碼。
響應(yīng)代碼是服務(wù)器用來告知客戶端,服務(wù)器對(duì)于請(qǐng)求的通信邏輯層面的處理結(jié)果。
響應(yīng)代碼是三位長(zhǎng)度的數(shù)字,根據(jù)首位數(shù)字的不同,可以分為5類。
1xx:表示連接建立過程中的交互、控制信息。
2xx:表示服務(wù)器處理成功,典型就是200.
3xx:表示重定向。
PS:1xx、2xx、3xx都表示請(qǐng)求成功,即服務(wù)器正常工作。
4xx:表示客戶端錯(cuò)誤。
如:400、401、403、404、405
5xx:表示服務(wù)器錯(cuò)誤。
如:500、502、501
PS:在接口測(cè)試時(shí),不論出現(xiàn)4xx、5xx都表示腳本出錯(cuò)了。
腳本出錯(cuò)有兩種情況:
·協(xié)議層面:http請(qǐng)求的格式組裝問題。
·業(yè)務(wù)層面:業(yè)務(wù)相關(guān)的數(shù)據(jù)不合法導(dǎo)致。
PS:一旦出錯(cuò),我們需要做的就是去對(duì)比成功的請(qǐng)求數(shù)據(jù)包(包含頭和body)和失敗的請(qǐng)求數(shù)據(jù)包。
響應(yīng)頭是指響應(yīng)數(shù)據(jù)包中從第二行開始到第一個(gè)空行截止的部分。
響應(yīng)頭是服務(wù)器用來告知客戶端,服務(wù)器的一些交互、控制信息。
比較常見的:
set-cookie:是服務(wù)器用來返回cookie給客戶端。
響應(yīng)主體,是指響應(yīng)數(shù)據(jù)包中從第一個(gè)空行開始到最后的所有內(nèi)容。
·響應(yīng)主體有可能是壓縮、編碼的,有些測(cè)試工具會(huì)自動(dòng)處理,有些需要編程處理。
·響應(yīng)主體一般都是服務(wù)器對(duì)于接口的處理結(jié)果,和業(yè)務(wù)相關(guān)。
這就意味著我們要判斷一個(gè)接口的功能是否正確,或者要提取服務(wù)器返回的數(shù)據(jù),通常都要對(duì)響應(yīng)主體進(jìn)行操作。
1、首先使用VMVARE10搭建一個(gè)redhat6.5的虛擬機(jī)。
2、在虛擬redhat6.5上安裝ORACLE11G的數(shù)據(jù)庫。
3、使用oewizard導(dǎo)入測(cè)試數(shù)據(jù),可以根據(jù)向?qū)崾具M(jìn)行數(shù)據(jù)導(dǎo)入。
4、使用swingbench進(jìn)行壓力測(cè)試。
測(cè)試步驟:
1、導(dǎo)數(shù)據(jù)之前需要修改temp表空間大小,使其能夠容納下相應(yīng)的導(dǎo)入數(shù)據(jù)
create temporarytablespace temp tempfile '/home/oracle/oradata/orcl/temp.dbf' size 1g;
alter databasedefault temporary tablespace temp;
2、 安裝swingbench測(cè)試軟件,直接解壓縮即可運(yùn)行。
unzip -x swingbench25919.zip
3、進(jìn)入swingbench/bin目錄執(zhí)行oewizard導(dǎo)入1G測(cè)試數(shù)據(jù),并修改數(shù)據(jù)庫連接名和DBA密碼
wKioL1Qx2h3TrIIGAAGyVq92CVA180.jpg
輸入導(dǎo)入數(shù)據(jù)文件存放位置:
wKiom1Qx2nGTFbZFAAGBnRUybxU038.jpg
選擇導(dǎo)入1G數(shù)據(jù):
wKioL1Qx2tnyThWoAAE8qLLgIJI464.jpg
數(shù)據(jù)導(dǎo)完之后在該目錄下運(yùn)行swingbench執(zhí)行測(cè)試,修改數(shù)據(jù)庫連接名,用戶連接數(shù)設(shè)置為300,測(cè)試時(shí)間設(shè)置為10分鐘
wKiom1Qx2v6S6yjvAAKAl63J5mg784.jpg
修改Distributed Controls用于測(cè)試過程中搜集測(cè)試監(jiān)控信息,修改完之后測(cè)試連接是否正常, 并可以統(tǒng)計(jì)主機(jī)的cpu disk IO 信息
wKioL1Qx24DDSssqAAFmiLc2VSU132.jpg
還可以 拉出AWR報(bào)表
wKioL1Qx3O2gzw45AADH_p4CEeQ979.jpg
設(shè)置 insert,update ,select的比例
wKioL1Qx3RHB32ITAAEK9ABjiPI261.jpg
設(shè)置完成之后,點(diǎn)擊左上角綠色按鈕執(zhí)行測(cè)試
wKiom1Qx24zgsNQ-AAEJ51YcKSs614.jpg
wKiom1Qx3QaxFssnAAGpJeiYV6Q924.jpg
測(cè)試結(jié)果可保持為XML文檔,
配置SQL Server 2000數(shù)據(jù)庫連接池時(shí),屬性validationQuery默認(rèn)值為“select 1”,
而在Oracle數(shù)據(jù)庫連接池中應(yīng)設(shè)置為“validationQuery="select 1 from dual"”
在JDBC Connection Configuration中修改validation Query