SATExecutor.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. #ifndef __SAT_EXECUTOR__
  2. #define __SAT_EXECUTOR__
  3. #pragma once
  4. #include "CritSection.h"
  5. #include "SATDevices.h"
  6. namespace SATEXE{
  7. // 命令行;
  8. typedef struct __ST_PY_CDM__{
  9. std::string strRound; // 当前轮数;
  10. int nTaskId; // 任务Id;
  11. }STPyCmd, *pSTPyCmd;
  12. std::string GetPythonCommandLine(STPyCmd &pycmd);
  13. };
  14. class CSATExecutor
  15. {
  16. CSATExecutor(void);
  17. public:
  18. // 单例对象模式;
  19. static CSATExecutor* GetInstance()
  20. {
  21. static CSATExecutor* pInstance = NULL;
  22. if ( pInstance == NULL )
  23. {
  24. pInstance = new CSATExecutor;
  25. }
  26. return pInstance;
  27. }
  28. ~CSATExecutor(void);
  29. // 用例xml;
  30. typedef struct __ST_CASEITEM__ {
  31. bool result;
  32. std::string name;
  33. std::string data;
  34. std::vector<std::string> imgs;
  35. std::string log;
  36. std::string remark;
  37. }STCaseItem, *pSTCaseItem;
  38. protected:
  39. // 线程控制句柄;
  40. HANDLE m_hEventHearbeat;
  41. // 心跳线程句柄;
  42. HANDLE m_hThreadHearbeat;
  43. // 线程控制句柄;
  44. HANDLE m_hEventExcuteScript;
  45. // 执行线程句柄;
  46. HANDLE m_hThreadExcuteScript;
  47. // 冒烟任务;
  48. DWORD m_dwSomkingThreadId;
  49. HANDLE m_hEventSomkingScript;
  50. HANDLE m_hThreadSomkingScript;
  51. // 是否登录成功;
  52. BOOL m_bLogin;
  53. // 是否结束TV串口监听;
  54. BOOL m_bStopWathTV;
  55. ThreadSection m_csTask;
  56. ThreadSection m_csSomkingTask;
  57. std::vector<SATHTTP::STTask> m_vtTask;
  58. std::vector<SATHTTP::STTask> m_vtSmokingTask;
  59. std::vector<SATHTTP::STDevice> m_vtDevice;
  60. SATHTTP::STLoginReq m_stLoginReq;
  61. SATHTTP::STLoginResp m_stLoginResp;
  62. // 执行器名称;
  63. std::string m_strActuatorName;
  64. // 任务是否存在;
  65. bool IsTaskExist(SATHTTP::STTask &task);
  66. // 下载任务脚本,并将任务加入队列;
  67. void DownloadTask(SATHTTP::STTask &task);
  68. // 是否有任务在执行;
  69. SATHTTP::STTask* IsThereATaskInProcess();
  70. // 提取未执行的任务;
  71. SATHTTP::STTask* GetFreeTask();
  72. // 移除已完成的任务;
  73. void DelFinishedTask();
  74. // 是否有用例脚本在执行;
  75. SATHTTP::STCase* IsCaseScriptProcess(std::vector<SATHTTP::STCase> &vtCases);
  76. // 提取未执行的用例;
  77. SATHTTP::STCase* GetFreeCaseScript(SATHTTP::STTask* pTask);
  78. // 执行空闲新用例;
  79. SATHTTP::STCase* ExecuteFreeCaseScript(SATHTTP::STTask* pTask);
  80. // 新任务Round配置;
  81. void TaskRoundSetting(SATHTTP::STTask* pTask);
  82. public:
  83. // 添加设备;
  84. void AddDevices(const SATDEV::STDevice &stDevice);
  85. // 删除设备;
  86. void DelDevices(const SATDEV::STDevice &stDevice);
  87. // 设置设备为状态;
  88. void SetDeviceStatus(std::string strDevName, SATDEV::DEVICE_USAGE_STATUS status);
  89. // 设备是否存在;
  90. bool IsDeviceExist(std::string strDevName);
  91. public:
  92. // 登录;
  93. bool Login(bool bLogin = true);
  94. bool Login(std::string user, std::string password, std::string actuator, bool bLogin = true);
  95. // 登出;
  96. bool Logout(std::string user, std::string password);
  97. const SATHTTP::STLoginResp *GetLoginResp() const{ return &m_stLoginResp;};
  98. // 设置执行器名称;
  99. void SetActuatorName(const char *pszActuator){ if (pszActuator) m_strActuatorName = pszActuator;};
  100. // 更新设备信息;
  101. bool UpdateDevice();
  102. // 通知SAT任务开始;
  103. bool NotifyTaskStart(SATHTTP::STTask* pTask);
  104. // 上传用例图片;
  105. bool UploadCaseImg(SATHTTP::STTask* pTask, SATHTTP::STCase *pCase, std::string img);
  106. // 上传用例结果;
  107. bool UploadCaseLog(SATHTTP::STTask* pTask, SATHTTP::STCase *pCase);
  108. // 上报用例测试项完成;
  109. bool ReportCaseItemFinish(SATHTTP::STTask* pTask, SATHTTP::STCase *pCase, STCaseItem &caseItem);
  110. // 上报用例完成;
  111. bool ReportCaseFinish(SATHTTP::STTask* pTask, SATHTTP::STCase *pCase, std::string strRunnedActionNameList);
  112. // 上报用例结果;
  113. bool ReportCaseResult(SATHTTP::STTask* pTask, SATHTTP::STCase *pCase);
  114. // 上传任务结果;
  115. bool UploadTaskLog(SATHTTP::STTask* pTask);
  116. // 上报任务开始;
  117. bool ReportTaskStart(SATHTTP::STTask* pTask);
  118. // 上报任务完成;
  119. bool ReportTaskFinish(SATHTTP::STTask* pTask);
  120. // 获取用例xml结果;
  121. bool GetCaseXMLResult(std::string xmlpath, std::vector<STCaseItem> &vtCaseItem);
  122. // 将任务列表附加到缓存中;
  123. int AttachTaskInfo2Buffer(SATPROTO::TaskInfo (&pbuff)[SATPROTO::MAX_TASKS]);
  124. // 冒烟测试任务处理(如果任务是冒烟测试类型,进行预处理);
  125. bool SmokeTaskPretreated(SATHTTP::STTask &task);
  126. // 其他接口;
  127. public:
  128. // 工作开始函数;
  129. void StartWork();
  130. // 工作结束函数;
  131. void EndofWork();
  132. // 从db中加载任务;
  133. void LoadTaskInfo();
  134. // 心跳线程;
  135. static DWORD WINAPI HearbeatThread(LPVOID lpVoid);
  136. // 执行线程;
  137. static DWORD WINAPI ExecuteScriptThread(LPVOID lpVoid);
  138. // 监听异常关机重启;
  139. static DWORD WINAPI WathTVPortThread(LPVOID lpVoid);
  140. // 冒烟任务;
  141. static DWORD WINAPI SomkingScriptThread(LPVOID lpVoid);
  142. };
  143. #endif //__SAT_EXECUTOR__