SATExecutor.h 2.8 KB

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