一、webservice 的概念 Web 是使應(yīng)用程序可以與平臺和編程語言無關(guān)的方式進(jìn)行相互通信的一項(xiàng)技術(shù)。Web 服務(wù)是一個軟件接口,它描述了一組可以在網(wǎng)絡(luò)上通過標(biāo)準(zhǔn)化的 XML 消息傳遞訪問的操作。它使用基于 XML 語言的協(xié)議來描述要執(zhí)行的操作或者要與另一個 Web 服務(wù)交換的數(shù)據(jù)。一組以這種方式交互的 Web 服務(wù)在面向服務(wù)的體系結(jié)構(gòu)(Service-Oriented Architecture,SOA)中定義了特殊的 Web 服務(wù)應(yīng)用程序。 簡單的說WebService是一個SOA(面向服務(wù)的編程)的架構(gòu),它是不依賴于語言,不依賴于平臺,可以實(shí)現(xiàn)不同的語言(通過 xml 描述)間的相互調(diào)用,通過Internet進(jìn)行基于Http協(xié)議的網(wǎng)絡(luò)應(yīng)用間的交互。通過SOAP在Web上提供的軟件服務(wù),使用WSDL文件進(jìn)行說明,并通過UDDI進(jìn)行注冊。 XML:(Extensible Markup Language)擴(kuò)展型可標(biāo)記語言。面向短期的臨時數(shù)據(jù)處理、面向萬維網(wǎng)絡(luò),是Soap的基礎(chǔ)。 二、webservice接口測試 測試webservice接口,可以使用soapUI來進(jìn)行測試,下面簡單用soapUI來調(diào)用webservice接口: 1.打開soapUI,新建一個soap工程: 2.我們以天氣預(yù)報的wsdl地址為例,導(dǎo)入soapUI查看其中的所有接口信息; wsdl地址 http://www./WebServices/WeatherWebService.asmx?wsdl 3、查看接口及報文,輸入?yún)?shù)直接進(jìn)行調(diào)用
發(fā)送報文: <soapenv:Envelope xmlns:soapenv="http://schemas./soap/envelope/" xmlns:web="http://WebXml.com.cn/"> 返回報文: <soap:Envelope xmlns:soap="http://schemas./soap/envelope/" xmlns:xsi="http://www./2001/XMLSchema-instance" xmlns:xsd="http://www./2001/XMLSchema"> 1、根元素:Envelope。 2、Header元素::不是強(qiáng)制出現(xiàn),由程序員控制,主要用于攜帶一些額外的信息,比如用戶名、密碼 3、Body:調(diào)用正確,body元素內(nèi)容應(yīng)該遵守WSDL要求的格式。 三、HTTP接口 Http協(xié)議是建立在TCP協(xié)議基礎(chǔ)之上的,當(dāng)瀏覽器需要從服務(wù)器獲取網(wǎng)頁數(shù)據(jù)的時候,會發(fā)出一次Http請求。Http會通過TCP建立起一個到服務(wù)器的連接通道,當(dāng)本次請求需要的數(shù)據(jù)完畢后,Http會立即將TCP連接斷開,這個過程是很短的。所以Http連接是一種短連接,是一種無狀態(tài)的連接。 URL解析 在WWW上,每一信息資源都有統(tǒng)一的且在網(wǎng)上唯一的地址,該地址就叫URL(Uniform Resource Locator,統(tǒng)一資源定位符),它是WWW的統(tǒng)一資源定位標(biāo)志,就是指網(wǎng)絡(luò)地址。HTTP協(xié)議工作于客戶端-服務(wù)端架構(gòu)之上。瀏覽器作為HTTP客戶端通過URL向HTTP服務(wù)端即WEB服務(wù)器發(fā)送所有請求。Web服務(wù)器根據(jù)接收到的請求后,向客戶端發(fā)送響應(yīng)信息。 URL由三部分組成:資源類型、存放資源的主機(jī)域名、資源文件名。 URL的一般語法格式為(帶方括號[]的為可選項(xiàng)): protocol :// hostname[:port] / path / [;parameters][?query]#fragment 以下面的URL為例: http://blog.sina.com.cn/s/blog_537ad6610102xtb1.html?tj=hist 1、協(xié)議部分,代表頁面使用的是http協(xié)議,在Internet中可以使用多種協(xié)議,如HTTP,F(xiàn)TP等等。在"HTTP"后面的“//”為分隔符; 2、域名部分,blog.sina.com.cn,也可以使用IP地址作為域名使用如:192.168.55.14:8080,其中8080為端口,域名和端口之間使用“:”作為分隔符。端口不是一個URL必須的部分,如果省略端口部分,將采用默認(rèn)端口80/tcp; 3、虛擬目錄部分,從域名后的第一個“/”開始到最后一個“/”為止,是虛擬目錄部分。虛擬目錄也不是一個URL必須的部分。本例中的虛擬目錄是“/s/” 4、文件名部分:從域名后的最后一個“/”開始到“?”為止,是文件名部分,如果沒有“?”,則是從域名后的最后一個“/”開始到“#”為止,是文件部分,如果沒有“?”和“#”,那么從域名后的最后一個“/”開始到結(jié)束,都是文件名部分。本例中的文件名是“blog_537ad6610102xtb1.html”。文件名部分也不是一個URL必須的部分,如果省略該部分,則使用默認(rèn)的文件名 5、錨部分:從“#”開始到最后,都是錨部分。錨部分也不是一個URL必須的部分(可以理解為定位) 6、參數(shù)部分:從“?”開始到“#”為止之間的部分為參數(shù)部分,又稱搜索部分、查詢部分。本例中的參數(shù)部分為“7.參數(shù)部分:從“?”開始到“#”為止之間的部分為參數(shù)部分,又稱搜索部分、查詢部分。本例中的參數(shù)部分為“boardID=5&ID=24618&page=1”。參數(shù)可以允許有多個參數(shù),參數(shù)與參數(shù)之間用“&”作為分隔符?!?。參數(shù)可以允許有多個參數(shù),參數(shù)與參數(shù)之間用“&”作為分隔符。 二、HTTP協(xié)議結(jié)構(gòu) HTTP請求消息 客戶端發(fā)送一個HTTP請求到服務(wù)器的請求消息包括以下格式: 請求行(request line)、請求頭部(header)、空行和請求數(shù)據(jù)四個部分組成。 格式如下: <request-line> 1、請求行 請求行由請求方法字段、URL字段和HTTP協(xié)議版本字段3個字段組成,它們用空格分隔。例如,GET /index.html HTTP/1.1。 HTTP協(xié)議的請求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。 POST方法要求被請求服務(wù)器接受附在請求后面的數(shù)據(jù),常用于提交表單。 請求頭部由關(guān)鍵字/值對組成,每行一對,關(guān)鍵字和值用英文冒號“:”分隔。請求頭部通知服務(wù)器有關(guān)于客戶端請求的信息,典型的請求頭有: User-Agent:產(chǎn)生請求的瀏覽器類型。 Accept:客戶端可識別的內(nèi)容類型列表。 Host:請求的主機(jī)名,允許多個域名同處一個IP地址,即虛擬主機(jī)。 3、空行 最后一個請求頭之后是一個空行,發(fā)送回車符和換行符,通知服務(wù)器以下不再有請求頭。 請求數(shù)據(jù)不在GET方法中使用,而是在POST方法中使用。POST方法適用于需要客戶填寫表單的場合。與請求數(shù)據(jù)相關(guān)的最常使用的請求頭是Content-Type和Content-Length。 HTTP響應(yīng)消息 在接收和解釋請求消息后,服務(wù)器返回一個HTTP響應(yīng)消息。 HTTP響應(yīng)也是由三個部分組成,分別是:狀態(tài)行、消息報頭、響應(yīng)正文 報文格式: <status-line>
HTTP-Version Status-Code Reason-Phrase CRLF 其中,HTTP-Version表示服務(wù)器HTTP協(xié)議的版本;Status-Code表示服務(wù)器發(fā)回的響應(yīng)狀態(tài)代碼;Reason-Phrase表示狀態(tài)代碼的文本描述。 2、響應(yīng)報頭 響應(yīng)頭用于描述服務(wù)器的基本信息,以及數(shù)據(jù)的描述,服務(wù)器通過這些數(shù)據(jù)的描述信息,可以通知客戶端如何處理等一會兒它回送的數(shù)據(jù)。 3、響應(yīng)正文 響應(yīng)體就是響應(yīng)的消息體,如果是純數(shù)據(jù)就是返回純數(shù)據(jù),如果請求的是HTML頁面,那么返回的就是HTML代碼,如果是JS就是JS代碼 post與get的區(qū)別 get請求:向服務(wù)端獲取請求;數(shù)據(jù)放在URL里,有長度限制; post請求:向服務(wù)端發(fā)送請求;數(shù)據(jù)放在body里,無長度限制;更安全 http接口返回json串:一種通用的數(shù)據(jù)類型 接口的返回值; { "error_code": 0, "stu_info": [ { "id": 1, "name": "灝忛粦", "sex": 男", "age": 18, "addr": "北京市海淀區(qū)", "grade": "三年二班", "phone": "18612532941", "gold": 11212 } ] } 測試接口調(diào)用演練 get接口
參數(shù)名 必選 類型 說明 stu_name 是 string 學(xué)生姓名 1、直接用瀏覽器調(diào)用 2、使用postman 調(diào)用 可以看到postman選擇get方法的時候,body是禁用狀態(tài),get方法的http接口請求,一般數(shù)據(jù)都放到URL中。 返回的方式同樣也是json串的形式; 3、使用jmeter進(jìn)行g(shù)et方法的調(diào)用測試 創(chuàng)建線程組 添加HTTP請求 輸入域名、URL、選擇請求方法、添加key 添加查看結(jié)果樹 執(zhí)行接口 可以在查看結(jié)果樹中查看執(zhí)行結(jié)果及返回?cái)?shù)據(jù) post 請求接口 登錄接口
參數(shù)名 必選 類型 說明 username 是 string 用戶名 passwd 是 string 密碼
返回參數(shù)說明 參數(shù)名 類型 說明 error_code int 錯誤編碼,0為操作成功 login_info object 登錄對象信息 userId int 用戶id sign string 簽名 login_time string 登錄時間 1、postman 進(jìn)行調(diào)用 post方法的參數(shù)是放在body中的,可以看到參數(shù)放到URL中是無效的 把參數(shù)放到body中在進(jìn)行提交 放到body中,以key-value的形式進(jìn)行傳參,返回json串的形式,參照返回參數(shù)說明,可以看到登陸成功。 2、用jmeter 進(jìn)行調(diào)用測試 打開jmeter ->添加->threads->線程組
在線程組中添加->sampler->HTTP請求
輸入域名、URL、選擇方法為post 、輸入?yún)?shù) 執(zhí)行并查看結(jié)果返回值 添加學(xué)生信息接口
參數(shù)名 必選 類型 說明 name 是 string 學(xué)生姓名 grade 是 string 班級 phone 是 string 電話 sex 否 string 性別,如果不傳,默認(rèn)為男 age 否 string 年齡 ,不傳默認(rèn)為18 add 否 string 地址,如果不傳默認(rèn)為北京市昌平區(qū) 返回參數(shù)說明 參數(shù)名 類型 說明 error_code int 錯誤編碼,1000為操作成功 msg string 提示信息 如上述描述,入?yún)⑿问綖閖son 的方式,則使用key-value的形式進(jìn)行傳參就不行了,如下: 現(xiàn)在我們用正確的入?yún)⒎绞竭M(jìn)行調(diào)用 1、postman調(diào)用 在postman中,選擇方法為post,輸入URL地址,在body中選擇raw ,輸入json串格式的參數(shù)
2、使用jmeter調(diào)用接口 我們下面看一下jmeter如何進(jìn)行調(diào)用 創(chuàng)建一個http請求,輸入域名、路徑、方法為post、在body data中輸入json ,然后執(zhí)行 可以在查看結(jié)果樹中的請求項(xiàng)中查看請求報文內(nèi)容 在響應(yīng)數(shù)據(jù)中查看響應(yīng)結(jié)果,執(zhí)行成功 學(xué)生金幣充值
參數(shù)名 必選 類型 說明 stu_id 是 int 學(xué)生id gold 是 int 金幣數(shù)量 返回參數(shù)說明 參數(shù)名 類型 說明 error_code int 錯誤編碼,0為操作成功 msg string 提示信息 如上述描述,入?yún)⑿问叫枰砑觕ookie 1、postman進(jìn)行調(diào)用,添加cookie的方式 cookie說的直白點(diǎn)就是保存在用戶瀏覽器端的一個鍵值對 提到cookie肯定不能少了session,什么是session呢,session就是保存在服務(wù)器的一個鍵值對,一般session都是存在緩存里面,因?yàn)橐?jīng)常用到,要提升性能的話直接把session放到內(nèi)存里面。 首先我們通過“獲取學(xué)生信息”接口查看到學(xué)生的id信息,然后通過“登錄”接口,獲取簽名的值如下:以test 用戶為例: 查詢出ID=2341 sign值為:cd2b43f1688e472e3a516b5a2c6831e8 現(xiàn)在為學(xué)生添加金幣 2、用jmeter進(jìn)行接口的調(diào)用 用jmeter測試帶cookie的http請求需要添加http cookie管理器 我們先看一下添加cookie的場合進(jìn)行執(zhí)行 可以看到?jīng)]有添加cookie的場合,執(zhí)行不成功 現(xiàn)在我們添加httpcookie管理器,右鍵添加->配置元件->HTTP cookie管理器 添加cookie的值 執(zhí)行,查看請求的數(shù)據(jù) 獲取所有學(xué)生信息
返回參數(shù)說明 參數(shù)名 類型 說明 error_code int 錯誤編碼,0為操作成功 all_stu list 提示信息 1、我們看一下不添加header,直接用瀏覽器地址欄訪問的結(jié)果 如下,不添加header訪問,提示來路不正確
2、用postman進(jìn)行調(diào)用,添加header信息,并進(jìn)行調(diào)用 執(zhí)行,結(jié)果顯示所有的學(xué)生用戶信息 3、用jmeter進(jìn)行調(diào)用測試 添加http請求 右鍵添加->配置元件->http信息頭管理器 執(zhí)行結(jié)果成功,顯示學(xué)生信息
文件上傳類型
參數(shù)名 必選 類型 說明 file 是 file 文件 返回參數(shù)說明 參數(shù)名 類型 說明 error_code int 錯誤編碼,0為操作成功 msg string 提示信息 1、用postman進(jìn)行調(diào)用,輸入URL地址,key的類型選擇file類型 選擇文件進(jìn)行上傳 執(zhí)行操作成功 2、使用jmeter進(jìn)行調(diào)用 執(zhí)行,操作成功 |
|
來自: 法律安全 > 《接口技術(shù)》