Переглянути джерело

1、脚本日志加Sleep(5),降低CPU使用率;
2、任务用例执行状态、结果显示;
3、任务数量小于等于1时,不删除完成的任务;

scbc.sat2 5 роки тому
батько
коміт
0f6cf5807a

+ 2 - 0
SATService/SATService/PythonExecutor.cpp

@@ -87,6 +87,7 @@ DWORD CPythonExecutor::_StdoutLogExportThread(LPVOID lpParam)
 				that->m_pCaseObj->_ulStartTickCount = GetTickCount64();
 			memset(chBuf, 0, BUFSIZE);
 		}
+		Sleep(5);
 	} while (!that->m_bStopLogExport);
 
 	GLOBAL::WriteTextLog(GLOBAL::SAT_PYE, _T("脚本标准输出日志线程结束,用例名=%s"), that->m_pCaseObj->strCaseName.c_str());
@@ -120,6 +121,7 @@ DWORD CPythonExecutor::_StderrLogExportThread(LPVOID lpParam)
 			OutputDebugString(szMsg);
 			memset(chBuf, 0, BUFSIZE);
 		}
+		Sleep(5);
 	} while (!that->m_bStopLogExport); 
 	
 	// 结束重定向;

+ 28 - 11
SATService/SATService/SATExecutor.cpp

@@ -70,6 +70,10 @@ SATHTTP::STTask* CSATExecutor::GetFreeTask()
 void CSATExecutor::DelFinishedTask()
 {
 	AutoThreadSection ats(&m_csTask);
+	// 任务数量小于等于1时,不删除完成的任务;
+	if ( m_vtTask.size() <= 1)
+		return;
+
 	std::list<SATHTTP::STTask>::iterator it = m_vtTask.begin();
 	for ( ; it != m_vtTask.end(); it++ ) {
 		// 状态为2的完成任务;
@@ -1011,26 +1015,39 @@ int CSATExecutor::AttachTaskInfo2Buffer(SATPROTO::TaskInfo (&pbuff)[SATPROTO::MA
 				memcpy_s(pbuff[count].ssCases[nIndex].szCaseName, SATPROTO::MAX_NAME, _case->strCaseName.c_str(), _case->strCaseName.size());
 				// 用例日志路径;
 				memcpy_s(pbuff[count].ssCases[nIndex].szCaseLogPath, MAX_PATH, _case->_strCaseLog.c_str(), _case->_strCaseLog.size());
-				// 用例状态;
-				if (_case->_nExecutionState == SATHTTP::NONE)
+				// 用例执行状态;
+				if (_case->_nExecutionState == SATHTTP::UNEXECUTED)
+				{
+					_stprintf_s(pbuff[count].ssCases[nIndex].szExecStatus, SATPROTO::MAX_STATUS, _T("未执行"));
+				}
+				else if (_case->_nExecutionState == SATHTTP::INEXECUTED)
+				{
+					_stprintf_s(pbuff[count].ssCases[nIndex].szExecStatus, SATPROTO::MAX_STATUS, _T("执行中"));
+				}
+				else if (_case->_nExecutionState == SATHTTP::EXECUTED)
+				{
+					_stprintf_s(pbuff[count].ssCases[nIndex].szExecStatus, SATPROTO::MAX_STATUS, _T("已执行"));
+				}
+				// 用例执行结果;
+				if ( _case->_nExecutionResult == SATHTTP::NONE )
 				{
-					_stprintf_s(pbuff[count].ssCases[nIndex].szStatus, SATPROTO::MAX_STATUS, _T("未执行"));
+					_stprintf_s(pbuff[count].ssCases[nIndex].szResultStatus, SATPROTO::MAX_STATUS, _T("无"));
 				}
-				else if (_case->_nExecutionState == SATHTTP::SUCCESS)
+				else if ( _case->_nExecutionResult == SATHTTP::SUCCESS )
 				{
-					_stprintf_s(pbuff[count].ssCases[nIndex].szStatus, SATPROTO::MAX_STATUS, _T("执行成功"));
+					_stprintf_s(pbuff[count].ssCases[nIndex].szResultStatus, SATPROTO::MAX_STATUS, _T("成功"));
 				}
-				else if (_case->_nExecutionState == SATHTTP::FAIL)
+				else if ( _case->_nExecutionResult == SATHTTP::FAIL )
 				{
-					_stprintf_s(pbuff[count].ssCases[nIndex].szStatus, SATPROTO::MAX_STATUS, _T("执行失败"));
+					_stprintf_s(pbuff[count].ssCases[nIndex].szResultStatus, SATPROTO::MAX_STATUS, _T("失败"));
 				}
-				else if (_case->_nExecutionState == SATHTTP::ABNORMAL)
+				else if ( _case->_nExecutionResult == SATHTTP::ABNORMAL )
 				{
-					_stprintf_s(pbuff[count].ssCases[nIndex].szStatus, SATPROTO::MAX_STATUS, _T("执行异常"));
+					_stprintf_s(pbuff[count].ssCases[nIndex].szResultStatus, SATPROTO::MAX_STATUS, _T("异常"));
 				}
-				else if (_case->_nExecutionState == SATHTTP::OVERTIME)
+				else if ( _case->_nExecutionResult == SATHTTP::OVERTIME )
 				{
-					_stprintf_s(pbuff[count].ssCases[nIndex].szStatus, SATPROTO::MAX_STATUS, _T("执行超时"));
+					_stprintf_s(pbuff[count].ssCases[nIndex].szResultStatus, SATPROTO::MAX_STATUS, _T("超时"));
 				}
 
 				nIndex++;

+ 4 - 3
SATService/SATService/SATProtocol.h

@@ -15,7 +15,7 @@ namespace SATPROTO{
 	// 通知内容最大长度;
 	const int MAX_NOTICE(30);
 	// 最大状态描述长度;
-	const int MAX_STATUS(8);
+	const int MAX_STATUS(16);
 	//////////////////////////////////////////////////////////////////////////
 	// 具体协议指令;
 	enum ProtocolCMD {
@@ -83,8 +83,9 @@ namespace SATPROTO{
 	}DeviceResp, *pDeviceResp;
 
 	typedef struct __CASE_INFO__ {
-		//int			nCaseId;					// 用例ID;
-		TCHAR		szStatus[MAX_STATUS];					// 用例状态;
+		//int			nCaseId;				// 用例ID;
+		TCHAR		szExecStatus[MAX_STATUS];	// 用例执行状态;
+		TCHAR		szResultStatus[MAX_STATUS];	// 用例执行结果;
 		TCHAR		szCaseName[MAX_NAME];		// 用例名称;
 		TCHAR		szCaseLogPath[MAX_PATH];	// 用例日志路径;	
 	}CaseInfo, *pCaseInfo;

+ 9 - 2
SATService/SATService/SATTCPServer.cpp

@@ -333,11 +333,12 @@ bool CSATTCPServer::_InitializeListenSocket(unsigned int port)
 	//ServerAddress.sin_addr.s_addr = inet_addr(m_strIP.GetString());         
 	ServerAddress.sin_port = htons(port);        
 
+#if 0
 	// SO_REUSEADDR:端口复用,可以让n个套接字绑定在一个端口上;
 	// 将套接字属性设置为 SO_REUSEADDR (允许套接口和一个已在使用中的地址捆绑),可以解决绑定失败问题
 	BOOL bReuseaddr = TRUE;
 	setsockopt(m_pListenContext->m_Socket,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL));
-
+#endif
 	// 绑定地址和端口
 	if (SOCKET_ERROR == ::bind(m_pListenContext->m_Socket, (struct sockaddr *) &ServerAddress, sizeof(ServerAddress))) 
 	{
@@ -438,7 +439,13 @@ void CSATTCPServer::_DeInitialize()
 	// 关闭IOCP句柄
 	RELEASE_HANDLE(m_hIOCompletionPort);
 
-	shutdown(m_pListenContext->m_Socket, SD_BOTH);
+	int nRet = shutdown(m_pListenContext->m_Socket, SD_BOTH);
+	if ( nRet != 0 )
+		OutputDebugString(_T("================>m_pListenContext->m_Socket套接字出错。<================\n"));
+	else
+		OutputDebugString(_T("================>m_pListenContext->m_Socket套接字成功。<================\n"));
+
+
 	// 先关闭端口;
 	RELEASE_SOCKET( m_pListenContext->m_Socket );
 

+ 24 - 4
SATService/SATService/SATTCPServer.h

@@ -57,9 +57,20 @@ typedef struct _PER_IO_CONTEXT
 	{
 		if( m_sockAccept!=INVALID_SOCKET )
 		{
-			closesocket(m_sockAccept);
-			shutdown(m_sockAccept, SD_BOTH);
+			int nRet = shutdown(m_sockAccept, SD_BOTH);
+			if ( nRet != 0 )
+				OutputDebugString(_T("================>shutdown m_sockAccept套接字出错。<================\n"));
+			else
+				OutputDebugString(_T("================>shutdown m_sockAccept套接字成功。<================\n"));
+
+			nRet = closesocket(m_sockAccept);
+			if ( nRet != 0 )
+				OutputDebugString(_T("================>closesocket m_sockAccept套接字出错。<================\n"));
+			else
+				OutputDebugString(_T("================>closesocket m_sockAccept套接字成功。<================\n"));
+
 			m_sockAccept = INVALID_SOCKET;
+			OutputDebugString(_T("================>释放m_sockAccept套接字<================\n"));
 		}
 	}
 	// 重置缓冲区内容
@@ -97,8 +108,17 @@ typedef struct _PER_SOCKET_CONTEXT
 	{
 		if( m_Socket!=INVALID_SOCKET )
 		{
-			closesocket( m_Socket );
-			shutdown(m_Socket, SD_BOTH);
+			int nRet = shutdown(m_Socket, SD_BOTH);
+			if ( nRet != 0 )
+				OutputDebugString(_T("================>shutdown m_Socket套接字出错。<================\n"));
+			else
+				OutputDebugString(_T("================>shutdown m_Socket套接字成功。<================\n"));
+			nRet = closesocket(m_Socket);
+			if ( nRet != 0 )
+				OutputDebugString(_T("================>closesocket m_Socket套接字出错。<================\n"));
+			else
+				OutputDebugString(_T("================>closesocket m_Socket套接字成功。<================\n"));
+
 		    m_Socket = INVALID_SOCKET;
 		}
 		// 释放掉所有的IO上下文数据