Python自动化一--接口测试基础知识,jmeter操作介绍
一,接口概念
?1)系統(tǒng)對(duì)外的接口:比如你要從別的網(wǎng)站或服務(wù)器上獲取資源或信息,別人肯定不會(huì)把數(shù)據(jù)庫(kù)共享給你,他只能給你提供一個(gè)他們寫(xiě)好的方法來(lái)獲取數(shù)據(jù),你引用他提供的接口就能使用他寫(xiě)好的方法,從而達(dá)到數(shù)據(jù)共享的目的,比如說(shuō)咱們用的app、網(wǎng)址這些它在進(jìn)行數(shù)據(jù)處理的時(shí)候都是通過(guò)接口來(lái)進(jìn)行調(diào)用的。
?2)程序內(nèi)部的接口:方法與方法之間,模塊與模塊之間的交互,程序內(nèi)部拋出的接口,比如bbs系統(tǒng),有登錄模塊、發(fā)帖模塊等等,那你要發(fā)帖就必須先登錄,要發(fā)帖就得登錄,那么這兩個(gè)模塊就得有交互,它就會(huì)拋出一個(gè)接口,供內(nèi)部系統(tǒng)進(jìn)行調(diào)用。
二,接口分類:常用webservice和http api
1)webservice接口:是走soap協(xié)議通過(guò)http傳輸,請(qǐng)求報(bào)文和返回報(bào)文都是xml格式的,我們?cè)跍y(cè)試的時(shí)候都用通過(guò)工具才能進(jìn)行調(diào)用,測(cè)試。
2)http api接口:是走h(yuǎn)ttp協(xié)議,通過(guò)路徑來(lái)區(qū)分調(diào)用的方法,請(qǐng)求報(bào)文都是key-value形式的,返回報(bào)文一般都是json串,有g(shù)et和post等方法,這也是最常用的兩種請(qǐng)求方式。
三,前后端概念
前端是什么呢,對(duì)于web端來(lái)說(shuō),咱們使用的網(wǎng)頁(yè),打開(kāi)的網(wǎng)站,這都是前端,這些都是html、css寫(xiě)的;對(duì)于app端來(lái)說(shuō)呢,它就是咱們用的app,android或者object-C(開(kāi)發(fā)ios上的app)開(kāi)發(fā)的,它的作用就是顯示頁(yè)面,讓我們看到漂亮的頁(yè)面,以及做一些簡(jiǎn)單的校驗(yàn),比如說(shuō)非空校驗(yàn),咱們?cè)陧?yè)面上操作的時(shí)候,這些業(yè)務(wù)邏輯、功能,比如說(shuō)你購(gòu)物,發(fā)微博這些功能是由后端來(lái)實(shí)現(xiàn)的,后端去控制你購(gòu)物的時(shí)候扣你的余額,發(fā)微博發(fā)到哪個(gè)賬號(hào)下面,那前端和后端是怎么交互的呢,就是通過(guò)接口。 說(shuō)的通俗點(diǎn),前端負(fù)責(zé)貌美如花,后端負(fù)責(zé)養(yǎng)家糊口。
四,接口測(cè)試
接口測(cè)試是測(cè)試系統(tǒng)組件間接口的一種測(cè)試。接口測(cè)試主要用于檢測(cè)外部系統(tǒng)與系統(tǒng)之間以及內(nèi)部各個(gè)子系統(tǒng)之間的交互點(diǎn)。測(cè)試的重點(diǎn)是要檢查數(shù)據(jù)的交換,傳遞和控制管理過(guò)程,以及系統(tǒng)間的相互邏輯依賴關(guān)系等。
其實(shí)接口測(cè)試就和普通功能測(cè)試沒(méi)什么區(qū)別,區(qū)別就是功能測(cè)試是在頁(yè)面上點(diǎn)點(diǎn)點(diǎn),在頁(yè)面上輸入值,提交數(shù)據(jù)看結(jié)果,而接口測(cè)試沒(méi)有頁(yè)面,通過(guò)接口規(guī)范文檔上的調(diào)用地址、請(qǐng)求參數(shù),拼接報(bào)文,然后發(fā)送請(qǐng)求,檢查返回結(jié)果。
五,接口測(cè)試的必要性
1)可以發(fā)現(xiàn)很多在頁(yè)面上操作發(fā)現(xiàn)不了的bug
2)檢查系統(tǒng)的異常處理能力
3)檢查系統(tǒng)的安全性、穩(wěn)定性
4)前端隨便變,接口測(cè)好了,后端不用變
六,接口測(cè)試流程
1)需求評(píng)審,熟悉業(yè)務(wù)和需求
2)開(kāi)發(fā)提供接口文檔
3)編寫(xiě)接口測(cè)試用例
4)用例評(píng)審
5)提測(cè)后開(kāi)始測(cè)試
6)提交測(cè)試報(bào)告
七,接口文檔規(guī)范
接口文檔至少包括:接口說(shuō)明,調(diào)用URL,請(qǐng)求方法(get/post), 請(qǐng)求參數(shù),參數(shù)類型,請(qǐng)求參數(shù)說(shuō)明
八,如何測(cè)http接口
1)url?param=value¶m2=value 這種是最簡(jiǎn)單的一種,問(wèn)號(hào)前面是請(qǐng)求url,后面是請(qǐng)求的參數(shù)名和參數(shù)值,多個(gè)參數(shù)用&來(lái)連接 https://api.douban.com/v2/book/search?q=鄒偉偉
2)還有一種就是入?yún)⑹莏son串的,那就不能拼接參數(shù)了,需要借助工具來(lái)完成比如postman?
如何測(cè)webservice接口
webservice接口怎么測(cè)試呢,他不需要你在拼報(bào)文了,會(huì)給一個(gè)webservice的地址,或者wsdl文件,直接在soapui導(dǎo)入,就可以看到這個(gè)webservice里面的所有接口,也有報(bào)文,直接填入?yún)?shù)調(diào)用,看返回結(jié)果就可以了。 天氣預(yù)報(bào)wsdl地址:http://www.webservicex.net/globalweather.asmx?wsdl
九,http接口中GET請(qǐng)求和POST請(qǐng)求的區(qū)別
1)GET使用URL或Cookie傳參。而POST將數(shù)據(jù)放在BODY中。
2)GET的URL會(huì)有長(zhǎng)度上的限制,則POST的數(shù)據(jù)則可以非常大。
3)POST比GET安全,因?yàn)閿?shù)據(jù)在地址欄上不可見(jiàn)。
4)一般get請(qǐng)求用來(lái)獲取數(shù)據(jù),post請(qǐng)求用來(lái)發(fā)送數(shù)據(jù)。
cookie和session
cookie是存儲(chǔ)在瀏覽器客戶端本地的一個(gè)鍵值對(duì) ,用于登錄
session是存放在服務(wù)器端的一個(gè)鍵值對(duì)
十,HTTP狀態(tài)碼
1)200 2開(kāi)頭的都表示這個(gè)請(qǐng)求發(fā)送成功,最常見(jiàn)的就是200,就代表這個(gè)請(qǐng)求是ok的,服務(wù)器也返回了。
2)300 3開(kāi)頭的代表重定向,最常見(jiàn)的是302,把這個(gè)請(qǐng)求重定向到別的地方了,
3)400 400代表客戶端發(fā)送的請(qǐng)求有語(yǔ)法錯(cuò)誤,401代表訪問(wèn)的頁(yè)面沒(méi)有授權(quán),403表示沒(méi)有權(quán)限訪問(wèn)這個(gè)頁(yè)面,404代表沒(méi)有這個(gè)頁(yè)面
4)500 5開(kāi)頭的代表服務(wù)器有異常,500代表服務(wù)器內(nèi)部異常,504代表服務(wù)器端超時(shí),沒(méi)返回結(jié)果
十一,通用接口用例設(shè)計(jì)
1)通過(guò)性驗(yàn)證:首先肯定要保證這個(gè)接口功能是好使的,也就是正常的通過(guò)性測(cè)試,按照接口文檔上的參數(shù),正常傳入,是否可以返回正確的結(jié)果。
2)接口安全:
? ? 1.繞過(guò)驗(yàn)證,比如說(shuō)購(gòu)買了一個(gè)商品,它的價(jià)格是300元,那我在提交訂單時(shí)候,我把這個(gè)商品的價(jià)格改成3元,后端有沒(méi)有做驗(yàn)證,更狠點(diǎn),我把錢改成-3,是不是我的余額還要增加?
? ? 2.繞過(guò)身份授權(quán),比如說(shuō)修改商品信息接口,那必須得是賣家才能修改,那我傳一個(gè)普通用戶,能不能修改成功,我傳一個(gè)其他的賣家能不能修改成功
? ? 3.參數(shù)是否加密,比如說(shuō)我登陸的接口,用戶名和密碼是不是加密,如果不加密的話,別人攔截到你的請(qǐng)求,就能獲取到你的信息了,加密規(guī)則是否容易破解。
? ? 4.密碼安全規(guī)則,密碼的復(fù)雜程度校驗(yàn)
? ? 5.用戶進(jìn)行提交操作的接口要考慮防刷機(jī)制
? ? 6.業(yè)務(wù)邏輯的接口要考慮是否暴露了敏感信息(比如獲取題目接口中返回了題目的答案)
? ? 7.提交輸入信息的操作接口,要考慮xss漏洞風(fēng)險(xiǎn)(跨站腳本攻擊)??
3)異常驗(yàn)證:異常的,也就是我不按照你接口文檔上的要求輸入?yún)?shù),來(lái)驗(yàn)證接口對(duì)異常情況的校驗(yàn)。比如說(shuō)必填的參數(shù)不填,輸入整數(shù)類型的,傳入字符串類型,長(zhǎng)度是10的,傳11,總之就是你說(shuō)怎么來(lái),我就不怎么來(lái),其實(shí)也就這三種,必傳非必傳、參數(shù)類型、入?yún)㈤L(zhǎng)度。
4)根據(jù)業(yè)務(wù)邏輯:根據(jù)業(yè)務(wù)邏輯來(lái)設(shè)計(jì)的話,就是根據(jù)自己系統(tǒng)的業(yè)務(wù)來(lái)設(shè)計(jì)用例,這個(gè)每個(gè)公司的業(yè)務(wù)不一樣,就得具體的看自己公司的業(yè)務(wù)了,其實(shí)這也和功能測(cè)試設(shè)計(jì)用例是一樣的。 舉個(gè)例子,拿bbs來(lái)說(shuō),bbs的需求是這樣的:登錄失敗5次,就需要等待15分鐘之后再登錄 ;新注冊(cè)的用戶需要過(guò)了實(shí)習(xí)期才能發(fā)帖 ;刪除帖子扣除積分 。像這樣的你就要把這些測(cè)試點(diǎn)列出來(lái),然后再去造數(shù)據(jù)測(cè)試對(duì)應(yīng)的測(cè)試點(diǎn)。
5)接口性能:涉及到大數(shù)據(jù)量的接口時(shí),要考慮接口的響應(yīng)時(shí)間,還有接口的qps
? ?比如輸入以下代碼會(huì)出現(xiàn)警告框提示
? ?http://www.test.com/message.php?send=<script>alert(‘foolish!’)</script>!
? ?處理方法是對(duì)用戶提交的數(shù)據(jù)進(jìn)行過(guò)濾處理
十二,接口測(cè)試用例模板
接口測(cè)試用例包含字段:
? 1)項(xiàng)目 是哪個(gè)項(xiàng)目的??
? 2)模塊 這個(gè)接口是屬于哪個(gè)功能模塊的
? 3)用例id
? 4)接口名稱
? 5)用例標(biāo)題 用例是干嘛的
? 6)請(qǐng)求方式 GET/POST
? 7)請(qǐng)求url url地址
? 8)請(qǐng)求參數(shù)
? 9)前置條件 有依賴的時(shí)候,比如說(shuō)要測(cè)登錄失敗3次的
?10)結(jié)果驗(yàn)證 預(yù)期結(jié)果
?11)請(qǐng)求報(bào)文
?12)返回報(bào)文
?13)測(cè)試結(jié)果 通過(guò)/失敗
?14)測(cè)試人員
十三,用Jmeter做接口測(cè)試
1.jmeter測(cè)http接口腳本流程
1)添加線程組
2)添加http請(qǐng)求
3)在http請(qǐng)求中寫(xiě)入接口url、路徑、請(qǐng)求方式、參數(shù)
4)添加查看結(jié)果樹(shù)
5)調(diào)用接口、查看返回值
2.jmeter-http接口添加header
比如獲取所有學(xué)生信息接口
3.Jmeter-http接口腳本添加cookie
?
比如金幣充值
4.Jmeter-webservice腳本
1)在soapui中新建已經(jīng)soap項(xiàng)目,導(dǎo)入wsdl地址,獲取到請(qǐng)求報(bào)文、SOAPAction和請(qǐng)求url(在soapui的raw中能找到)
2)打開(kāi)jmeter新建一個(gè)線程組
3)新建一個(gè)SOAP/XML-RPC Request
4)把url、soapaction和請(qǐng)求報(bào)文寫(xiě)到soaprequest中
5)調(diào)用接口、查看返回值
?
5.jmeter-參數(shù)化
1)用戶定義的變量 這種就是為了方便管理參數(shù),只能有一個(gè)值,比如說(shuō)ip地址不經(jīng)常變化的
?
?
2)函數(shù)生成器:函數(shù)生成器可以參照一定的規(guī)則生成數(shù)據(jù),這樣的比如說(shuō)生成一些隨機(jī)數(shù)
? ? 函數(shù)助手的話,可以按照規(guī)則生成一些參數(shù),比如說(shuō)隨機(jī)數(shù)取當(dāng)前時(shí)間,最常用的就是這兩種。
? ? 1.隨機(jī)數(shù)__Random,可以在你指定的一個(gè)范圍內(nèi)取隨機(jī)值
? ? 2.取當(dāng)前時(shí)間__time,如果在有一些需要傳時(shí)間的情況下可以使用,日期格式是: yyyy-MM-dd HH:mm:ss 年-月-日-小時(shí):分鐘:秒 取唯一id,__UUID,這個(gè)就是每次會(huì)生成一個(gè)隨機(jī)的uuid,都是唯一的
?
3)參數(shù)化-從文件中讀取
從文件中讀取的話,讀取文件,取文件內(nèi)容里面的參數(shù),給它一個(gè)名字 ,使用值 從文件讀取的話,需要在線程組里面添加一個(gè)CSV Data Set Config,它就是做前面兩步的操作的
?
6.jmeter斷言
斷言是什么呢,它是用來(lái)檢查返回結(jié)果對(duì)不對(duì)的。 用來(lái)驗(yàn)證結(jié)果是否正確,如果正確的話,就代表這個(gè)請(qǐng)求的返回是正確的,如果沒(méi)有的話就代表這個(gè)請(qǐng)求的結(jié)果和我們預(yù)期的不一致,這樣我們就可以通斷言來(lái)檢查返回結(jié)果,測(cè)試是否通過(guò)。
7.jmeter關(guān)聯(lián)
關(guān)聯(lián)就是做這個(gè)事的,它就是獲取到返回的值,然后保存起來(lái),給別的請(qǐng)求使用,或者做一些其他的處理。
通過(guò)上面的關(guān)聯(lián)就可以把返回中我們想要的值抓到了,給其他請(qǐng)求使用的時(shí)候,直接使用${name}即可,name就是你關(guān)聯(lián)的時(shí)候設(shè)置的變量名。
8.jmeter操作mysql
? ?1)導(dǎo)入jdbc的jar包,因?yàn)閖meter本身不能直接連接mysql,所以需要導(dǎo)入第三方的jar包,來(lái)連接mysql
? ?2)創(chuàng)建數(shù)據(jù)庫(kù)連接配置,mysql的url、端口號(hào)、賬號(hào)、密碼
? ?3)寫(xiě)sql,執(zhí)行sql
? ?4)查看結(jié)果
?Jmeter導(dǎo)入jdbcjar包
?
Jmeter配置mysql連接
1)添加一個(gè)JDBC Connection Configuration
2)配置mysql連接池的名稱,后面發(fā)sql請(qǐng)求的時(shí)候指定連接哪里
3)數(shù)據(jù)庫(kù)的url:jdbc:mysql://192.168.1.116:3307/bugfree?allowMultiQueries=true
4)數(shù)據(jù)庫(kù)驅(qū)動(dòng):這里就是指定連接什么類型的數(shù)據(jù)庫(kù),mysql、oracle、SqlServer等等
5)賬號(hào)密碼
?
Jmeter數(shù)據(jù)庫(kù)驅(qū)動(dòng)列表
Jmeter執(zhí)行sql
Jmeter查看sql執(zhí)行結(jié)果
?
?2018-05-21
?
轉(zhuǎn)載于:https://www.cnblogs.com/tudouxifan/p/9065934.html
總結(jié)
以上是生活随笔為你收集整理的Python自动化一--接口测试基础知识,jmeter操作介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: .NETFramework-Web.Mv
- 下一篇: layui进度条bug