歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 用Python實現的Web服務器的壓力測試工具

用Python實現的Web服務器的壓力測試工具

日期:2017/3/1 10:41:12   编辑:Linux編程

用Python寫了一個網頁抓取的工具,用來做網頁的服務器壓力測試。也可以模擬運行時的狀態。

  1. # coding:gbk
  2. import time
  3. import urllib2
  4. import threading
  5. from Queue import Queue
  6. from time import sleep
  7. # 性能測試頁面
  8. PERF_TEST_URL = "http://localhost:8080/perf.jsp"
  9. # 配置:壓力測試
  10. #THREAD_NUM = 10 # 並發線程總數
  11. #ONE_WORKER_NUM = 500 # 每個線程的循環次數
  12. #LOOP_SLEEP = 0.01 # 每次請求時間間隔(秒)
  13. # 配置:模擬運行狀態
  14. THREAD_NUM = 100 # 並發線程總數
  15. ONE_WORKER_NUM = 10000 # 每個線程的循環次數
  16. LOOP_SLEEP = 0.5 # 每次請求時間間隔(秒)
  17. # 出錯數
  18. ERROR_NUM = 0
  19. #具體的處理函數,負責處理單個任務
  20. def doWork(index):
  21. t = threading.currentThread()
  22. #print "["+t.name+" "+str(index)+"] "+PERF_TEST_URL
  23. try:
  24. html = urllib2.urlopen(PERF_TEST_URL).read()
  25. except urllib2.URLError, e:
  26. print "["+t.name+" "+str(index)+"] "
  27. print e
  28. global ERROR_NUM
  29. ERROR_NUM += 1
  30. #這個是工作進程,www.linuxidc.com負責不斷從隊列取數據並處理
  31. def working():
  32. t = threading.currentThread()
  33. print "["+t.name+"] Sub Thread Begin"
  34. i = 0
  35. while i < ONE_WORKER_NUM:
  36. i += 1
  37. doWork(i)
  38. sleep(LOOP_SLEEP)
  39. print "["+t.name+"] Sub Thread End"
  40. def main():
  41. #doWork(0)
  42. #return
  43. t1 = time.time()
  44. Threads = []
  45. # 創建線程
  46. for i in range(THREAD_NUM):
  47. t = threading.Thread(target=working, name="T"+str(i))
  48. t.setDaemon(True)
  49. Threads.append(t)
  50. for t in Threads:
  51. t.start()
  52. for t in Threads:
  53. t.join()
  54. print "main thread end"
  55. t2 = time.time()
  56. print "========================================"
  57. print "URL:", PERF_TEST_URL
  58. print "任務數量:", THREAD_NUM, "*", ONE_WORKER_NUM, "=", THREAD_NUM*ONE_WORKER_NUM
  59. print "總耗時(秒):", t2-t1
  60. print "每次請求耗時(秒):", (t2-t1) / (THREAD_NUM*ONE_WORKER_NUM)
  61. print "每秒承載請求數:", 1 / ((t2-t1) / (THREAD_NUM*ONE_WORKER_NUM))
  62. print "錯誤數量:", ERROR_NUM
  63. if __name__ == "__main__": main()

Copyright © Linux教程網 All Rights Reserved