AutomatedTestCaseSingleDao.class.php 11 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 AutomatedTestCaseSingleDao
  19. {
  20. /**
  21. * 新增用例单例
  22. * @param $case_id
  23. * @param $case_data
  24. * @param $case_code
  25. * @param $status_code
  26. * @param $match_type
  27. * @param $match_rule
  28. * @param $api_name
  29. * @param $api_uri
  30. * @param $api_request_type
  31. * @param $order_number
  32. * @return bool
  33. */
  34. public function addSingleTestCase(&$case_id, &$case_data, &$case_code, &$status_code, &$match_type, &$match_rule, &$api_name, &$api_uri, &$api_request_type, &$order_number)
  35. {
  36. $db = getDatabase();
  37. $db->prepareExecute('INSERT INTO eo_project_test_case_single(eo_project_test_case_single.caseID,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,eo_project_test_case_single.orderNumber) VALUES (?,?,?,?,?,?,?,?,?,?);', array(
  38. $case_id,
  39. $case_data,
  40. $case_code,
  41. $status_code,
  42. $match_type,
  43. $match_rule,
  44. $api_name,
  45. $api_uri,
  46. $api_request_type,
  47. $order_number
  48. ));
  49. if ($db->getAffectRow() > 0)
  50. return $db->getLastInsertID();
  51. else
  52. return FALSE;
  53. }
  54. /**
  55. * 修改用例单例
  56. * @param $case_id
  57. * @param $conn_id
  58. * @param $case_data
  59. * @param $case_code
  60. * @param $status_code
  61. * @param $match_type
  62. * @param $match_rule
  63. * @param $api_name
  64. * @param $api_uri
  65. * @param $api_request_type
  66. * @return bool
  67. */
  68. public function editSingleTestCase(&$case_id, &$conn_id, &$case_data, &$case_code, &$status_code, &$match_type, &$match_rule, &$api_name, &$api_uri, &$api_request_type)
  69. {
  70. $db = getDatabase();
  71. $db->prepareExecute('UPDATE eo_project_test_case_single SET 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 = ? WHERE eo_project_test_case_single.caseID = ? AND eo_project_test_case_single.connID = ?;', array(
  72. $case_data,
  73. $case_code,
  74. $status_code,
  75. $match_type,
  76. $match_rule,
  77. $api_name,
  78. $api_uri,
  79. $api_request_type,
  80. $case_id,
  81. $conn_id
  82. ));
  83. if ($db->getAffectRow() > 0)
  84. return TRUE;
  85. else
  86. return FALSE;
  87. }
  88. /**
  89. * 获取单例列表
  90. * @param $case_id
  91. * @return bool
  92. */
  93. public function getSingleTestCaseList(&$case_id)
  94. {
  95. $db = getDatabase();
  96. $db->beginTransaction();
  97. $result = $db->prepareExecuteAll('SELECT * FROM eo_project_test_case_single WHERE eo_project_test_case_single.caseID = ? ORDER BY eo_project_test_case_single.connID ASC;', array($case_id));
  98. $i = 0;
  99. $index = 1;
  100. if (is_array($result)) {
  101. foreach ($result as &$single_case) {
  102. if (($single_case['orderNumber'] == NULL && $index == 1) || $index > 1) {
  103. if (preg_match_all('#<response\[(\d+)\]#', $single_case['caseData'], $match) > 0) {
  104. foreach ($match[1] as $response_id) {
  105. $single_case['caseData'] = str_replace("<response[" . $response_id, "<response[" . $result[$i]['connID'], $single_case['caseData']);
  106. }
  107. }
  108. $db->prepareExecute('UPDATE eo_project_test_case_single SET eo_project_test_case_single.orderNumber = ?,eo_project_test_case_single.caseData = ? WHERE eo_project_test_case_single.connID = ?;', array(
  109. $index,
  110. $single_case['caseData'],
  111. $single_case['connID']
  112. ));
  113. if ($db->getAffectRow() < 1) {
  114. $db->rollback();
  115. return FALSE;
  116. }
  117. $single_case['orderNumber'] = $index;
  118. $index++;
  119. }
  120. if ($single_case['matchType'] == 2 && !empty($single_case['matchRule'])) {
  121. $single_case['matchRule'] = json_decode($single_case['matchRule'], TRUE);
  122. }
  123. }
  124. }
  125. if ($result) {
  126. $db->commit();
  127. return array_reverse($result);
  128. } else {
  129. $db->rollback();
  130. return FALSE;
  131. }
  132. }
  133. /**
  134. * 获取单例详情
  135. * @param $project_id
  136. * @param $conn_id
  137. * @return bool
  138. */
  139. public function getSingleTestCaseInfo(&$project_id, &$conn_id)
  140. {
  141. $db = getDatabase();
  142. $result = $db->prepareExecute('SELECT * FROM eo_project_test_case_single INNER JOIN eo_project_test_case ON eo_project_test_case.caseID = eo_project_test_case_single.caseID WHERE eo_project_test_case_single.connID = ? AND eo_project_test_case.projectID = ?;', array($conn_id, $project_id));
  143. if ($result['matchType'] == 2 && !empty($result['matchRule'])) {
  144. $result['matchRule'] = json_decode($result['matchRule'], TRUE);
  145. }
  146. if ($result)
  147. return $result;
  148. else
  149. return FALSE;
  150. }
  151. /**
  152. * 删除测试用例
  153. * @param $conn_ids
  154. * @param $project_id
  155. * @return bool
  156. */
  157. public function deleteSingleTestCase(&$conn_ids, &$project_id)
  158. {
  159. $db = getDatabase();
  160. $db->prepareExecute("DELETE FROM eo_project_test_case_single WHERE eo_project_test_case_single.connID IN ($conn_ids) AND eo_project_test_case_single.caseID IN (SELECT eo_project_test_case.caseID FROM eo_project_test_case WHERE eo_project_test_case.projectID = ?);", array(
  161. $project_id
  162. ));
  163. if ($db->getAffectRow() > 0)
  164. return TRUE;
  165. else
  166. return FALSE;
  167. }
  168. /**
  169. * 获取单例列表
  170. * @param $project_id
  171. * @return bool
  172. */
  173. public function getAllSingleTestCaseList(&$project_id)
  174. {
  175. $db = getDatabase();
  176. $result = $db->prepareExecuteAll('SELECT eo_project_test_case_single.* FROM eo_project_test_case INNER JOIN eo_project_test_case_single ON eo_project_test_case_single.caseID = eo_project_test_case.caseID WHERE eo_project_test_case.projectID = ? ORDER BY eo_project_test_case_single.connID ASC;', array($project_id));
  177. foreach ($result as &$single_case) {
  178. if ($single_case['matchType'] == 2 && !empty($single_case['matchRule'])) {
  179. $single_case['matchRule'] = json_decode($single_case['matchRule'], TRUE);
  180. }
  181. }
  182. if ($result)
  183. return array_reverse($result);
  184. else
  185. return FALSE;
  186. }
  187. /**
  188. * 检查单例权限
  189. * @param $conn_id
  190. * @param $user_id
  191. * @return bool
  192. */
  193. public function checkSingleTestCasePermission(&$conn_id, &$user_id)
  194. {
  195. $db = getDatabase();
  196. $result = $db->prepareExecute('SELECT eo_project_test_case.projectID FROM eo_project_test_case_single LEFT JOIN eo_project_test_case ON eo_project_test_case_single.caseID = eo_project_test_case.caseID LEFT JOIN eo_conn_project ON eo_project_test_case.projectID = eo_conn_project.projectID WHERE eo_project_test_case_single.connID = ? AND eo_conn_project.userID = ?;', array(
  197. $conn_id,
  198. $user_id
  199. ));
  200. if (empty($result)) {
  201. return FALSE;
  202. } else {
  203. return $result['projectID'];
  204. }
  205. }
  206. /**
  207. * 获取用例名称
  208. * @param $conn_id
  209. * @return bool
  210. */
  211. public function getTestCastName(&$conn_id)
  212. {
  213. $db = getDatabase();
  214. $result = $db->prepareExecute("SELECT GROUP_CONCAT(DISTINCT(eo_project_test_case.caseName)) AS caseName FROM eo_project_test_case_single LEFT JOIN eo_project_test_case ON eo_project_test_case_single.caseID = eo_project_test_case.caseID WHERE eo_project_test_case_single.connID IN ($conn_id);", array());
  215. if (empty($result)) {
  216. return FALSE;
  217. } else {
  218. return $result['caseName'];
  219. }
  220. }
  221. /**
  222. * 根据connID获取用例ID
  223. * @param $conn_id
  224. * @return bool
  225. */
  226. public function getCaseIDByConnID(&$conn_id)
  227. {
  228. $db = getDatabase();
  229. $result = $db->prepareExecute("SELECT eo_project_test_case_single.caseID FROM eo_project_test_case_single WHERE eo_project_test_case_single.connID IN ($conn_id);", array());
  230. if (empty($result)) {
  231. return FALSE;
  232. } else {
  233. return $result['caseID'];
  234. }
  235. }
  236. /**
  237. * 获取所有api列表
  238. * @param $project_id
  239. * @return bool
  240. */
  241. public function getApiList(&$project_id)
  242. {
  243. $db = getDatabase();
  244. $result = $db->prepareExecuteAll("SELECT eo_api.apiID,eo_api.apiName,eo_api.apiURI,eo_api_group.groupID,eo_api_group.parentGroupID,eo_api_group.groupName,eo_api.apiStatus,eo_api.apiRequestType,eo_api.apiUpdateTime,eo_api.starred,eo_api_cache.apiJson FROM eo_api INNER JOIN eo_api_group ON eo_api.groupID = eo_api_group.groupID INNER JOIN eo_api_cache ON eo_api.apiID = eo_api_cache.apiID WHERE eo_api_group.projectID = ? AND eo_api.removed = 0 ORDER BY eo_api.apiName DESC;", array(
  245. $project_id
  246. ));
  247. foreach ($result as &$api) {
  248. $api_json = json_decode($api['apiJson'], TRUE);
  249. $api['headerInfo'] = $api_json['headerInfo'];
  250. $api['requestInfo'] = $api_json['requestInfo'];
  251. $api['resultInfo'] = $api_json['resultInfo'];
  252. unset($api['apiJson']);
  253. }
  254. if (empty($result))
  255. return FALSE;
  256. else
  257. return $result;
  258. }
  259. }