使用python對網站進行測試(模擬用戶行爲)

    日常工作過程中,我們需要對網站的併發量、響應時間進行測試,這種測試通常是對網站平臺的
  
測試,其原理是:客戶端發出一個請求,服務端收到這個請求給予相應的響應,從收到請求到做出響
  
應的這一段時間稱爲系統的響應時間,而系統在不同的負載,即不同的用戶訪問數的情況下,這個響
  
應時間是不相同的。實際應用中能這些點的第三方軟件很多,但不是本文的重點,所以本文中,我們
  
利用pytho n腳本來編寫一段簡單的代碼來實現網站併發量和響應時間的測試。

    總體而言這樣的測試實質上也是一次性能測試,結合測試的類型來看,所有的性能測試都可以從

兩個維度劃分:一種是基於用戶行爲模擬的性能測試,例如本文將要介紹的“使用python對網站進行
  
測試”;另一種抽象程度更高的構造數據包級的測試,關於這種類型的測試,在後續的博文中,有

機會的我們再舉例說明。      
 
一、測試網站的響應時間
 
    測試網頁的響應時間,代碼如下:
 
import threading
import urllib
from time import sleep,ctime
def getHtml(func,url):
    try:
        print 'start request:   %s,%s' %(func,ctime())
        page = urllib.urlopen(url)
        html = page.read()
        print 'receive response:%s,%s' %(func,ctime())
        return html
    except:
        print 'error……'
        return []
if __name__== '__main__':
    url = "http://image.baidu.com/channel?c=%E7%BE%8E%E5%A5%B3#%E7%BE%8E%E5%A5%B3"
    for i in range(1,11):
        print '%s : request'%i
        test = getHtml(i,url)
        print '----------------------------------------------' 
 
運行程序,結果如下:
 
Type "copyright", "credits" or "license()" for more information.

>>> ================================ RESTART ================================

>>> 

1 : request

start request:   1,Sun May 03 13:29:41 2015

receive response:1,Sun May 03 13:29:41 2015

----------------------------------------------

2 : request

start request:   2,Sun May 03 13:29:41 2015

receive response:2,Sun May 03 13:29:42 2015

----------------------------------------------

3 : request

start request:   3,Sun May 03 13:29:42 2015

receive response:3,Sun May 03 13:29:42 2015

----------------------------------------------

4 : request

start request:   4,Sun May 03 13:29:42 2015

receive response:4,Sun May 03 13:29:43 2015

----------------------------------------------  
    上面是一個很粗糙的代碼片段,但如果將程序的輸出信息寫到一個文件中,並寫一個相應數據分 
析統 計代碼,我們就能實現一個測試網頁訪問時間的代碼。

二、使用多線程實現網頁並非訪問

import threading
import urllib
from time import sleep,ctime
def getHtml(func,url):
    try:
        print 'start request:   %s,%s' %(func,ctime())
        page = urllib.urlopen(url)
        html = page.read()
        print 'receive response:%s,%s' %(func,ctime())
        return html
    except:
        print 'error……'
        return []
if __name__== '__main__':
    url = "http://www.baidu.com/"
    threads = []
    list = range(1,11)
    for i in list:
        t = threading.Thread(target=getHtml,args=(i,url))
        threads.append(t)
        
    print '---------------------start -------------------------'
    
    for j in list:
        print '%s : request'%j
        threads[j-1].start()
    for k in list:
        threads[k-1].join()
    print '---------------------over -------------------------'

    程序運行結果如下所示:

 

---------------------start -------------------------
1 : request
start request:   1,Sun May 03 15:16:54 20152 : request

start request:   2,Sun May 03 15:16:54 20153 : request

4 : requeststart request:   3,Sun May 03 15:16:54 2015

start request:   4,Sun May 03 15:16:54 20155 : request

start request:   5,Sun May 03 15:16:54 20156 : request

start request:   6,Sun May 03 15:16:54 20157 : request

start request:   7,Sun May 03 15:16:54 20158 : request

9 : requeststart request:   8,Sun May 03 15:16:54 2015

10 : requeststart request:   9,Sun May 03 15:16:54 2015

start request:   10,Sun May 03 15:16:54 2015
receive response:3,Sun May 03 15:16:54 2015
receive response:7,Sun May 03 15:16:54 2015

receive response:2,Sun May 03 15:16:54 2015

receive response:5,Sun May 03 15:16:54 2015
receive response:1,Sun May 03 15:16:54 2015
receive response:4,Sun May 03 15:16:54 2015

receive response:6,Sun May 03 15:16:54 2015

receive response:10,Sun May 03 15:16:54 2015
receive response:9,Sun May 03 15:16:55 2015
receive response:8,Sun May 03 15:16:55 2015
---------------------over -------------------------

      由於是多線程,程序的運行結果,顯得比較混亂,在具體計算一個請求和對應的響應時間時,我們可

以根據請求的start request後面的seq號和receive response後面的seq來匹配對應的響應數據包,例如

receive response:2,Sun May 03 15:16:54 2015 seq =2與start request:   2,Sun May 03 15:16:54 20153 :

 request中的seq =2相等,那麼receive response:2是start request:   2的響應事務,同理可計算出全部的

請求對應的響應時間,最後根據一定的規則來生成所需的報告數據。

  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章