| 
					
				 | 
			
			
				@@ -76,7 +76,7 @@ void CSATExecutor::DelFinishedTask() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if ( it->taskInfo._nExecutionState == SATHTTP::EXECUTED ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			// 删除所有执行器对象; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			CPythonExecutor *pExecutor = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			for (std::vector<SATHTTP::STCase>::iterator _case = it->Job.vtCases.begin(); _case != it->Job.vtCases.end(); _case++ ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			for (std::vector<SATHTTP::STCase>::iterator _case = it->vtCases.begin(); _case != it->vtCases.end(); _case++ ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				// 一般被停止的任务,才会触发下面的操作; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				pExecutor = (CPythonExecutor *)_case->_pExcutor; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				if ( pExecutor ) {	 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -100,6 +100,7 @@ void CSATExecutor::DelFinishedTask() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 返回正在执行的用例对象, 如果没有正在执行的任务返回NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 SATHTTP::STCase* CSATExecutor::IsCaseScriptProcess(std::vector<SATHTTP::STCase> &vtCases) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	std::vector<SATHTTP::STCase>::iterator it = vtCases.begin(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -113,9 +114,10 @@ SATHTTP::STCase* CSATExecutor::IsCaseScriptProcess(std::vector<SATHTTP::STCase> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	return NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-SATHTTP::STCase* CSATExecutor::GetFreeCaseScript(std::vector<SATHTTP::STCase> &vtCases) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+SATHTTP::STCase* CSATExecutor::GetFreeCaseScript(SATHTTP::STTask* pTask) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	std::vector<SATHTTP::STCase>::iterator it = vtCases.begin(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#if 0 // 原获取方式; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	std::vector<SATHTTP::STCase>::iterator it = pTask->vtCases.begin(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	for ( ; it != vtCases.end(); it++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		// 未执行的脚本; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if ( it->_nExecutionState == SATHTTP::UNEXECUTED ) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -124,12 +126,56 @@ SATHTTP::STCase* CSATExecutor::GetFreeCaseScript(std::vector<SATHTTP::STCase> &v 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	return NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	int nCaseIndex = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	int nCaseRound = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	SATHTTP::STCase *pCase = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	std::vector<SATHTTP::STCase>::iterator it = pTask->vtCases.begin(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for ( ; it != pTask->vtCases.end(); it++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// 获取用例索引; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		nCaseIndex = _tstol(it->strIndex.c_str()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		nCaseRound = _tstol(it->_strRoundNum.c_str()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if ( nCaseRound == pTask->_curRound ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if ( nCaseIndex == pTask->_curCaseIndex ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				// 正常:未执行的脚本; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if ( it->_nExecutionState == SATHTTP::UNEXECUTED ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					// 是否转到下一轮; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if ( nCaseIndex == pTask->_roundSize ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						pTask->_curRound++;			// 下一轮; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						pTask->_curCaseIndex = 1;	// 重置为1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} else  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						pTask->_curCaseIndex++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					// 返回结果; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					pCase = &*it; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					// 退出; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, _T("用例轮空:round=%d, caseIndex=%d"), pTask->_curRound, pTask->_curCaseIndex); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				// 是否转到下一轮; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if ( nCaseIndex == pTask->_roundSize ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					pTask->_curRound++;			// 下一轮; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					pTask->_curCaseIndex = 1;	// 重置为0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					pTask->_curCaseIndex++;				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 容错处理; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if ( pCase == NULL ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, _T("获取可用用例失败")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return pCase; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 SATHTTP::STCase* CSATExecutor::ExecuteFreeCaseScript(SATHTTP::STTask* pTask) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// 获取未执行的脚本; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	SATHTTP::STCase* pCase = GetFreeCaseScript(pTask->Job.vtCases); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	SATHTTP::STCase* pCase = GetFreeCaseScript(pTask); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if (pCase) {		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #if 1 // 额外追加代码:清除之前的xml文件; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #if 0 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -143,13 +189,16 @@ SATHTTP::STCase* CSATExecutor::ExecuteFreeCaseScript(SATHTTP::STTask* pTask) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		// 删除文件; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		DeleteFile(xmlpath.c_str()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// 命令行:{"Round": %d} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		TCHAR szCommandLine[MAX_PATH] = { 0 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_stprintf_s(szCommandLine, _T("{\"Round\": %s"), pCase->_strRoundNum.c_str()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if ( !pCase->_pExcutor ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			CPythonExecutor *pExcutor = new CPythonExecutor();  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if ( pExcutor ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				pCase->_pExcutor = pExcutor; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				// 用例的日志文件路径; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				pCase->_strCaseLog = pCase->_strFileDir + pCase->_strFileName + ".txt"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if ( pExcutor->InitScript(pCase->_strScriptPath, pCase->_strCaseLog, "") ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if ( pExcutor->InitScript(pCase->_strScriptPath, pCase->_strCaseLog, szCommandLine) ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					// 设置用例对象; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					pExcutor->SetCaseObje(pCase); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					pExcutor->StartScript(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -169,7 +218,7 @@ SATHTTP::STCase* CSATExecutor::ExecuteFreeCaseScript(SATHTTP::STTask* pTask) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, "重新初始化脚本(%s)", pCase->strCaseName.c_str()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			// 重新初始化脚本; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			CPythonExecutor *pExcutor = (CPythonExecutor *)pCase->_pExcutor; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if ( pExcutor->InitScript(pCase->_strScriptPath, pCase->_strCaseLog, "") ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if ( pExcutor->InitScript(pCase->_strScriptPath, pCase->_strCaseLog, szCommandLine) ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				// 设置用例对象; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				pExcutor->SetCaseObje(pCase); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				pExcutor->StartScript(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -185,6 +234,33 @@ SATHTTP::STCase* CSATExecutor::ExecuteFreeCaseScript(SATHTTP::STTask* pTask) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	return pCase; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void CSATExecutor::TaskRoundSetting(SATHTTP::STTask* pTask) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if ( pTask == NULL ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 1轮有多少用例数量; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	pTask->_roundSize = pTask->vtCases.size(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 获取执行轮数; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	pTask->_roundCount = _tstol(pTask->Job.strRound.c_str()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if ( pTask->_roundCount > 1 ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		TCHAR szValue[8] = { 0 };  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// 复制一份出来,修改round值,再添加给任务; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		std::vector<SATHTTP::STCase> vtOrgCase = pTask->vtCases; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		for ( int i = 2; i <= pTask->_roundCount; i++ ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			_itoa_s(i, szValue, 10); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			std::vector<SATHTTP::STCase> vtCase = vtOrgCase; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			for ( std::vector<SATHTTP::STCase>::iterator it = vtCase.begin(); it != vtCase.end(); it++ ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			{				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				it->_strRoundNum = szValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				pTask->vtCases.push_back(*it); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}			 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 void CSATExecutor::AddDevices(const SATDEV::STDevice &stDevice) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if ( IsDeviceExist(stDevice.strName) ) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -396,7 +472,7 @@ bool CSATExecutor::UploadCaseImg(SATHTTP::STTask* pTask, SATHTTP::STCase *pCase, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	stSaveImgReq.strInstanceId = szValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	stSaveImgReq.strJobRepeat = "0"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// 注意避坑:roundnum必须赋值0或1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	stSaveImgReq.strRoundNum = "0"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	stSaveImgReq.strRoundNum = pCase->_strRoundNum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	stSaveImgReq.strImgType = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	stSaveImgReq.strUploads = img; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -429,6 +505,8 @@ bool CSATExecutor::UploadCaseLog(SATHTTP::STTask* pTask, SATHTTP::STCase *pCase) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	//_itoa_s(pTask->nTaskId, szValue, 10); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	stSaveLogReq.strTaskId = pTask->Job.strTaskInstanceId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	stSaveLogReq.strUserId = pTask->Job.strUserId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// 第几轮日志; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	stSaveLogReq.strRoundNum = pCase->_strRoundNum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// 要上传的日志文件; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	stSaveLogReq.strUploads = pCase->_strCaseLog; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if ( SaveCaseOrTaskLog(url, stSaveLogReq, stSaveLogResp) ) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -479,7 +557,7 @@ bool CSATExecutor::ReportCaseItemFinish(SATHTTP::STTask* pTask, SATHTTP::STCase 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	stJobProcessReq.strInstanceId = szValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	stJobProcessReq.strCaseId = pCase->strId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// 进度; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	_itoa_s(100*(atoi(pCase->strIndex.c_str()))/pTask->Job.vtCases.size(), szValue, 10); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	_itoa_s(100*(atoi(pCase->strIndex.c_str()))/pTask->vtCases.size(), szValue, 10); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	stJobProcessReq.strProgress = szValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// 需要将utf-8转gbk; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	stJobProcessReq.strReusltMessage = caseItem.name;//CharEncoding::UTF82ASCII(caseItem.name.c_str()); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -517,7 +595,7 @@ bool CSATExecutor::ReportCaseItemFinish(SATHTTP::STTask* pTask, SATHTTP::STCase 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// 如果是Android设备,需要通过adb获取; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	//stJobProcessReq.strMemoryInfo = stDevice.strMemory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	stJobProcessReq.strEndTime = CTime::GetCurrentTime().Format(_T("%Y-%m-%d %H:%M:%S"));//"2019-12-16 10:18:20"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	stJobProcessReq.strRoundNumber = "1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	stJobProcessReq.strRoundNumber = pCase->_strRoundNum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	stJobProcessReq.strResultType = "4";		// reportActionFinish; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	stJobProcessReq.strOperationStep = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -601,7 +679,7 @@ bool CSATExecutor::ReportCaseFinish(SATHTTP::STTask* pTask, SATHTTP::STCase *pCa 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	stJobProcessReq.strInstanceId = szValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	stJobProcessReq.strCaseId = pCase->strId; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// 进度(###需要修改此处###); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	_itoa_s(100*(atoi(pCase->strIndex.c_str()))/pTask->Job.vtCases.size(), szValue, 10); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	_itoa_s(100*(atoi(pCase->strIndex.c_str()))/pTask->vtCases.size(), szValue, 10); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	stJobProcessReq.strProgress = szValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// 需要将utf-8转gbk; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	stJobProcessReq.strReusltMessage = CharEncoding::ASCII2UTF8("测试用例结果:"); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -628,7 +706,7 @@ bool CSATExecutor::ReportCaseFinish(SATHTTP::STTask* pTask, SATHTTP::STCase *pCa 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// 如果是Android设备,需要通过adb获取; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	//stJobProcessReq.strMemoryInfo = stDevice.strMemory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	stJobProcessReq.strEndTime = pCase->_strEndTime;//CTime::GetCurrentTime().Format(_T("%Y-%m-%d %H:%M:%S"));//"2019-12-16 10:18:20"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	stJobProcessReq.strRoundNumber = "1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	stJobProcessReq.strRoundNumber = pCase->_strRoundNum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	stJobProcessReq.strResultType = "5";		// reportCaseFinish; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	stJobProcessReq.strOperationStep = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -881,7 +959,7 @@ bool CSATExecutor::ReportTaskFinish(SATHTTP::STTask* pTask) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// 如果是Android设备,需要通过adb获取; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	//stJobProcessReq.strMemoryInfo = stDevice.strMemory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	stJobProcessReq.strEndTime = CTime::GetCurrentTime().Format(_T("%Y-%m-%d %H:%M:%S"));//"2019-12-16 10:18:20"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	stJobProcessReq.strRoundNumber = "1"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	stJobProcessReq.strRoundNumber = pTask->Job.strRound; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	stJobProcessReq.strResultType = "1";		// reportJobFinish; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	stJobProcessReq.strOperationStep = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1005,8 +1083,8 @@ int CSATExecutor::AttachTaskInfo2Buffer(SATPROTO::TaskInfo (&pbuff)[SATPROTO::MA 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			int nIndex = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			// 用例数量; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			pbuff[count].nCaseSize = it->Job.vtCases.size();		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			for (std::vector<SATHTTP::STCase>::iterator _case = it->Job.vtCases.begin(); _case != it->Job.vtCases.end(); _case++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			pbuff[count].nCaseSize = it->vtCases.size();		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			for (std::vector<SATHTTP::STCase>::iterator _case = it->vtCases.begin(); _case != it->vtCases.end(); _case++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				// 用例状态; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				// pbuff[count].ssCases[nIndex].nStatus = _case->_nExecutionState; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				//pbuff[count].ssCases[nIndex].nCaseId = _case->_nCaseStep; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1149,7 +1227,7 @@ void CSATExecutor::EndofWork() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	// 如果有脚本在执行,结束脚本; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	CPythonExecutor *pExecutor = NULL; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	for ( std::list<SATHTTP::STTask>::iterator it = m_vtTask.begin(); it != m_vtTask.end(); it++ ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		for ( std::vector<SATHTTP::STCase>::iterator _case = it->Job.vtCases.begin(); _case != it->Job.vtCases.end(); _case++ ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		for ( std::vector<SATHTTP::STCase>::iterator _case = it->vtCases.begin(); _case != it->vtCases.end(); _case++ ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if ( (pExecutor = (CPythonExecutor *)_case->_pExcutor) ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				pExecutor->EndThread(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				delete pExecutor; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1196,8 +1274,8 @@ DWORD CSATExecutor::HearbeatThread(LPVOID lpVoid) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, _T("【任务脚本下载】:%s"), it->Job.strUniqueId.c_str()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					std::string host = GLOBAL::g_stSATConfig.szCaseServer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					std::string url = host + "/ajaxInteractiveManage!getCaseFileListUrl.action"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					std::vector<SATHTTP::STCase>::iterator _case = it->Job.vtCases.begin(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					for ( int i = 1; _case != it->Job.vtCases.end(); _case++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					std::vector<SATHTTP::STCase>::iterator _case = it->vtCases.begin(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					for ( int i = 1; _case != it->vtCases.end(); _case++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						// 下载脚本; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						_case->_nCaseStep = i++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						SATHTTP::STScriptUrlResp stScriptUrlResp; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1219,6 +1297,7 @@ DWORD CSATExecutor::HearbeatThread(LPVOID lpVoid) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					that->TaskRoundSetting(&*it); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					that->m_vtTask.push_back(*it); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					// 通知SAT服务器,脚本开始执行; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1251,7 +1330,7 @@ DWORD CSATExecutor::ExecuteScriptThread(LPVOID lpVoid) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			else {// 串行; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				// 是否有脚本用例在执行; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				SATHTTP::STCase* pCase = that->IsCaseScriptProcess(pTask->Job.vtCases); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				SATHTTP::STCase* pCase = that->IsCaseScriptProcess(pTask->vtCases); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				if ( pCase ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					CPythonExecutor *pExcutor = (CPythonExecutor*)pCase->_pExcutor; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					if ( pExcutor ) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1306,8 +1385,8 @@ DWORD CSATExecutor::ExecuteScriptThread(LPVOID lpVoid) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				// 是否支持并发; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				if ( pTask->taskInfo._bConcurrent ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					// 暂时全部一起并发; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					std::vector<SATHTTP::STCase>::iterator _case = pTask->Job.vtCases.begin(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					for ( ; _case != pTask->Job.vtCases.end(); _case++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					std::vector<SATHTTP::STCase>::iterator _case = pTask->vtCases.begin(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					for ( ; _case != pTask->vtCases.end(); _case++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						if (!_case->_pExcutor) {					 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							CPythonExecutor *pExcutor = new CPythonExecutor(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							if ( pExcutor ) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1326,9 +1405,9 @@ DWORD CSATExecutor::ExecuteScriptThread(LPVOID lpVoid) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					GLOBAL::WriteTextLog(GLOBAL::SAT_EXE, _T("\n<===============================================>\n# 1、开始执行任务:%s, 用例数量:%ld#\n<===============================================>\n"),  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						pTask->Job.strUniqueId.c_str(),  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						pTask->Job.vtCases.size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						pTask->vtCases.size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					// 是否有用例脚本在执行; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					SATHTTP::STCase* pCase = that->IsCaseScriptProcess(pTask->Job.vtCases); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					SATHTTP::STCase* pCase = that->IsCaseScriptProcess(pTask->vtCases); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					if ( !pCase ) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						// 执行空闲用例脚本; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						that->ExecuteFreeCaseScript(pTask); 
			 |