SATExecutor.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. #ifndef __SAT_EXECUTOR__
  2. #define __SAT_EXECUTOR__
  3. #pragma once
  4. #include "CritSection.h"
  5. #include "SATDevices.h"
  6. // 用例xml;
  7. typedef struct __ST_CASEITEM__
  8. {
  9. bool result;
  10. std::string name;
  11. std::string data;
  12. std::vector<std::string> imgs;
  13. std::string log;
  14. std::string remark;
  15. }STCaseItem, *pSTCaseItem;
  16. class CSATExecutor
  17. {
  18. CSATExecutor(void);
  19. public:
  20. // 单例对象模式;
  21. static CSATExecutor* GetInstance()
  22. {
  23. static CSATExecutor* pInstance = NULL;
  24. if ( pInstance == NULL )
  25. {
  26. pInstance = new CSATExecutor;
  27. }
  28. return pInstance;
  29. }
  30. ~CSATExecutor(void);
  31. protected:
  32. // 线程控制句柄;
  33. HANDLE m_hEventHearbeat;
  34. // 心跳线程句柄;
  35. HANDLE m_hThreadHearbeat;
  36. // 线程控制句柄;
  37. HANDLE m_hEventExcuteScript;
  38. // 执行线程句柄;
  39. HANDLE m_hThreadExcuteScript;
  40. // 是否登录成功;
  41. BOOL m_bLogin;
  42. ThreadSection m_csTask;
  43. std::list<SATHTTP::STTask> m_vtTask;
  44. std::vector<SATHTTP::STDevice> m_vtDevice;
  45. SATHTTP::STLoginReq m_stLoginReq;
  46. SATHTTP::STLoginResp m_stLoginResp;
  47. // 执行器名称;
  48. std::string m_strActuatorName;
  49. // 任务是否存在;
  50. bool IsTaskExist(SATHTTP::STTask &task);
  51. // 是否有任务在执行;
  52. SATHTTP::STTask* IsThereATaskInProcess();
  53. // 提取未执行的任务;
  54. SATHTTP::STTask* GetFreeTask();
  55. // 移除已完成的任务;
  56. void DelFinishedTask();
  57. // 是否有用例脚本在执行;
  58. SATHTTP::STCase* IsCaseScriptProcess(std::vector<SATHTTP::STCase> &vtCases);
  59. // 提取未执行的用例;
  60. SATHTTP::STCase* GetFreeCaseScript(std::vector<SATHTTP::STCase> &vtCases);
  61. // 执行空闲新用例;
  62. SATHTTP::STCase* ExecuteFreeCaseScript(SATHTTP::STTask* pTask);
  63. public:
  64. // 添加设备;
  65. void AddDevices(const SATDEV::STDevice &stDevice);
  66. // 删除设备;
  67. void DelDevices(const SATDEV::STDevice &stDevice);
  68. // 同步设备状态;
  69. void SynchDeviceStatus(std::string strDevName, SATDEV::DEVICE_USAGE_STATUS status);
  70. // 设备是否存在;
  71. bool IsDeviceExist(std::string strDevName);
  72. public:
  73. // 登录;
  74. bool Login(std::string user, std::string password, std::string actuator, bool bLogin = true);
  75. // 登出;
  76. bool Logout(std::string user, std::string password);
  77. const SATHTTP::STLoginResp *GetLoginResp() const{ return &m_stLoginResp;};
  78. // 设置执行器名称;
  79. void SetActuatorName(const char *pszActuator){ if (pszActuator) m_strActuatorName = pszActuator;};
  80. // 更新设备信息;
  81. bool UpdateDevice();
  82. // 通知SAT任务开始;
  83. bool NotifyTaskStart(SATHTTP::STTask* pTask);
  84. // 上传用例图片;
  85. bool UploadCaseImg(SATHTTP::STTask* pTask, SATHTTP::STCase *pCase, std::string img);
  86. // 上传用例结果;
  87. bool UploadCaseLog(SATHTTP::STTask* pTask, SATHTTP::STCase *pCase);
  88. // 上报用例测试项完成;
  89. bool ReportCaseItemFinish(SATHTTP::STTask* pTask, SATHTTP::STCase *pCase, STCaseItem &caseItem);
  90. // 上报用例完成;
  91. bool ReportCaseFinish(SATHTTP::STTask* pTask, SATHTTP::STCase *pCase);
  92. // 上报用例结果;
  93. bool ReportCaseResult(SATHTTP::STTask* pTask, SATHTTP::STCase *pCase);
  94. // 上传任务结果;
  95. bool UploadTaskLog(SATHTTP::STTask* pTask);
  96. // 上报任务开始;
  97. bool ReportTaskStart(SATHTTP::STTask* pTask);
  98. // 上报任务完成;
  99. bool ReportTaskFinish(SATHTTP::STTask* pTask);
  100. // 获取用例xml结果;
  101. bool GetCaseXMLResult(std::string xmlpath, std::vector<STCaseItem> &vtCaseItem);
  102. // 其他接口;
  103. public:
  104. // 工作开始函数;
  105. void StartWork();
  106. // 工作结束函数;
  107. void EndofWork();
  108. // 从db中加载任务;
  109. void LoadTaskInfo();
  110. // 心跳线程;
  111. static DWORD WINAPI HearbeatThread(LPVOID lpVoid);
  112. // 执行线程;
  113. static DWORD WINAPI ExecuteScriptThread(LPVOID lpVoid);
  114. };
  115. #endif //__SAT_EXECUTOR__