AutomatedTestCaseDao.class.php 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. <?php
  2. /**
  3. * @name eolinker ams open source,eolinker开源版本
  4. * @link https://www.eolinker.com/
  5. * @package eolinker
  6. * @author www.eolinker.com 广州银云信息科技有限公司 ©2015-2018
  7. * eoLinker是目前全球领先、国内最大的在线API接口管理平台,提供自动生成API文档、API自动化测试、Mock测试、团队协作等功能,旨在解决由于前后端分离导致的开发效率低下问题。
  8. * 如在使用的过程中有任何问题,欢迎加入用户讨论群进行反馈,我们将会以最快的速度,最好的服务态度为您解决问题。
  9. *
  10. * eoLinker AMS开源版的开源协议遵循Apache License 2.0,如需获取最新的eolinker开源版以及相关资讯,请访问:https://www.eolinker.com/#/os/download
  11. *
  12. * 官方网站:https://www.eolinker.com/
  13. * 官方博客以及社区:http://blog.eolinker.com/
  14. * 使用教程以及帮助:http://help.eolinker.com/
  15. * 商务合作邮箱:market@eolinker.com
  16. * 用户讨论QQ群:284421832
  17. */
  18. class AutomatedTestCaseDao
  19. {
  20. /**
  21. * 新增测试用例
  22. * @param $project_id
  23. * @param $user_id
  24. * @param $case_name
  25. * @param $case_desc
  26. * @param $case_type
  27. * @param $group_id
  28. * @return bool
  29. */
  30. public function addTestCase(&$project_id, &$user_id, &$case_name, &$case_desc, &$case_type, &$group_id)
  31. {
  32. $db = getDatabase();
  33. $db->prepareExecute('INSERT INTO eo_project_test_case(eo_project_test_case.projectID,eo_project_test_case.userID,eo_project_test_case.caseName,eo_project_test_case.caseDesc,eo_project_test_case.createTime,eo_project_test_case.updateTime,eo_project_test_case.caseType,eo_project_test_case.groupID)VALUES(?,?,?,?,?,?,?,?);', array(
  34. $project_id,
  35. $user_id,
  36. $case_name,
  37. $case_desc,
  38. date('Y-m-d H:i:s', time()),
  39. date('Y-m-d H:i:s', time()),
  40. $case_type,
  41. $group_id
  42. ));
  43. if ($db->getAffectRow() > 0)
  44. return $db->getLastInsertID();
  45. else
  46. return FALSE;
  47. }
  48. /**
  49. * 修改测试用例
  50. * @param $project_id
  51. * @param $user_id
  52. * @param $case_id
  53. * @param $case_name
  54. * @param $case_desc
  55. * @param $case_type
  56. * @param $group_id
  57. * @return bool
  58. */
  59. public function editTestCase(&$project_id, &$user_id, &$case_id, &$case_name, &$case_desc, &$case_type, &$group_id)
  60. {
  61. $db = getDatabase();
  62. $db->prepareExecute('UPDATE eo_project_test_case SET eo_project_test_case.userID = ?,eo_project_test_case.caseName = ?,eo_project_test_case.caseDesc = ?,eo_project_test_case.updateTime = ?,eo_project_test_case.caseType = ?,eo_project_test_case.groupID = ? WHERE eo_project_test_case.caseID = ? AND eo_project_test_case.projectID = ?;', array(
  63. $user_id,
  64. $case_name,
  65. $case_desc,
  66. date('Y-m-d H:i:s', time()),
  67. $case_type,
  68. $group_id,
  69. $case_id,
  70. $project_id
  71. ));
  72. if ($db->getAffectRow() > 0)
  73. return TRUE;
  74. else
  75. return FALSE;
  76. }
  77. /**
  78. * 获取测试用例列表
  79. * @param $group_id
  80. * @return bool
  81. */
  82. public function getTestCaseList(&$group_id)
  83. {
  84. $db = getDatabase();
  85. $result = $db->prepareExecuteAll("SELECT eo_conn_project.partnerNickName,eo_user.userNickName,eo_project_test_case.caseID,eo_project_test_case.caseName,eo_project_test_case.caseDesc,eo_project_test_case.updateTime,eo_project_test_case.caseType,eo_project_test_case_group.groupID,eo_project_test_case_group.parentGroupID,eo_project_test_case_group.groupName FROM eo_project_test_case LEFT JOIN eo_project_test_case_group ON eo_project_test_case_group.groupID = eo_project_test_case.groupID LEFT JOIN eo_conn_project ON eo_conn_project.userID = eo_project_test_case.userID AND eo_conn_project.projectID = eo_project_test_case.projectID LEFT JOIN eo_user ON eo_project_test_case.userID = eo_user.userID WHERE eo_project_test_case_group.groupID = ? OR (eo_project_test_case_group.parentGroupID = ? AND eo_project_test_case_group.isChild = 1) ORDER BY eo_project_test_case.updateTime DESC;", array(
  86. $group_id,
  87. $group_id
  88. ));
  89. if ($result)
  90. return $result;
  91. else
  92. return FALSE;
  93. }
  94. /**
  95. * 获取所有测试用例列表
  96. * @param $project_id
  97. * @return bool
  98. */
  99. public function getAllTestCaseList(&$project_id)
  100. {
  101. $db = getDatabase();
  102. $result = $db->prepareExecuteAll("SELECT eo_conn_project.partnerNickName,eo_user.userNickName,eo_project_test_case.caseID,eo_project_test_case.caseName,eo_project_test_case.caseDesc,eo_project_test_case.updateTime,eo_project_test_case.caseType,eo_project_test_case_group.groupID,eo_project_test_case_group.parentGroupID,eo_project_test_case_group.groupName FROM eo_project_test_case LEFT JOIN eo_project_test_case_group ON eo_project_test_case_group.groupID = eo_project_test_case.groupID LEFT JOIN eo_conn_project ON eo_project_test_case.userID = eo_conn_project.userID AND eo_conn_project.projectID = eo_project_test_case.projectID LEFT JOIN eo_user ON eo_project_test_case.userID = eo_user.userID WHERE eo_project_test_case.projectID = ? ORDER BY eo_project_test_case.updateTime DESC;", array(
  103. $project_id
  104. ));
  105. if ($result)
  106. return $result;
  107. else
  108. return FALSE;
  109. }
  110. /**
  111. * 获取测试用例详情
  112. * @param $case_id
  113. * @return bool
  114. */
  115. public function getTestCaseInfo(&$case_id)
  116. {
  117. $db = getDatabase();
  118. $result = $db->prepareExecute("SELECT eo_conn_project.partnerNickName,eo_user.userNickName,eo_project_test_case.caseID,eo_project_test_case.caseName,eo_project_test_case.caseDesc,eo_project_test_case.updateTime,eo_project_test_case.caseType,eo_project_test_case_group.groupID,eo_project_test_case_group.parentGroupID,eo_project_test_case_group.groupName FROM eo_project_test_case LEFT JOIN eo_project_test_case_group ON eo_project_test_case_group.groupID = eo_project_test_case.groupID LEFT JOIN eo_conn_project ON eo_project_test_case.userID = eo_conn_project.userID AND eo_conn_project.projectID = eo_project_test_case.projectID LEFT JOIN eo_user ON eo_project_test_case.userID = eo_user.userID WHERE eo_project_test_case.caseID = ?;", array(
  119. $case_id
  120. ));
  121. if ($result)
  122. return $result;
  123. else
  124. return FALSE;
  125. }
  126. /**
  127. * 删除测试用例
  128. * @param $project_id
  129. * @param $case_ids
  130. * @return bool
  131. */
  132. public function deleteTestCases(&$project_id, &$case_ids)
  133. {
  134. $db = getDatabase();
  135. $db->beginTransaction();
  136. $db->prepareExecuteAll("DELETE FROM eo_project_test_case_single WHERE eo_project_test_case_single.caseID IN ($case_ids);", array());
  137. $db->prepareExecuteAll("DELETE FROM eo_project_test_case WHERE eo_project_test_case.caseID IN ($case_ids) AND eo_project_test_case.projectID = ?", array($project_id));
  138. if ($db->getAffectRow() > 0) {
  139. $db->commit();
  140. return TRUE;
  141. } else {
  142. $db->rollback();
  143. return FALSE;
  144. }
  145. }
  146. /**
  147. * 根据ID获取用例名称
  148. * @param $case_ids
  149. * @return bool
  150. */
  151. public function getTestCaseName(&$case_ids)
  152. {
  153. $db = getDatabase();
  154. $result = $db->prepareExecuteAll("SELECT GROUP_CONCAT(eo_project_test_case.caseName) FROM eo_project_test_case WHERE eo_project_test_case.caseID IN(" . $case_ids . ");");
  155. if (empty($result))
  156. return FALSE;
  157. else
  158. return $result;
  159. }
  160. /**
  161. * 搜索测试用例
  162. * @param $project_id
  163. * @param $tips
  164. * @return bool
  165. */
  166. public function searchTestCase(&$project_id, &$tips)
  167. {
  168. $db = getDatabase();
  169. $result = $db->prepareExecuteAll("SELECT eo_conn_project.partnerNickName,eo_user.userNickName,eo_project_test_case.caseID,eo_project_test_case.caseName,eo_project_test_case.caseDesc,eo_project_test_case.updateTime,eo_project_test_case.caseType,eo_project_test_case_group.groupID,eo_project_test_case_group.parentGroupID,eo_project_test_case_group.groupName FROM eo_project_test_case LEFT JOIN eo_project_test_case_group ON eo_project_test_case_group.groupID = eo_project_test_case.groupID LEFT JOIN eo_conn_project ON eo_project_test_case.userID = eo_conn_project.userID AND eo_conn_project.projectID = eo_project_test_case.projectID LEFT JOIN eo_user ON eo_project_test_case.userID = eo_user.userID WHERE eo_project_test_case.projectID = ? AND eo_project_test_case.caseName LIKE ? ORDER BY eo_project_test_case.updateTime DESC;", array(
  170. $project_id,
  171. '%' . $tips . '%',
  172. ));
  173. if ($result)
  174. return $result;
  175. else
  176. return FALSE;
  177. }
  178. /**
  179. * 检查用例权限
  180. * @param $case_id
  181. * @param $user_id
  182. * @return bool
  183. */
  184. public function checkTestCasePermission(&$case_id, &$user_id)
  185. {
  186. $db = getDatabase();
  187. $result = $db->prepareExecute('SELECT eo_project_test_case.projectID FROM eo_project_test_case LEFT JOIN eo_conn_project ON eo_project_test_case.projectID = eo_conn_project.projectID WHERE eo_project_test_case.caseID = ? AND eo_conn_project.userID = ?;', array(
  188. $case_id,
  189. $user_id
  190. ));
  191. if (empty($result)) {
  192. return FALSE;
  193. } else {
  194. return $result['projectID'];
  195. }
  196. }
  197. /**
  198. * 根据分组ID获取用例列表
  199. * @param $project_id
  200. * @param $group_id
  201. * @return bool
  202. */
  203. public function getTestCaseDataList(&$project_id, &$group_id)
  204. {
  205. $db = getDatabase();
  206. $case_list = $db->prepareExecuteAll('SELECT eo_project_test_case.caseID,eo_project_test_case.caseName,eo_project_test_case.caseType FROM eo_project_test_case LEFT JOIN eo_project_test_case_group ON eo_project_test_case.groupID = eo_project_test_case_group.groupID WHERE eo_project_test_case.projectID = ? AND (eo_project_test_case.groupID = ? OR eo_project_test_case_group.parentGroupID = ?);', array(
  207. $project_id,
  208. $group_id,
  209. $group_id
  210. ));
  211. if (!empty($case_list)) {
  212. foreach ($case_list as &$case) {
  213. $case['singleCaseList'] = $db->prepareExecuteAll('SELECT eo_project_test_case_single.connID,eo_project_test_case_single.caseData,eo_project_test_case_single.caseCode,eo_project_test_case_single.statusCode,eo_project_test_case_single.matchType,eo_project_test_case_single.matchRule,eo_project_test_case_single.apiName,eo_project_test_case_single.apiURI,eo_project_test_case_single.apiRequestType FROM eo_project_test_case_single WHERE eo_project_test_case_single.caseID = ?;', array(
  214. $case['caseID']
  215. ));
  216. if (!empty($case['singleCaseList'])) {
  217. foreach ($case['singleCaseList'] as $single_case) {
  218. if ($single_case['matchType'] == 2 && !empty($single_case['matchRule'])) {
  219. $single_case['matchRule'] = json_decode($single_case['matchRule'], TRUE);
  220. }
  221. }
  222. }
  223. unset($case['caseID']);
  224. }
  225. return $case_list;
  226. } else {
  227. return FALSE;
  228. }
  229. }
  230. /**
  231. * 根据项目ID获取全部用例数据列表
  232. * @param $project_id
  233. * @return bool
  234. */
  235. public function getAllTestCaseDataList(&$project_id)
  236. {
  237. $db = getDatabase();
  238. $case_list = $db->prepareExecuteAll('SELECT eo_project_test_case.caseID,eo_project_test_case.caseName,eo_project_test_case.caseType FROM eo_project_test_case WHERE eo_project_test_case.projectID = ?;', array(
  239. $project_id
  240. ));
  241. if (!empty($case_list)) {
  242. foreach ($case_list as &$case) {
  243. $case['singleCaseList'] = $db->prepareExecuteAll('SELECT eo_project_test_case_single.connID,eo_project_test_case_single.caseData,eo_project_test_case_single.caseCode,eo_project_test_case_single.statusCode,eo_project_test_case_single.matchType,eo_project_test_case_single.matchRule,eo_project_test_case_single.apiName,eo_project_test_case_single.apiURI,eo_project_test_case_single.apiRequestType FROM eo_project_test_case_single WHERE eo_project_test_case_single.caseID = ?;', array(
  244. $case['caseID']
  245. ));
  246. if (!empty($case['singleCaseList'])) {
  247. foreach ($case['singleCaseList'] as $single_case) {
  248. if ($single_case['matchType'] == 2 && !empty($single_case['matchRule'])) {
  249. $single_case['matchRule'] = json_decode($single_case['matchRule'], TRUE);
  250. }
  251. }
  252. }
  253. unset($case['caseID']);
  254. }
  255. return $case_list;
  256. } else {
  257. return FALSE;
  258. }
  259. }
  260. }