Commit 733c8040 authored by liyuanhong's avatar liyuanhong

开发了循环压力测试脚本

parent 43363024
...@@ -270,15 +270,17 @@ class StreamH264Flv(): ...@@ -270,15 +270,17 @@ class StreamH264Flv():
if __name__ == "__main__": if __name__ == "__main__":
obj = StreamH264Flv() obj = StreamH264Flv()
obj.setSendDur(0.007) obj.setSendDur(0.001)
obj.setIsSendAudio(1) obj.setIsSendAudio(1)
# obj.setMobile("013146201117") # obj.setMobile("013146201117")
obj.setMobile("142043390091") obj.setMobile("142043390091")
obj.setChannel(1) obj.setChannel(1)
# obj.setHost("10.100.12.3") obj.setHost("10.100.11.125")
obj.setHost("video-test.vandyo.com") # obj.setHost("video-test.vandyo.com")
obj.setPort(1078) obj.setPort(1078)
obj.setVideoPath("../../flv/yyy.flv") obj.setVideoPath("../../flv/bbb3.flv")
obj.connectServer() obj.connectServer()
obj.readFlvAndSend() obj.readFlvAndSend()
...@@ -3,6 +3,8 @@ import json ...@@ -3,6 +3,8 @@ import json
import re import re
import threading import threading
import time import time
import traceback
import cv2 import cv2
import requests import requests
...@@ -32,7 +34,6 @@ class FlvPressureTest(): ...@@ -32,7 +34,6 @@ class FlvPressureTest():
self.threadInfoPull["threadObj"] = {} self.threadInfoPull["threadObj"] = {}
self.threadInfoPull["sucessT"] = {} self.threadInfoPull["sucessT"] = {}
self.threadInfoPull["failT"] = {} self.threadInfoPull["failT"] = {}
self.isOpenPullStream = 1 # 是否开启视频拉流 0:不 1:是 self.isOpenPullStream = 1 # 是否开启视频拉流 0:不 1:是
def setTerNum(self, data): def setTerNum(self, data):
...@@ -54,25 +55,45 @@ class FlvPressureTest(): ...@@ -54,25 +55,45 @@ class FlvPressureTest():
def setIsShowFrame(self,data): def setIsShowFrame(self,data):
self.isShowFrame = data self.isShowFrame = data
def testServicePush(self, cloudMirror): def getThreadInfo(self):
cloudMirror.readFlvAndSend() return self.threadInfo
def getThreadInfoPull(self):
def testServicePull(self, mobile): return self.threadInfoPull
def testServicePush(self, cloudMirror,threadName):
try:
cloudMirror.readFlvAndSend()
except:
traceback.print_exc()
self.threadInfo["threadObj"].pop(threadName)
return
self.threadInfo["threadObj"].pop(threadName)
def testServicePull(self, mobile,threadName):
pullUrl = self.getPlayUrl(mobile,self.channel) pullUrl = self.getPlayUrl(mobile,self.channel)
# pullUrl = self.replaceHost(pullUrl, "video-test.vandyo.com:") # pullUrl = self.replaceHost(pullUrl, "video-test.vandyo.com:")
cap = cv2.VideoCapture(pullUrl) cap = cv2.VideoCapture(pullUrl)
while (cap.isOpened()): try:
ret, frame = cap.read() while (cap.isOpened()):
if ret == False: ret, frame = cap.read()
break if ret == False:
if self.isShowFrame == 1: break
cv2.imshow("video", frame) if self.isShowFrame == 1:
if cv2.waitKey(1) & 0xFF == ord('q'): cv2.imshow("video", frame)
break if cv2.waitKey(1) & 0xFF == ord('q'):
print("拉流结束") break
cap.release() print("拉流结束")
cv2.destroyAllWindows() cap.release()
cv2.destroyAllWindows()
except:
traceback.print_exc()
self.threadInfoPull["threadObj"].pop(threadName)
return
self.threadInfoPull["threadObj"].pop(threadName)
################################################
# 启动推流线程
################################################
def runPush(self, mobile, threadId): def runPush(self, mobile, threadId):
cloudMirror = StreamH264Flv() cloudMirror = StreamH264Flv()
cloudMirror.setHost(self.host) cloudMirror.setHost(self.host)
...@@ -83,18 +104,24 @@ class FlvPressureTest(): ...@@ -83,18 +104,24 @@ class FlvPressureTest():
cloudMirror.setChannel(self.channel) cloudMirror.setChannel(self.channel)
cloudMirror.setSendDur(self.sendDur) cloudMirror.setSendDur(self.sendDur)
conThread = threading.Thread(target=self.testServicePush, args=(cloudMirror,)) conThread = threading.Thread(target=self.testServicePush, args=(cloudMirror,threadId))
self.threadInfo["threadObj"][threadId] = conThread self.threadInfo["threadObj"][threadId] = conThread
conThread.start() conThread.start()
print(threadId + "启动了:" + mobile + "-" + str(self.channel)) print(threadId + "启动了:" + mobile + "-" + str(self.channel))
################################################
# 启动拉流线程
################################################
def runPull(self, mobile, threadId): def runPull(self, mobile, threadId):
time.sleep(1) time.sleep(1)
pullThread = threading.Thread(target=self.testServicePull, args=(mobile,)) pullThread = threading.Thread(target=self.testServicePull, args=(mobile,threadId))
self.threadInfoPull["threadObj"][threadId] = pullThread self.threadInfoPull["threadObj"][threadId] = pullThread
pullThread.start() pullThread.start()
print(threadId + "启动了:" + mobile + "-" + str(self.channel)) print(threadId + "启动了:" + mobile + "-" + str(self.channel))
################################################
# 启动压力测试服务
################################################
def start(self): def start(self):
for i in range(0, self.terNum): for i in range(0, self.terNum):
mobile = self.mobileStart + i mobile = self.mobileStart + i
......
#coding: utf-8 #coding: utf-8
from lib.testCase.FlvPressureTest import FlvPressureTest import time
from lib.testCase.FlvPressureTest import FlvPressureTest
import logging
logging.basicConfig(level = logging.INFO,format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
########################################### ###########################################
# 推流h264 和 aac 文件压力测试 # 推流h264 和 aac 文件压力测试
...@@ -23,21 +26,57 @@ def h264FilePushTest(): ...@@ -23,21 +26,57 @@ def h264FilePushTest():
test.setAudioPath("aac/bbb3.aac") test.setAudioPath("aac/bbb3.aac")
test.start() test.start()
def getPressTestObj():
test = FlvPressureTest()
test.setHost("10.100.11.125")
test.setPort(1078)
test.setMobileStart(10000000000) # 开始的设备号 (累加)
test.setChannel(1) # 设置频道号
test.setTerNum(3) # 要启动的推拉流线程
test.setIsOpenPullStream(1) # 设置是否开启拉流
test.setIsShowFrame(0) # 拉流是否显示预览画面 (压力测试都应该填:0)
test.setSendDur(0.005) # 设置socket 发送数据间隔
test.setFlvPath("flv/aaa3.flv") # 设置视频路劲
test.start()
return test
########################################### ###########################################
# 推流flv文件压力测试 # 推流flv文件压力测试
########################################### ###########################################
def flvFilePushTest(): def flvFilePushTest():
test = FlvPressureTest() isLoop = 1 # 是否循环压力测试 0: 不循环 1:循环
test.setHost("10.100.12.3") loopTime = 1 * 60 * 60 # 循环压力测试的时长
test.setPort(1078)
test.setMobileStart(10000000000) test = getPressTestObj()
test.setChannel(1) threadInfo = test.getThreadInfo()
test.setTerNum(1) threadInfoPull = test.getThreadInfoPull()
test.setIsOpenPullStream(1) # 设置是否开启拉流
test.setIsShowFrame(1) # 拉流是否显示预览画面 logger.info("剩余推流线程:" + str(len(threadInfo["threadObj"])))
test.setSendDur(0.001) logger.info("剩余拉流线程:" + str(len(threadInfoPull["threadObj"])))
test.setFlvPath("flv/aaa3.flv") if isLoop == 0:
test.start() while len(threadInfo["threadObj"]) != 0 and len(threadInfoPull["threadObj"]) != 0:
time.sleep(5)
logger.info("剩余推流线程:" + str(len(threadInfo["threadObj"])))
logger.info("剩余拉流线程:" + str(len(threadInfoPull["threadObj"])))
threadInfo = test.getThreadInfo()
threadInfoPull = test.getThreadInfoPull()
else:
time.sleep(10)
if len(threadInfo["threadObj"]) == 0 and len(threadInfoPull["threadObj"]) == 0:
test = getPressTestObj()
logger.info("-----------------------------启动新一轮压力测试-----------------------------")
threadInfo = test.getThreadInfo()
threadInfoPull = test.getThreadInfoPull()
while len(threadInfo["threadObj"]) != 0 and len(threadInfoPull["threadObj"]) != 0:
time.sleep(5)
logger.info("剩余推流线程:" + str(len(threadInfo["threadObj"])))
logger.info("剩余拉流线程:" + str(len(threadInfoPull["threadObj"])))
threadInfo = test.getThreadInfo()
threadInfoPull = test.getThreadInfoPull()
flvFilePushTest()
logger.info("压力测试结束")
if __name__ == "__main__": if __name__ == "__main__":
flvFilePushTest() flvFilePushTest()
......
...@@ -53,5 +53,5 @@ class CameraArea(): ...@@ -53,5 +53,5 @@ class CameraArea():
) )
if dlg.ShowModal() == wx.ID_OK: if dlg.ShowModal() == wx.ID_OK:
path = dlg.GetPath() path = dlg.GetPath()
print(path) textCtr.SetValue(path)
dlg.Destroy() dlg.Destroy()
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment