diff --git a/pom.xml b/pom.xml index fe807cae82da9c275811aedb499601e58f8d94fd..03630246ae5e99cf569440bbf78574d1e2519a78 100644 --- a/pom.xml +++ b/pom.xml @@ -48,7 +48,7 @@ org.freemarker freemarker - 2.3.19 + 2.3.23 org.hibernate @@ -458,7 +458,14 @@ 3.6 + + + com.cpjit + swagger4j + 2.2.1 + + org.jsoup jsoup diff --git a/src/main/java/yi/master/business/message/action/AutoTestAction.java b/src/main/java/yi/master/business/message/action/AutoTestAction.java index f9d274270dac63f1ba6db90ab09ff3efa8483ca9..5c3f69fcffca384da577e42a625010641cfc0842 100644 --- a/src/main/java/yi/master/business/message/action/AutoTestAction.java +++ b/src/main/java/yi/master/business/message/action/AutoTestAction.java @@ -95,6 +95,11 @@ public class AutoTestAction extends ActionSupport implements ModelDriven{ private static final long serialVersionUID = 1L; @@ -73,6 +77,12 @@ public class UserAction extends BaseAction{ * @return * @throws NoSuchAlgorithmException */ + @API(value = "user-toLogin", summary = "用户登录", parameters = { + @Param(name = "username", description = "用户名", required = true, type = "string"), + @Param(name = "password", description = "密码", required = true, type = "string"), + @Param(name = "verifyCode", description = "验证码", required = true,type= "string"), + @Param(name = "loginIdentification", description = "登录标识",type= "string") + }) public String toLogin() throws NoSuchAlgorithmException { boolean passwdLogin = false; if (PracticalUtils.isNormalString(model.getLoginIdentification())) { diff --git a/src/main/java/yi/master/coretest/message/protocol/HTTPTestClient.java b/src/main/java/yi/master/coretest/message/protocol/HTTPTestClient.java index c2ade8ca81c308faa44d0abcbe65b4dacc56de69..9a99d6add6c53e5eac087f2686406ec299ca7196 100644 --- a/src/main/java/yi/master/coretest/message/protocol/HTTPTestClient.java +++ b/src/main/java/yi/master/coretest/message/protocol/HTTPTestClient.java @@ -262,7 +262,29 @@ public class HTTPTestClient extends TestClient { if (!requestSuccessFlag) { returnMap.addMark("超过最大请求重试次数:" + config.getRetryCount() + ", 测试终止。"); } - + + //处理302状态无返回的问题 + if (returnInfo != null) { + response = (HttpResponse) returnInfo[0]; + if (response != null && 302 == response.getStatusLine().getStatusCode()) { + returnInfo = null; + //302状态的时候重新请求一次新的地址 + Header header = response.getFirstHeader("location"); + + returnMap.addMark("检测到状态码为302,使用重定向地址[" + header.getValue() + "]重新请求一次"); + try { + if (HttpMethod.GET.name().equalsIgnoreCase(method)) { + returnInfo = doGet(header.getValue(), headers, querys, requestMessage, client); + } else { + returnInfo = doPost(method, header.getValue(), headers, querys, requestMessage, encType, client); + } + } catch (Exception e) { + returnMap.addMark("使用重定向地址请求失败:"); + returnMap.addMark(e.getMessage()); + } + } + } + if (returnInfo != null) { response = (HttpResponse) returnInfo[0]; useTime = (long) returnInfo[1]; @@ -272,8 +294,8 @@ public class HTTPTestClient extends TestClient { JSONObject headersObject = new JSONObject(); headersObject.put("RequestHeader", new JSONObject()); headersObject.put("ResponseHeader", new JSONObject()); - - if (response != null) { + + if (response != null) { StringBuilder returnMsg = new StringBuilder(); //获取所有头信息 parseHeaders(headersObject.getJSONObject("ResponseHeader"), response.getAllHeaders()); diff --git a/src/main/java/yi/master/util/excel/ExportInterfaceInfo.java b/src/main/java/yi/master/util/excel/ExportInterfaceInfo.java index b8b6570450b680010f2bdf4fe80d007766d19b35..5a16b8cd897c496b6a5774ec3f8a7265f3f8d426 100644 --- a/src/main/java/yi/master/util/excel/ExportInterfaceInfo.java +++ b/src/main/java/yi/master/util/excel/ExportInterfaceInfo.java @@ -1,25 +1,20 @@ package yi.master.util.excel; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.util.Date; -import java.util.List; - import org.apache.log4j.Logger; -import org.apache.poi.ss.usermodel.Cell; -import org.apache.poi.ss.usermodel.CellStyle; -import org.apache.poi.ss.usermodel.Row; -import org.apache.poi.ss.usermodel.Sheet; -import org.apache.poi.ss.usermodel.Workbook; - +import org.apache.poi.ss.usermodel.*; import yi.master.business.message.bean.InterfaceInfo; import yi.master.business.message.bean.Parameter; import yi.master.constant.MessageKeys; import yi.master.constant.SystemConsts; -import yi.master.util.PracticalUtils; import yi.master.util.FrameworkUtil; +import yi.master.util.PracticalUtils; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.Date; +import java.util.List; /** * 从数据库导出接口详细文档 @@ -34,7 +29,7 @@ public class ExportInterfaceInfo { public static String exportDocuments (List infos, int type) throws Exception { String path = null; OutputStream outputStream = null; - String fileName = "接口文档_" + System.currentTimeMillis() + "." + (PoiExcelUtil.XLSX == type ? "xlsx" : "xls"); + String fileName = "document_" + System.currentTimeMillis() + "." + (PoiExcelUtil.XLSX == type ? "xlsx" : "xls"); try { //创建excel Workbook wb = PoiExcelUtil.createWorkBook(type); diff --git a/src/main/resources/swagger.properties b/src/main/resources/swagger.properties new file mode 100644 index 0000000000000000000000000000000000000000..8e8b9dee18d8eafd371ef2877158226186395403 --- /dev/null +++ b/src/main/resources/swagger.properties @@ -0,0 +1,9 @@ +# see https://github.com/cpjit/swagger + +packageToScan=yi.master.business +apiDescription=Master Yi Api Test +apiTitle=MasterYiApi +apiVersion=1.0.0 +teamOfService=www.xuwangcheng.com/yi +devMode=false +disabled=true \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index ed91172c1068fa9586b912fe344d85ae2765ba12..24992f5a14f920a1fcd0573cf20279e05bbd64e6 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -38,6 +38,15 @@ + + + swaggerFilter + com.cpjit.swagger4j.SwaggerFilter + + + swaggerFilter + /doc/* + DruidWebStatFilter diff --git a/src/main/webapp/resource/advanced/chooseMessageScene.js b/src/main/webapp/resource/advanced/chooseMessageScene.js index b988e7e47a2ae06a11ae2667fb0d6b4fee856edc..d9d36da6ba7b80d0358e480c8105a72da69b850c 100644 --- a/src/main/webapp/resource/advanced/chooseMessageScene.js +++ b/src/main/webapp/resource/advanced/chooseMessageScene.js @@ -203,7 +203,26 @@ $(function(){ }); /**********************************************************************************************************************/ +var customTestData = false; +/** + * 自定义测试数据 + */ +function changeTestData () { + layer.prompt({ + formType: 2, + value: $('#scene-test-request-message').val(), + title: "自定义测试数据", + offset: '30px', + area: ['500px', '300px'] //自定义文本域宽高 + }, function(value, index, elem){ + if (value != $('#scene-test-request-message').val()) { + $('#scene-test-request-message').val(value); + customTestData = true; + } + layer.close(index); + }); +} /** * 场景测试页面渲染 */ @@ -269,7 +288,7 @@ function sceneTest() { var index = layer.msg('正在进行测试...', {icon:16, time:9999999, shade:0.35}); - $.post(REQUEST_URL.AUTO_TEST.TEST_SCENE_URL, {systemId:$('#select-system').val(), messageSceneId:messageSceneId, dataId:dataId, requestUrl:requestUrl, requestMessage:requestMessage},function(data) { + $.post(REQUEST_URL.AUTO_TEST.TEST_SCENE_URL, {customTestData: customTestData, systemId:$('#select-system').val(), messageSceneId:messageSceneId, dataId:dataId, requestUrl:requestUrl, requestMessage:requestMessage},function(data) { if (data.returnCode == 0) { layer.close(index); renderResultViewPage(data.data, messageSceneId); @@ -278,4 +297,5 @@ function sceneTest() { layer.alert(data.msg, {icon:5}); } }); -} \ No newline at end of file +} + diff --git a/src/main/webapp/resource/message/messageScene.js b/src/main/webapp/resource/message/messageScene.js index 3804f98e1c34a336f8e288c961e852d9ed2596d4..107db3079cc45bdc08639e347fbfefb8f1b98117 100644 --- a/src/main/webapp/resource/message/messageScene.js +++ b/src/main/webapp/resource/message/messageScene.js @@ -732,7 +732,7 @@ $(function(){ }); /**********************************************************************************************************************/ - +var customTestData = false; /** * 场景测试页面渲染 */ @@ -770,6 +770,7 @@ function renderSceneTestPage(flag) { return false; } $F.find("#scene-test-request-message").val(data.data[systemId]["requestData"][$(that).val()]["dataJson"]); + customTestData = false; }); $selectSystem.change(); @@ -799,7 +800,7 @@ function sceneTest() { var index = layer.msg('正在进行测试...', {icon:16, time:9999999, shade:0.35}); - $.post(REQUEST_URL.AUTO_TEST.TEST_SCENE_URL, {messageSceneId:messageSceneId, dataId:dataId, requestUrl:requestUrl, requestMessage:requestMessage, systemId:systemId},function(data) { + $.post(REQUEST_URL.AUTO_TEST.TEST_SCENE_URL, {customTestData: customTestData, messageSceneId:messageSceneId, dataId:dataId, requestUrl:requestUrl, requestMessage:requestMessage, systemId:systemId},function(data) { if (data.returnCode == 0) { layer.close(index); renderResultViewPage(data.data, messageSceneId); @@ -845,4 +846,24 @@ function editSceneConfigVariable (obj, editMode) { }); return returnContext; +} + + +/** + * 自定义测试数据 + */ +function changeTestData () { + layer.prompt({ + formType: 2, + value: $('#scene-test-request-message').val(), + title: "自定义测试数据", + offset: '30px', + area: ['500px', '300px'] //自定义文本域宽高 + }, function(value, index, elem){ + if (value != $('#scene-test-request-message').val()) { + $('#scene-test-request-message').val(value); + customTestData = true; + } + layer.close(index); + }); } \ No newline at end of file diff --git a/src/main/webapp/resource/message/setScene.js b/src/main/webapp/resource/message/setScene.js index 87653e6b71579ddc82c6f2e49d98e93029d7e062..cd24b074691f174df4ec795806dc21e1b54d009d 100644 --- a/src/main/webapp/resource/message/setScene.js +++ b/src/main/webapp/resource/message/setScene.js @@ -368,6 +368,29 @@ $(function(){ }); /****************************************************************/ + +var customTestData = false; + +/** + * 自定义测试数据 + */ +function changeTestData () { + layer.prompt({ + formType: 2, + value: $('#scene-test-request-message').val(), + title: "自定义测试数据", + offset: '30px', + area: ['500px', '300px'] //自定义文本域宽高 + }, function(value, index, elem){ + if (value != $('#scene-test-request-message').val()) { + $('#scene-test-request-message').val(value); + customTestData = true; + } + layer.close(index); + }); +} + + function viewRunSettingConfig () { layer_show(currentSetInfo.setName + "-运行时配置", templates["set-setting-config"](currentSetInfo.config), '800', '640', 1, function() { resetOptions(); @@ -481,7 +504,7 @@ function sceneTest() { var systemId = $F.find("#select-system").val(); var index = layer.msg('正在进行测试...', {icon:16, time:9999999, shade:0.35}); - $.post(REQUEST_URL.AUTO_TEST.TEST_SCENE_URL, {messageSceneId:messageSceneId, dataId:dataId, requestUrl:requestUrl, requestMessage:requestMessage, systemId:systemId},function(data) { + $.post(REQUEST_URL.AUTO_TEST.TEST_SCENE_URL, {customTestData: customTestData, messageSceneId:messageSceneId, dataId:dataId, requestUrl:requestUrl, requestMessage:requestMessage, systemId:systemId},function(data) { if (data.returnCode == 0) { layer.close(index); renderResultViewPage(data.data, messageSceneId); diff --git a/src/main/webapp/resource/template/messageScene-test.htm b/src/main/webapp/resource/template/messageScene-test.htm index e93dc971b3088cea6a3af8729dca4901841d618a..699b50db1b720cbeba17fd8b7d2aa230d1ae067a 100644 --- a/src/main/webapp/resource/template/messageScene-test.htm +++ b/src/main/webapp/resource/template/messageScene-test.htm @@ -4,7 +4,7 @@ - 执行测试 + 执行测试 自定义数据 diff --git a/update.md b/update.md index fe0dbf4df036ead3ed55f4e8d5a4aeb752afc8b9..cda44c717a087c1c04eaece2fb37c552b2a5e0cd 100644 --- a/update.md +++ b/update.md @@ -1,3 +1,11 @@ +### v1.0.3 +#### 2020.2.5 +- 更新:单个场景调试时可自定义报文内容; +- 修复:HTTP请求时返回302状态时报错的问题;(未测试) +- 新增:集成swagger4j,可查看api文档,使用方法:修改swagger.properties中disabled=false,启动项目打开http://localhost:8080/doc/index.html,api注解使用请参考https://github.com/cpjit/swagger +- 更新:生成接口文档时指定名称修改为英文,防止某些Linux服务器上出现文件名中文乱码的文件; + + ### v1.0.2 #### 2020.1.2 - 新增:全局变量 -> 数据库取值,可通过SQL语句从数据库获取指定变量;