Commit ccbbb77a authored by liyuanhong's avatar liyuanhong

完成了拉流压力测试脚本

parent b9852f86
...@@ -134,12 +134,13 @@ class StreamH264Flv(): ...@@ -134,12 +134,13 @@ class StreamH264Flv():
# 发送视频帧 # 发送视频帧
#################################################### ####################################################
def sendVideoFrame(self,fra,timeStamp): def sendVideoFrame(self,fra,timeStamp):
print(fra)
protocal_1078 = Protocal_1078() protocal_1078 = Protocal_1078()
protocal_1078.setSim(self.mobile) protocal_1078.setSim(self.mobile)
protocal_1078.setLogcC(self.channel) protocal_1078.setLogcC(self.channel)
protocal_1078.setTime(timeStamp) protocal_1078.setTime(timeStamp)
frameType = fra[8:10] frameType = fra[8:10]
if frameType == "65": if frameType == "65" or frameType == "61":
self.videoLastKeyTime = timeStamp self.videoLastKeyTime = timeStamp
protocal_1078.setLastKeyTime(timeStamp - self.videoLastKeyTime) protocal_1078.setLastKeyTime(timeStamp - self.videoLastKeyTime)
protocal_1078.setLastTime(timeStamp - self.videoLastTime) protocal_1078.setLastTime(timeStamp - self.videoLastTime)
...@@ -270,15 +271,16 @@ class StreamH264Flv(): ...@@ -270,15 +271,16 @@ class StreamH264Flv():
if __name__ == "__main__": if __name__ == "__main__":
obj = StreamH264Flv() obj = StreamH264Flv()
obj.setSendDur(0.001) obj.setSendDur(0.01)
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.11.125")
obj.setHost("10.100.11.125") 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/aaa3.flv")
obj.connectServer() obj.connectServer()
obj.readFlvAndSend() obj.readFlvAndSend()
......
#coding: utf-8
'''
拉流压力测试
'''
import threading
import time
import traceback
import cv2
class PullStreamTest():
def __init__(self):
self.playUrl = None
self.isShowFrame = 0 # 是否展示预览窗口 0:不展示 1:展示
self.terNum = 2 # 要压力测试的线程数
self.threadInfoPull = {} # 存放线程集(拉流线程)
self.threadInfoPull["threadObj"] = {}
self.threadInfoPull["sucessT"] = {}
self.threadInfoPull["failT"] = {}
def setPlayUrl(self,data):
self.playUrl = data
def setTerNum(self,data):
self.terNum = data
def getThreadInfoPull(self):
return self.threadInfoPull
############################################
# 拉流
############################################
def testPull(self,threadName):
pullUrl = self.playUrl
cap = cv2.VideoCapture(pullUrl)
try:
while (cap.isOpened()):
ret, frame = cap.read()
if ret == False:
break
if self.isShowFrame == 1:
cv2.imshow("video", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
print("拉流结束")
cap.release()
cv2.destroyAllWindows()
except:
traceback.print_exc()
self.threadInfoPull["threadObj"].pop(threadName)
return
self.threadInfoPull["threadObj"].pop(threadName)
################################################
# 启动拉流线程
################################################
def runPull(self, threadId):
time.sleep(1)
pullThread = threading.Thread(target=self.testPull, args=(threadId,))
self.threadInfoPull["threadObj"][threadId] = pullThread
pullThread.start()
################################################
# 启动压力测试服务
################################################
def start(self):
for j in range(0, self.terNum):
threadPullId = "threadPullId__" + str(j)
print("启动拉流线程:" + threadPullId)
self.runPull(threadPullId)
time.sleep(0.01)
if __name__ == "__main__":
obj = PullStreamTest()
obj.setPlayUrl("http://10.100.11.125:8085/live?port=1985&app=vandyo&stream=110000000000-1-336024758078409597")
obj.setTerNum(10)
obj.start()
...@@ -3,6 +3,9 @@ import time ...@@ -3,6 +3,9 @@ import time
from lib.testCase.FlvPressureTest import FlvPressureTest from lib.testCase.FlvPressureTest import FlvPressureTest
import logging import logging
from lib.testCase.PullStreamTest import PullStreamTest
logging.basicConfig(level = logging.INFO,format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s') logging.basicConfig(level = logging.INFO,format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
...@@ -75,10 +78,27 @@ def flvFilePushTest(): ...@@ -75,10 +78,27 @@ def flvFilePushTest():
threadInfoPull = test.getThreadInfoPull() threadInfoPull = test.getThreadInfoPull()
time.sleep(30) time.sleep(30)
flvFilePushTest() flvFilePushTest()
logger.info("压力测试结束!!!!!!") logger.info("压力测试结束!!!!!!")
###########################################
# 对单个源进行拉流压力测试
###########################################
def pullSingleSourcePressureTest():
obj = PullStreamTest()
obj.setPlayUrl("http://10.100.11.125:8085/live?port=1985&app=vandyo&stream=110000000000-1-336026784011127677")
obj.setTerNum(1)
obj.start()
pullInfos = obj.getThreadInfoPull()
while len(pullInfos["threadObj"]) > 0:
time.sleep(5)
logger.info("剩余拉流线程:" + str(len(pullInfos["threadObj"])))
pullInfos = obj.getThreadInfoPull()
print("")
print("所有拉流结束。。。。。。")
if __name__ == "__main__": if __name__ == "__main__":
flvFilePushTest() # flvFilePushTest() # 推拉流压力测试 (可关闭拉流)
# h264FilePushTest() # h264FilePushTest() # H264推流压力测试
pullSingleSourcePressureTest() # 对单个源进行拉流压力测试
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