1. 程式人生 > >jmeter教程(一):url、uri及協議初識

jmeter教程(一):url、uri及協議初識

jmeter是用純java語言實現的一個,用於介面、及效能測試的工具。關於jmeter的誕生,純屬歪打正著,就像當初unix系統的誕生,也是屬於歪打正著。有關的故事,可以自己去網上查。jmeter教程,原先在公司也寫過一些,不過,原先也只是用於公司內部分享用的,教程裡面的例子,也是用的公司的專案。現在,把教程貼到部落格,自然是不能用公司的例子了,所以有些地方可能就會只有理論,沒有例子,當然,我會盡量自己寫一些介面來做例子,但限於我本人知識有限,有些情況,可能我模擬不出來,那也就只好幹講理論了。當然,教程裡面也有些知識點,可能會比較難理解,像響應斷言或是後置處理器裡的正則表示式,如果之前沒有接觸過正則表示式的話,可能就會很不好理解,先打下預防針。jmeter用來做介面測試,那麼就有必要了解兩個概念,url及uri。

url,百度百科的解釋是:統一資源定位符,也就是url是用來定位資源的,一個正確的url可以定位到一個資源且只能定位到一個資源,換句話說,url就是資源的地址。一個url最少要包含三部分:協議、分隔符、uri。比如,windows系統下,開啟瀏覽器,在瀏覽器的位址列中輸入:file:///c:,回車後,瀏覽器就會把c盤下的資源列出來,那麼,這就是一個最簡單的url了,其中“file”是協議,“://”是分隔符。“/c:”就是uri。

uri,百度百科的解釋是:統一資源識別符號,當然,這個名稱有點難於理解,那麼,我們換一個說法。uri就是資源在電腦(伺服器也是一臺電腦)或是站點目錄裡的路徑,在jmeter裡面,uri就叫路徑的。

當然了,在測試的過程中,file協議,一般是不會遇到的了。我們經常遇到的,應該是http、https協議,當然有些應用可能是使用其它的協議,像我之前測試時使用過的radius協議。但是我們在工作中,還是會使用到很多協議的,只不過都是工具實現的,我們不知道而已。比如收發郵件,就是使用的郵件服務協議(SMTP、POP3、IMAP4),遠端連線liunx系統的ssh協議,傳送檔案的ftp協議等等。一個協議,通常都會有一個預設的埠號。比如,http協議的預設埠號是80,https協議預設的埠號是443。還有22、23、25、110、1521、3306等,你都知道是什麼協議的預設埠號嗎?

協議的種類很多,但歸根結底,網路協議就是兩種,其它的協議都是在這兩個協議的基礎上封裝出來的,那就是UDP和TCP協議。UDP協議是非阻塞的,也就是伺服器只管發資料,至於客戶端有沒有收到,完全不管,所以傳送的資料,客戶端有沒有收到,收到的順序是否就是傳送的順序,這些就得不到保障。網路遊戲裡大部分就是使用這種協議,像我們玩著遊戲的時候,卡了一下,那就是伺服器發了資料,然後客戶端沒有收到造成的,也就是通常所說的丟包了。像我前面提到的radius協議,就是在UDP協議的基礎上再封裝的一個協議。與此相反,TCP協議是阻塞模式的。當伺服器向客戶端發了一條資料之後,必須要確認客戶端收到了,才會繼續發下一條資料,這樣就很好地保證了資料一定能被客戶端收到,且收到的順序就是傳送的順序。像前面提到的網路協議,除radius外都是TCP協議的再次封裝。

http協議是在tcp協議的基礎上封裝而成的一個協議。http協議有個三次握手的機制,這個三次握手的機制與生活中的場景還是很像的。比如,你要去朋友家玩,你得先發條資訊給朋友:我要去你那玩了,你有空沒?你朋友收到資訊後,就會回一條資訊:我現在有空,你可以過來。你收到這條資訊之後,那你就得查一下去你朋友家的路線,查好路線之後,就出發去朋友家了。在朋友家吃飽喝足了,要回家了。朋友要送你走啊,然後估摸著你差不多快到家了,就會發條資訊給你:到家了沒?你到家後,就會回一條資訊:我到家了,你不用掛念了。你朋友收到這條資訊之後,就忙自己的事去了,不管你了。那麼http協議的過程,與這個非常相像。客戶端想向伺服器發請求,就會先發一條資訊給伺服器:我要向伺服器發請求了,你準備一下。伺服器收到資訊後,就會回一條資訊:我準備好了,你可以發請求了。客戶端收到這條訊息後,就會建立連線。建立連線之後,就開始傳送請求了。伺服器處理完了請求之後,就會把響應資料傳送給客戶端,傳送完了之後,就會發一條資訊給客戶端:資料已經發送完了,客戶端收到這條訊息之後,也接收完了資料,就會發一條訊息給伺服器:我資料接收完了。那伺服器收到這條訊息後,就會把連線斷開,當然,長連線除外。

https協議就是在http和tcp協議之間再加了一層ssl協議,也就是數字證書協議,用於加密傳輸的內容,防止資料被截持、篡改。所以https協議比http協議更安全。

在測試的時候,如果是使用http協議的話,開發給出的介面,可能就是類似這樣的:http://localhost:8080/tester/login?username=aaa&password=bbb。這其中,http為協議,://為分隔符,localhost為主機名,localhost代表本機,也就是把服務佈署在自己的電腦上,再在自己的電腦上進行訪問,可以這樣寫。而我們要測試的話,就需要把這個換成你要測試的伺服器的地址。當然,伺服器的地址,可能是一個ip地址,也可能是一個域名。域名最終也是會通過dns伺服器解析成ip地址,再通過ip地址訪問伺服器。關於dns解析域名,又可以講一大堆,這裡就不講了。8080是埠號,主機名和埠號之間用:號分隔,當然如果埠號是80的話,是可以省略掉了,http協議預設的埠號就是80。/tester/login就是uri了,也就是要訪問的資源在站點目錄裡的路徑,當然這個說法也不全對,在tomcat伺服器中,這個可能不是一個路徑,而是指向某一個類的虛擬路徑,關於這一點,不細說了。後面的username=aaa&password=bbb這個就是請求的引數了。引數和uri之間用?分隔,引數以鍵值對的形式存在,用=連線,幾個引數之間&符號連線。當然了,引數的形式還有其它的形式,比如json格式的,xml格式的,這個到後面再講吧!