├── src └── main │ ├── webapp │ ├── css │ │ ├── updatastep1.css │ │ └── Addstep1.css │ ├── META-INF │ │ └── MANIFEST.MF │ ├── Note.txt │ ├── Tool │ │ ├── Result.html │ │ ├── Result.jsp │ │ ├── RandomParm.jsp │ │ ├── RunCaseNow.jsp │ │ └── RandomParmImprove.jsp │ ├── index.html │ ├── Controller │ │ ├── GetApiFromModelName.jsp │ │ └── AddCaseApi.jsp │ ├── Centre.jsp │ ├── login(demo).jsp │ ├── JunitTemplate │ │ └── JunitTemplates.ftl │ ├── WEB-INF │ │ └── web.xml │ ├── NewTreeDemo.jsp │ ├── login.jsp │ ├── UpdataCase │ │ └── UpdataStep1.jsp │ └── AddCase │ │ └── Step1.jsp │ ├── resources │ └── JDBCConfig.properties │ └── java │ └── com │ ├── talk51 │ └── Utils │ │ ├── GenTool.java │ │ ├── PutMethod_mulit.java │ │ ├── ToolForRandomParmRandomUnit.java │ │ ├── PostMethod_application_json_mulit.java │ │ ├── PostMethod_Old.java │ │ ├── StringTool.java │ │ ├── HttpMethodFactory.java │ │ ├── GetMethod_Old.java │ │ ├── HttpUtils.java │ │ └── JDBCConnectionPool.java │ ├── borderTest │ ├── PageNoBorderParam.java │ ├── PageSizeBorderParam.java │ ├── DateYYBorderParam.java │ ├── DateHHBorderParam.java │ ├── DecimalBorderParam.java │ ├── IntegerBorderParam.java │ ├── BorderParam.java │ ├── JSONBorderParam.java │ ├── MultiBorderParam.java │ └── BorderCheckUtil.java │ ├── test │ ├── FibonacciSupplier.java │ ├── DateSlot.java │ ├── test2.java │ ├── IsPopOrder.java │ ├── Exchange.java │ ├── MinimumPath.java │ ├── Happy.java │ ├── JedisTest1.java │ ├── SuanFaBiSai1.java │ └── test1.java │ └── servlet │ ├── RunnerTest.java │ ├── login.java │ ├── JunitGen.java │ ├── DelCasesServlet.java │ ├── UpdateCaseApi.java │ ├── GetApiListByModelNameAndUserId.java │ └── RunMuiltTest_new.java └── pom.xml /src/main/webapp/css/updatastep1.css: -------------------------------------------------------------------------------- 1 | #list_t{font-size:10px;;text-align:left} -------------------------------------------------------------------------------- /src/main/webapp/META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Class-Path: 3 | 4 | -------------------------------------------------------------------------------- /src/main/webapp/Note.txt: -------------------------------------------------------------------------------- 1 | http://172.16.0.71:8081/talkplatform_idgenerator_consumer/genId?keyName=stu_point.id -------------------------------------------------------------------------------- /src/main/webapp/css/Addstep1.css: -------------------------------------------------------------------------------- 1 | #all 2 | { 3 | margin-left:10%; 4 | margin-right:10%; 5 | position:relative 6 | } -------------------------------------------------------------------------------- /src/main/resources/JDBCConfig.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zyanycall/PlatformForCase/HEAD/src/main/resources/JDBCConfig.properties -------------------------------------------------------------------------------- /src/main/java/com/talk51/Utils/GenTool.java: -------------------------------------------------------------------------------- 1 | package com.talk51.Utils; 2 | 3 | public class GenTool { 4 | public static String GetTimeGenId() { 5 | return Long.toString(System.currentTimeMillis()).substring(Long.toString(System.currentTimeMillis()).length() - 8, Long.toString(System.currentTimeMillis()).length()); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/com/borderTest/PageNoBorderParam.java: -------------------------------------------------------------------------------- 1 | package com.borderTest; 2 | 3 | import java.util.Set; 4 | 5 | /** 6 | * 分页pageNo专用的边界测试 7 | */ 8 | public class PageNoBorderParam extends IntegerBorderParam { 9 | PageNoBorderParam(String paramPair, String key, String value) { 10 | super(paramPair, key, value); 11 | } 12 | 13 | @Override 14 | public Set getParamList() { 15 | 16 | // 其它容易错的数字 17 | paramPairList.add(key + "=99"); 18 | 19 | return super.getParamList(); 20 | } 21 | } -------------------------------------------------------------------------------- /src/main/webapp/Tool/Result.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 测试结果: 6 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /src/main/webapp/Tool/Result.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=UTF-8" 2 | pageEncoding="UTF-8" 3 | import="java.util.*" 4 | import="java.io.*" 5 | %> 6 | 7 | 8 | 9 | 10 | 11 | 结果显示页 12 | 13 | 14 | <% 15 | request.setCharacterEncoding("UTF-8"); 16 | String result=request.getParameter("result"); 17 | %> 18 | <%=result.replaceAll("×tamp", "&timestamp")%> 19 | -------------------------------------------------------------------------------- /src/main/java/com/borderTest/PageSizeBorderParam.java: -------------------------------------------------------------------------------- 1 | package com.borderTest; 2 | 3 | import java.util.Set; 4 | 5 | /** 6 | * 分页pageSize专用的边界测试 7 | */ 8 | public class PageSizeBorderParam extends IntegerBorderParam { 9 | PageSizeBorderParam(String paramPair, String key, String value) { 10 | super(paramPair, key, value); 11 | } 12 | 13 | @Override 14 | public Set getParamList() { 15 | 16 | // 其它容易错的数字 17 | paramPairList.add(key + "=6"); 18 | paramPairList.add(key + "=7"); 19 | paramPairList.add(key + "=999"); 20 | // 统计类接口page_size最大不超过999 21 | paramPairList.add(key + "=1000"); 22 | 23 | return super.getParamList(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/webapp/Tool/RandomParm.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=UTF-8" 2 | pageEncoding="UTF-8" 3 | import="java.util.*" 4 | import="com.talk51.Utils.*" 5 | %> 6 | <% 7 | String unit_int_part_temp=request.getParameter("intunit"); 8 | String unit_dec_part_temp=request.getParameter("decunit"); 9 | 10 | if(unit_int_part_temp=="") 11 | { 12 | unit_int_part_temp="5"; 13 | } 14 | if(unit_dec_part_temp=="") 15 | { 16 | unit_dec_part_temp="0"; 17 | } 18 | 19 | int unit_int_part_random=Integer.parseInt(unit_int_part_temp); 20 | int unit_dec_part_random=Integer.parseInt(unit_dec_part_temp); 21 | String result=ToolForRandomParmRandomUnit.randomparm(unit_int_part_random,unit_dec_part_random); 22 | %> 23 | 24 | <%=result%> -------------------------------------------------------------------------------- /src/main/java/com/test/FibonacciSupplier.java: -------------------------------------------------------------------------------- 1 | package com.test; 2 | 3 | import java.util.function.Supplier; 4 | import java.util.stream.Stream; 5 | 6 | public class FibonacciSupplier implements Supplier { 7 | long a = 0; 8 | long b = 1; 9 | 10 | @Override 11 | public Long get() { 12 | long x = a + b; 13 | a = b; 14 | b = x; 15 | return a; 16 | } 17 | 18 | public static void main(String[] args) { 19 | Stream fibonacci = Stream.generate(new FibonacciSupplier()); 20 | // fibonacci.skip(20).limit(10).forEach(System.out::println); 21 | // List list = fibonacci.skip(20).limit(10).collect(toList()); 22 | System.out.println(fibonacci.limit(10).reduce(0L,(a,b)->a+b)); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/com/servlet/RunnerTest.java: -------------------------------------------------------------------------------- 1 | package com.servlet; 2 | 3 | import javax.servlet.ServletException; 4 | import javax.servlet.annotation.WebServlet; 5 | import javax.servlet.http.HttpServlet; 6 | import javax.servlet.http.HttpServletRequest; 7 | import javax.servlet.http.HttpServletResponse; 8 | import java.io.IOException; 9 | 10 | /** 11 | * Created by zyanycall@gmail.com on 15:36. 12 | */ 13 | @WebServlet(name = "runTest", value = "/runTest") 14 | public class RunnerTest extends HttpServlet { 15 | protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 16 | } 17 | 18 | protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/webapp/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 测试用例管理工具 6 | 7 | 8 | 9 | 17 |
18 |

测试用例管理系统

19 |
20 |
21 |
22 | 23 |
24 |
25 | 26 | -------------------------------------------------------------------------------- /src/main/webapp/Controller/GetApiFromModelName.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=UTF-8" 2 | pageEncoding="UTF-8" 3 | import="java.sql.*" 4 | import="java.util.*" 5 | import="java.io.*" 6 | import="com.talk51.Utils.JDBCConnectionPool" 7 | %> 8 | <% 9 | 10 | String modelname=request.getParameter("modelname"); 11 | 12 | Connection connection=JDBCConnectionPool.getConnection(); 13 | Statement statement = connection.createStatement(); 14 | String sql="SELECT distinct * FROM interface_list where model_name='"+modelname+"'"; 15 | ResultSet rs = statement.executeQuery (sql); 16 | while(rs.next()) 17 | { 18 | %> 19 | <%=rs.getString("interface_name")%>: 20 | <%=rs.getString("call_Stuff")%>:<% 21 | } 22 | rs.close(); 23 | statement.close(); 24 | JDBCConnectionPool.closeConnection(); 25 | %> -------------------------------------------------------------------------------- /src/main/java/com/borderTest/DateYYBorderParam.java: -------------------------------------------------------------------------------- 1 | package com.borderTest; 2 | 3 | import java.util.Set; 4 | 5 | /** 6 | * YYYY-MM-DD 格式的日期边界测试 7 | */ 8 | public class DateYYBorderParam extends BorderParam { 9 | 10 | DateYYBorderParam(String paramPair, String key, String value) { 11 | super(paramPair, key, value); 12 | } 13 | 14 | public Set getParamList() { 15 | // 时间YY-mm-dd的校验 16 | // 过于未来的时间 17 | paramPairList.add(key + "=2020%2D01%2D01"); 18 | // 过早的时间 19 | paramPairList.add(key + "=1991%2D01%2D01"); 20 | // 非法的日期 21 | paramPairList.add(key + "=" + value.substring(0, value.length() - 2) + "32"); 22 | // 时分秒格式 23 | paramPairList.add(key + "=" + value + "%2000%3A00%3A00"); 24 | return super.getParamList(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/webapp/Centre.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=UTF-8" 2 | pageEncoding="UTF-8" %> 3 | 4 | 5 | 6 | 7 | 主页面 8 | 9 | 10 | 18 | 19 | 欢迎您,名叫<%=session.getAttribute("username")%>的QA或者RD,您的用户ID为<%=session.getAttribute("userid")%> 20 | 您可以进行如下操作:
21 | 创建新测试用例
22 | 管理现有测试用例
23 | 24 | -------------------------------------------------------------------------------- /src/main/webapp/login(demo).jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=UTF-8" 2 | pageEncoding="UTF-8" 3 | import="java.sql.*" 4 | import="java.util.*" 5 | import="java.io.*" 6 | import="com.talk51.Utils.*" 7 | import="java.util.HashMap" 8 | import="java.util.Map" 9 | %> 10 | 11 | 12 | 13 | 14 | Login 15 | <% 16 | request.setCharacterEncoding("UTF-8"); 17 | String username = request.getParameter("username"); 18 | String password = request.getParameter("password"); 19 | 20 | int userid = 0; 21 | 22 | String userloginname = null; 23 | boolean Testflag = false; 24 | 25 | %> 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /src/main/java/com/borderTest/DateHHBorderParam.java: -------------------------------------------------------------------------------- 1 | package com.borderTest; 2 | 3 | import java.util.Set; 4 | 5 | /** 6 | * YYYY-MM-DD HH:mm:ss 格式的日期边界测试 7 | */ 8 | public class DateHHBorderParam extends BorderParam { 9 | DateHHBorderParam(String paramPair, String key, String value) { 10 | super(paramPair, key, value); 11 | } 12 | 13 | public Set getParamList() { 14 | // 时间YY-mm-dd hh:mm:ss的校验 15 | // - %2D : %3A 16 | // 过于未来的时间 17 | paramPairList.add(key + "=2020%2D01%2D01%2000%3A00%3A00"); 18 | // 过早的时间 19 | paramPairList.add(key + "=1991%2D01%2D01%2000%3A00%3A00"); 20 | // 非法的日期 21 | paramPairList.add(key + "=" + value.replaceAll("\\d{2}%20", "32%20")); 22 | // 非法的时间 23 | paramPairList.add(key + "=" + value.substring(0, value.length() - 2) + "61"); 24 | // 仅传入日期 25 | paramPairList.add(key + "=" + value.split("%20")[0]); 26 | return super.getParamList(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/test/DateSlot.java: -------------------------------------------------------------------------------- 1 | package com.test; 2 | 3 | import java.text.ParseException; 4 | import java.text.SimpleDateFormat; 5 | import java.util.Date; 6 | import java.util.List; 7 | 8 | /** 9 | * Created by zyanycall@gmail.com on 2019/4/9 11:18. 10 | */ 11 | public class DateSlot { 12 | public static void main(String args[]) throws ParseException { 13 | String start = "2019-04-08"; 14 | String end = "2019-04-14"; 15 | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 16 | SimpleDateFormat sdfWithout = new SimpleDateFormat("yyyyMMdd"); 17 | Date dBegin = sdf.parse(start); 18 | Date dEnd = sdf.parse(end); 19 | List lDate = Happy.findDates(dBegin, dEnd); 20 | for (Date date : lDate) 21 | { 22 | // System.out.println(sdfWithout.format(date)); 23 | for (int i = 37 ; i <= 42 ; i++) { 24 | System.out.println(sdfWithout.format(date) + "_" + i); 25 | } 26 | } 27 | 28 | // test 29 | 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/com/test/test2.java: -------------------------------------------------------------------------------- 1 | package com.test; 2 | 3 | public class test2 { 4 | 5 | public static double getM(double bb, int n, double lixi) { 6 | 7 | if (n == 0) { 8 | return 0; 9 | } 10 | if (n == 1) { 11 | return Math.pow(lixi, n)* bb; 12 | } 13 | return Math.pow(lixi, n)* bb + getM(bb, n - 1, lixi); 14 | } 15 | 16 | public static void main(String[] args) { 17 | double number = 50; 18 | int count = 31; 19 | double lixi = 1.05d; 20 | 21 | for (int i = 1 ; i < count; i ++) { 22 | System.out.println(getM(number, i, lixi)); 23 | } 24 | 25 | // System.out.println(3.12 * Math.pow(1.05, 20)); 26 | System.out.println("=============================="); 27 | 28 | for (int i = 1 ; i < count; i ++) { 29 | System.out.println(number * Math.pow(lixi, i)); 30 | } 31 | 32 | System.out.println("=============================="); 33 | 34 | for (int i = 1 ; i < count; i ++) { 35 | System.out.println(number * i); 36 | } 37 | 38 | } 39 | 40 | 41 | } 42 | -------------------------------------------------------------------------------- /src/main/webapp/JunitTemplate/JunitTemplates.ftl: -------------------------------------------------------------------------------- 1 | package //Enter your package name here; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | import org.junit.Assert; 7 | import org.junit.Test; 8 | import com.talk51.Global.*; 9 | 10 | public class //Enter your test_class name here { 11 | 12 | @Before 13 | public void setUp() throws Exception { 14 | } 15 | 16 | @After 17 | public void tearDown() throws Exception { 18 | } 19 | 20 | @Test 21 | public void test() { 22 | String Api_url="${Api_url}"; 23 | 24 | <#if (parmlength>0)> 25 | Map parameters = new HashMap(); 26 | <#assign vflag = 0 > 27 | <#list 1..parmlength as flag> 28 | <#assign temp_key="parmkey"+vflag parmkey=temp_key?eval> 29 | <#assign temp_value="parmvalue"+vflag parmvalue=temp_value?eval> 30 | parameters.put("${parmkey}",""${parmvalue}"); 31 | <#assign vflag=vflag+1> 32 | 33 | 34 | 35 | <#if (Method=="get")> 36 | String api_result = GetMethod.sendGet(Api_url, parameters); 37 | <#elseif (Method=="post")> 38 | String api_result = PostMethod.sendPost(Api_url, parameters); 39 | <#else> 40 | 41 | } 42 | 43 | } -------------------------------------------------------------------------------- /src/main/java/com/borderTest/DecimalBorderParam.java: -------------------------------------------------------------------------------- 1 | package com.borderTest; 2 | 3 | import java.util.Set; 4 | 5 | /** 6 | * 小数类型的边界测试 7 | */ 8 | public class DecimalBorderParam extends BorderParam { 9 | 10 | 11 | DecimalBorderParam(String paramPair, String key, String value) { 12 | super(paramPair, key, value); 13 | 14 | } 15 | 16 | @Override 17 | public Set getParamList() { 18 | 19 | // 包含非数字 20 | paramPairList.add(paramPair + "x"); 21 | // 0 22 | paramPairList.add(key + "=0"); 23 | // -1 24 | paramPairList.add(key + "=-1"); 25 | // -9.9 26 | paramPairList.add(key + "=-9.9"); 27 | // -99 28 | paramPairList.add(key + "=-99"); 29 | // 小数 30 | paramPairList.add(paramPair + "5"); 31 | // 小数至少2位 32 | paramPairList.add(paramPair + "55"); 33 | // 小数至少3位 34 | paramPairList.add(paramPair + "555"); 35 | // 小数至少4位 36 | paramPairList.add(paramPair + "5555"); 37 | // 小数至少5位 38 | paramPairList.add(paramPair + "55555"); 39 | // 超过int=2147483647 40 | paramPairList.add(key + "=2147483648"); 41 | 42 | return super.getParamList(); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/main/webapp/WEB-INF/web.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | PlatformForCase 4 | 5 | index.html 6 | 7 | 8 | 9 | 10 | JunitGen 11 | JunitGen 12 | com.servlet.JunitGen 13 | 14 | 15 | JunitGen 16 | /JunitGen 17 | 18 | 19 | 20 | runTest 21 | runTest 22 | com.servlet.RunnerTest 23 | 24 | 25 | runTest 26 | /runTest 27 | 28 | 29 | 30 | -1 31 | 32 | 33 | -------------------------------------------------------------------------------- /src/main/webapp/NewTreeDemo.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; UTF-8" 2 | pageEncoding="UTF-8"%> 3 | 4 | 5 | 6 | 7 | Insert title here 8 | 9 | 10 | 11 | 28 | 29 | 43 | 44 | -------------------------------------------------------------------------------- /src/main/java/com/borderTest/IntegerBorderParam.java: -------------------------------------------------------------------------------- 1 | package com.borderTest; 2 | 3 | import java.util.Set; 4 | 5 | /** 6 | * 整数类型的边界测试 7 | */ 8 | public class IntegerBorderParam extends BorderParam { 9 | 10 | IntegerBorderParam(String paramPair, String key, String value) { 11 | super(paramPair, key, value); 12 | 13 | } 14 | 15 | @Override 16 | public Set getParamList() { 17 | 18 | // 包含非数字 19 | paramPairList.add(paramPair + "x"); 20 | // 0 21 | paramPairList.add(key + "=0"); 22 | // -1 23 | paramPairList.add(key + "=-1"); 24 | // -9.9 25 | paramPairList.add(key + "=-9.9"); 26 | // -99 27 | paramPairList.add(key + "=-99"); 28 | // 小数 29 | paramPairList.add(paramPair + ".1"); 30 | // 小数 31 | paramPairList.add(paramPair + ".10"); 32 | // 小数 33 | paramPairList.add(paramPair + ".100"); 34 | // 至少过100 35 | paramPairList.add(paramPair + "99"); 36 | // 至少过1000 37 | paramPairList.add(paramPair + "999"); 38 | // 至少过10000 39 | paramPairList.add(paramPair + "9999"); 40 | // 超过int=2147483647 41 | paramPairList.add(key + "=2147483648"); 42 | 43 | return super.getParamList(); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/test/IsPopOrder.java: -------------------------------------------------------------------------------- 1 | package com.test; 2 | 3 | 4 | import java.util.Stack; 5 | 6 | /** 7 | * 输入两个整数序列,第一个序列表示栈的压入顺序, 8 | * 请判断第二个序列是否为该栈的弹出顺序。 9 | * 假设压入栈的所有数字均不相等。 10 | * 例如序列1,2,3,4,5是某栈的压入顺序, 11 | * 序列4,5,3,2,1是该压栈序列对应的一个弹出序列, 12 | * 但4,3,5,1,2就不可能是该压栈序列的弹出序列。 13 | * (注意:这两个序列的长度是相等的) 14 | */ 15 | public class IsPopOrder { 16 | 17 | public static boolean isPopOrder(int[] pushA, int[] popA) { 18 | 19 | if (pushA.length == 0 || popA.length == 0) { 20 | return false; 21 | } 22 | Stack s = new Stack(); 23 | //用于标识弹出序列的位置 24 | int popIndex = 0; 25 | for (int i = 0; i < pushA.length; i++) { 26 | s.push(pushA[i]); 27 | //如果栈不为空,且栈顶元素等于弹出序列 28 | while (!s.empty() && s.peek() == popA[popIndex]) { 29 | //出栈 30 | s.pop(); 31 | //弹出序列向后一位 32 | popIndex++; 33 | } 34 | } 35 | return s.empty(); 36 | 37 | 38 | } 39 | 40 | 41 | public static void main(String[] args) { 42 | int[] pushA = {1, 2, 3, 4, 5}; 43 | int[] popA = {4, 5, 3, 2, 1}; 44 | int[] popB = {4, 3, 5, 1, 2}; 45 | 46 | System.out.println(isPopOrder(pushA, popA)); 47 | System.out.println(isPopOrder(pushA, popB)); 48 | } 49 | 50 | } 51 | -------------------------------------------------------------------------------- /src/main/webapp/Tool/RunCaseNow.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=UTF-8" 2 | pageEncoding="UTF-8" 3 | import="com.talk51.Utils.*" 4 | import="java.net.URLDecoder" 5 | import="com.borderTest.BorderCheckUtil" 6 | %> 7 | <% 8 | request.setCharacterEncoding("UTF-8"); 9 | String url = URLDecoder.decode(request.getParameter("url"), "UTF-8"); 10 | String bodyinfo = request.getParameter("bodyinfo"); 11 | // String DisBody = URLDecoder.decode(bodyinfo, "UTF-8"); 12 | String method = request.getParameter("method"); 13 | %> 14 | 所请求url和参数:
15 | <%=url%>?<%=bodyinfo.replaceAll("×tamp", "&timestamp")%>
16 | 所传参数明细:
17 | <%=bodyinfo.replaceAll("×tamp", "&timestamp")%>
18 | 运行结果:<%=method%>
19 | <%--
--%>
20 | <%
21 |     if (method.endsWith("oneKeyCheck")) {
22 |         out.print(HttpMethodFactory.getResult(method, url, bodyinfo));
23 |     } else {
24 |         String resultWithTime = HttpMethodFactory.getResultWithTime(method, url, bodyinfo);
25 |         out.print(resultWithTime.replace(HttpMethodFactory.EXECUTE_TIME_SEPARATOR,""));
26 |         String result = BorderCheckUtil.toJson(HttpMethodFactory.getResultData(resultWithTime)) == null ? "返回为空":
27 |                 BorderCheckUtil.toJson(HttpMethodFactory.getResultData(resultWithTime));
28 |         out.print("

格式化:
" + BorderCheckUtil.HTML_POINT_GREEN 29 | + result + BorderCheckUtil.HTML_RESULT_SUFFIX); 30 | } 31 | %> 32 | <%--
--%> -------------------------------------------------------------------------------- /src/main/java/com/test/Exchange.java: -------------------------------------------------------------------------------- 1 | package com.test; 2 | 3 | /** 4 | * 有数组penny,penny中所有的值都为正数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim(小于等于1000)代表要找的钱数,求换钱有多少种方法。 5 | 给定数组penny及它的大小(小于等于50),同时给定一个整数aim,请返回有多少种方法可以凑成aim。 6 | 测试样例: 7 | [1,2,4],3,3 8 | 返回:2 9 | 解析:设dp[n][m]为使用前n中货币凑成的m的种数,那么就会有两种情况: 10 | 使用第n种货币:dp[n-1][m]+dp[n-1][m-peney[n]] 11 | 不用第n种货币:dp[n-1][m],为什么不使用第n种货币呢,因为penney[n]>m。 12 | 这样就可以求出当m>=penney[n]时 dp[n][m] = dp[n-1][m]+dp[n-1][m-peney[n]],否则,dp[n][m] = dp[n-1][m] 13 | */ 14 | public class Exchange { 15 | public static int countWays(int[] penny, int n, int aim) { 16 | // write code here 17 | // 异常数据判断 18 | if(n==0||penny==null||aim<0){ 19 | return 0; 20 | } 21 | // 初始化二维数组 22 | int[][] pd = new int[n][aim+1]; 23 | // 初始化数据,因为aim>0,如果aim为0可以理解为都取0也是1种情况 24 | for(int i=0;i=penny[i]){ 36 | pd[i][j] = pd[i-1][j]+pd[i][j-penny[i]]; 37 | }else{ 38 | pd[i][j] = pd[i-1][j]; 39 | } 40 | } 41 | } 42 | return pd[n-1][aim]; 43 | } 44 | 45 | public static void main(String[] args) { 46 | int []a = {4,2,1}; 47 | System.out.println(countWays(a,3,0)); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/main/java/com/test/MinimumPath.java: -------------------------------------------------------------------------------- 1 | package com.test; 2 | 3 | /** 4 | * 有一个矩阵map,它每个格子有一个权值。从左上角的格子开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,返回所有的路径中最小的路径和。 5 | 给定一个矩阵map及它的行数n和列数m,请返回最小路径和。保证行列数均小于等于100. 6 | 测试样例: 7 | [[1,2,3],[1,1,1]],2,3 8 | 返回:4 9 | 解析:设dp[n][m]为走到n*m位置的路径长度,那么显而易见dp[n][m] = min(dp[n-1][m],dp[n][m-1]); 10 | */ 11 | public class MinimumPath { 12 | 13 | public static int getMin(int[][] map, int n, int m) { 14 | // write code here 15 | // dp用于记录外围行列的到达的成本,如本例题,外围的成本如下 16 | // 1 3 6 17 | // 2 0 0 18 | // 由于下面的计算方式,会将第一个格变成2,这不重要,因为它不参与动态规划的最终计算 19 | int[][] dp = new int[n][m]; 20 | // 算出列的成本 21 | // 1 22 | // 2 23 | for (int i = 0; i < n; i++) { 24 | for (int j = 0; j <= i; j++) { 25 | dp[i][0] += map[j][0]; 26 | } 27 | } 28 | // 算出行的成本 29 | // 2 3 6 30 | // 2 0 0 31 | for (int i = 0; i < m; i++) { 32 | for (int j = 0; j <= i; j++) { 33 | dp[0][i] += map[0][j]; 34 | } 35 | } 36 | // 将外围的成本和原始数据进行计算。 37 | // i j 用1为起点,是为了不计算外围已经计算好的值 38 | // 未计算的值,都是运用之前注释分析的方法,min方法。 39 | for (int i = 1; i < n; i++) { 40 | for (int j = 1; j < m; j++) { 41 | dp[i][j] = min(dp[i][j - 1] + map[i][j], dp[i - 1][j] + map[i][j]); 42 | } 43 | } 44 | // dp被运算完后,就是整个成本的二维数组,而dp[n-1][m-1]就是要求的值,dp[n][m]不存在,因为下标从0开始 45 | return dp[n - 1][m - 1]; 46 | } 47 | 48 | public static int min(int a, int b) { 49 | return a > b ? b : a; 50 | } 51 | 52 | public static void main(String[] args) { 53 | int [][]a = {{1,2,3},{1,1,1}}; 54 | 55 | System.out.println(getMin(a,2,3)); 56 | } 57 | 58 | } 59 | -------------------------------------------------------------------------------- /src/main/webapp/login.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=UTF-8" 2 | pageEncoding="UTF-8" 3 | import="java.sql.*" 4 | import="com.talk51.Utils.JDBCConnectionPool" 5 | import="javax.servlet.http.HttpSession" 6 | %> 7 | 8 | 9 | 10 | 11 | Login 12 | <% 13 | request.setCharacterEncoding("UTF-8"); 14 | String username = request.getParameter("username"); 15 | String password = request.getParameter("password"); 16 | 17 | int userid = 0; 18 | String userloginname = null; 19 | boolean Testflag = false; 20 | 21 | Connection connection = JDBCConnectionPool.getConnection(); 22 | Statement statement = connection.createStatement(); 23 | String sql = "SELECT * FROM user_info WHERE user_name= '" + username + "' AND password='" + password + "'"; 24 | ResultSet rs = statement.executeQuery(sql); 25 | if (rs.next()) { 26 | Testflag = true; 27 | userid = Integer.parseInt(rs.getString("id")); 28 | userloginname = rs.getString("user_name"); 29 | } else { 30 | Testflag = false; 31 | } 32 | rs.close(); 33 | statement.close(); 34 | JDBCConnectionPool.closeConnection(); 35 | %> 36 | 37 | 38 | <% 39 | if (!Testflag) { 40 | %> 41 | 45 | <% 46 | } else { 47 | %> 48 | 55 | <% 56 | } 57 | %> 58 | 59 | -------------------------------------------------------------------------------- /src/main/webapp/Tool/RandomParmImprove.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=UTF-8" 2 | pageEncoding="UTF-8" 3 | import="java.util.*" 4 | import="com.talk51.Utils.*" 5 | %> 6 | <% 7 | String unit_int_part_temp=request.getParameter("intunit"); 8 | String unit_dec_part_temp=request.getParameter("decunit"); 9 | int typetrigger=Integer.parseInt(request.getParameter("typetrigger")); 10 | 11 | String result=""; 12 | 13 | if(typetrigger==0) 14 | { 15 | if(unit_int_part_temp=="") 16 | { 17 | unit_int_part_temp="5"; 18 | } 19 | if(unit_dec_part_temp=="") 20 | { 21 | unit_dec_part_temp="0"; 22 | } 23 | 24 | int unit_int_part_random=Integer.parseInt(unit_int_part_temp); 25 | int unit_dec_part_random=Integer.parseInt(unit_dec_part_temp); 26 | result=ToolForRandomParmRandomUnit.randomparm(unit_int_part_random,unit_dec_part_random); 27 | } 28 | else if(typetrigger==1) 29 | { 30 | if(unit_int_part_temp=="") 31 | { 32 | int r=(int)(1+Math.random()*(9+1)-1); 33 | switch (r) 34 | { 35 | case 0:result="This is a random string";break; 36 | case 1:result="Peter is ...!";break; 37 | case 2:result="Special mark:&*%#";break; 38 | case 3:result="I want go home %$";break; 39 | case 4:result="A space here→ ←,get it?";break; 40 | case 5:result="Oh!";break; 41 | case 6:result="Huhh...(What?)";break; 42 | case 7:result="Do you know?";break; 43 | case 8:result="Oh!You're in luck!You got a very long random string,but,is that long enough?No?Now get some special mark!How about !!#@#$^%&&*()!HaHaHa!";break; 44 | case 9:result="Are you a QA or a Rd?";break; 45 | 46 | } 47 | } 48 | else 49 | { 50 | String basestr="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~!@#$%^&*() "; 51 | int unit_int_part_random=Integer.parseInt(unit_int_part_temp); 52 | int length=(int)(Math.random()*(unit_int_part_random+1-1)+1); 53 | for(int i = 0 ; i < length; ++i){ 54 | int temp=(int)(Math.random()*(74-1)+1); 55 | result=result+basestr.charAt(temp); 56 | } 57 | } 58 | } 59 | %> 60 | 61 | <%=result%> -------------------------------------------------------------------------------- /src/main/java/com/test/Happy.java: -------------------------------------------------------------------------------- 1 | package com.test; 2 | 3 | import java.text.ParseException; 4 | import java.text.SimpleDateFormat; 5 | import java.util.ArrayList; 6 | import java.util.Calendar; 7 | import java.util.Date; 8 | import java.util.List; 9 | 10 | public class Happy { 11 | public static void main(String args[]) throws ParseException { 12 | Calendar cal = Calendar.getInstance(); 13 | String start = "2019-01-01"; 14 | String end = "2019-01-31"; 15 | String lineDate = "2019-01-31"; 16 | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 17 | Date dBegin = sdf.parse(start); 18 | Date dEnd = sdf.parse(end); 19 | Date dLineDate = sdf.parse(lineDate); 20 | List lDate = findDates(dBegin, dEnd); 21 | for (Date date : lDate) 22 | { 23 | // System.out.println(sdf.format(date)); 24 | Calendar calend = Calendar.getInstance(); 25 | calend.setTime(date); 26 | calend.add(Calendar.DAY_OF_MONTH, 7); 27 | List lllDate = findDates(date, calend.getTime()); 28 | for (Date date111 : lllDate) { 29 | if (sdf.format(date).equals(sdf.format(date111))) { 30 | continue; 31 | } 32 | if (date111.after(dLineDate)) { 33 | continue; 34 | } 35 | System.out.println(sdf.format(date) + "," + sdf.format(date111)); 36 | } 37 | } 38 | } 39 | 40 | public static List findDates(Date dBegin, Date dEnd) 41 | { 42 | List lDate = new ArrayList(); 43 | lDate.add(dBegin); 44 | Calendar calBegin = Calendar.getInstance(); 45 | // 使用给定的 Date 设置此 Calendar 的时间 46 | calBegin.setTime(dBegin); 47 | Calendar calEnd = Calendar.getInstance(); 48 | // 使用给定的 Date 设置此 Calendar 的时间 49 | calEnd.setTime(dEnd); 50 | // 测试此日期是否在指定日期之后 51 | while (dEnd.after(calBegin.getTime())) 52 | { 53 | // 根据日历的规则,为给定的日历字段添加或减去指定的时间量 54 | calBegin.add(Calendar.DAY_OF_MONTH, 1); 55 | lDate.add(calBegin.getTime()); 56 | } 57 | return lDate; 58 | } 59 | 60 | } 61 | -------------------------------------------------------------------------------- /src/main/java/com/servlet/login.java: -------------------------------------------------------------------------------- 1 | package com.servlet; 2 | 3 | import com.talk51.Utils.JDBCConnectionPool; 4 | 5 | import javax.servlet.ServletException; 6 | import javax.servlet.annotation.WebServlet; 7 | import javax.servlet.http.HttpServlet; 8 | import javax.servlet.http.HttpServletRequest; 9 | import javax.servlet.http.HttpServletResponse; 10 | import javax.servlet.http.HttpSession; 11 | import java.io.IOException; 12 | import java.sql.Connection; 13 | import java.sql.PreparedStatement; 14 | import java.sql.ResultSet; 15 | import java.sql.SQLException; 16 | import java.util.ArrayList; 17 | import java.util.List; 18 | 19 | /** 20 | * Servlet implementation class login 21 | */ 22 | @WebServlet(name = "login", value = "/login") 23 | public class login extends HttpServlet { 24 | private static final long serialVersionUID = 1L; 25 | 26 | protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 27 | response.setCharacterEncoding("utf-8"); 28 | response.setContentType("text/html;charset=utf-8"); 29 | String username = request.getParameter("username"); 30 | String password = request.getParameter("password"); 31 | HttpSession session = request.getSession(); 32 | if (loginCheck(username, password) != null) { 33 | session.setAttribute("userid", loginCheck("test", "123")); 34 | session.setAttribute("username", loginCheck("test", "123")); 35 | response.sendRedirect("Centre.jsp"); 36 | } 37 | } 38 | 39 | private List loginCheck(String UserName, String Password) { 40 | List result = new ArrayList(); 41 | Connection conn = JDBCConnectionPool.getConnection(); 42 | PreparedStatement ps = null; 43 | ResultSet rs = null; 44 | String Sql = "SELECT * FROM user_info WHERE user_name= '" + UserName + "' AND password='" + Password + "'"; 45 | try { 46 | ps = conn.prepareStatement(Sql); 47 | rs = ps.executeQuery(); 48 | while (rs.next()) { 49 | result.add(rs.getString("id")); 50 | result.add(rs.getString("name")); 51 | } 52 | } catch (SQLException e) { 53 | e.printStackTrace(); 54 | } finally { 55 | JDBCConnectionPool.close(rs, ps); 56 | } 57 | return result; 58 | } 59 | 60 | } 61 | -------------------------------------------------------------------------------- /src/main/java/com/talk51/Utils/PutMethod_mulit.java: -------------------------------------------------------------------------------- 1 | package com.talk51.Utils; 2 | 3 | import okhttp3.*; 4 | 5 | import java.io.IOException; 6 | import java.net.URLEncoder; 7 | import java.util.Map; 8 | 9 | 10 | /** 11 | * 发送POST请求 12 | * 13 | * @param url 目的地址 14 | * @param parameters 请求参数,Map类型。 15 | * @return 远程响应结果 16 | */ 17 | public class PutMethod_mulit { 18 | 19 | public static String sendPut(String url, Map parameters) { 20 | try { 21 | OkHttpClient client = new OkHttpClient(); 22 | StringBuffer sb = new StringBuffer();// 处理请求参数 23 | String params = "";// 编码之后的参数 24 | if (parameters.size() == 1) { 25 | for (String name : parameters.keySet()) { 26 | sb.append(name) 27 | .append("=") 28 | .append(URLEncoder.encode( 29 | parameters.get(name), "UTF-8")); 30 | } 31 | params = sb.toString(); 32 | } else { 33 | for (String name : parameters.keySet()) { 34 | sb.append(name) 35 | .append("=") 36 | .append(URLEncoder.encode( 37 | parameters.get(name), "UTF-8")).append("&"); 38 | } 39 | String temp_params = sb.toString(); 40 | params = temp_params.substring(0, temp_params.length() - 1); 41 | System.out.println(params); 42 | } 43 | 44 | MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded"); 45 | RequestBody body = RequestBody.create(mediaType, params); 46 | Request request = new Request.Builder() 47 | .url(url) 48 | .put(body) 49 | .addHeader("content-type", "application/x-www-form-urlencoded") 50 | .addHeader("accept", "application/json") 51 | .addHeader("cache-control", "no-cache") 52 | .build(); 53 | 54 | Response response; 55 | response = client.newCall(request).execute(); 56 | return response.body().string(); 57 | } catch (IOException e) { 58 | // TODO Auto-generated catch block 59 | e.printStackTrace(); 60 | return "system error"; 61 | } 62 | } 63 | 64 | } 65 | -------------------------------------------------------------------------------- /src/main/java/com/talk51/Utils/ToolForRandomParmRandomUnit.java: -------------------------------------------------------------------------------- 1 | package com.talk51.Utils; 2 | 3 | public class ToolForRandomParmRandomUnit { 4 | public static String randomparm(int unit_int_part_random, int unit_dec_part_random) { 5 | boolean isdec; 6 | 7 | if (unit_dec_part_random == 0) { 8 | isdec = false; 9 | } else { 10 | isdec = true; 11 | } 12 | 13 | 14 | String result_int_part = ""; 15 | String result_dec_part = ""; 16 | String result = ""; 17 | 18 | int unit_int_part_random_f = (int) (Math.random() * (unit_int_part_random + 1 - 1) + 1); 19 | int unit_dec_part_random_f = (int) (Math.random() * (unit_dec_part_random + 1 - 1) + 1); 20 | if (unit_int_part_random == 0) { 21 | unit_int_part_random_f = 0; 22 | } 23 | 24 | if (unit_int_part_random_f == 1) { 25 | result_int_part = Integer.toString((int) (1 + Math.random() * (9 + 1) - 1));//0-9 26 | } else if (unit_int_part_random_f == 0) { 27 | result_int_part = "0"; 28 | } else { 29 | int[] temp_int_part = new int[unit_int_part_random_f]; 30 | for (int i = 0; i < unit_int_part_random_f; i++) { 31 | if (i == 0) { 32 | temp_int_part[i] = (int) (Math.random() * (9 - 1) + 1);//1-9 33 | } else { 34 | temp_int_part[i] = (int) (Math.random() * (9 + 1) - 1);//0-9 35 | } 36 | } 37 | String parm_int_part = Integer.toString(temp_int_part[0]); 38 | for (int j = 1; j <= unit_int_part_random_f - 1; j++) { 39 | parm_int_part = parm_int_part + Integer.toString(temp_int_part[j]); 40 | } 41 | result_int_part = parm_int_part; 42 | } 43 | int[] temp_dec_part = new int[unit_dec_part_random_f]; 44 | for (int i = 0; i < unit_dec_part_random_f; i++) { 45 | temp_dec_part[i] = (int) (Math.random() * (9 - 1 + 1)); 46 | } 47 | String parm_dec_part = Integer.toString(temp_dec_part[0]); 48 | for (int j = 1; j <= unit_dec_part_random_f - 1; j++) { 49 | parm_dec_part = parm_dec_part + Integer.toString(temp_dec_part[j]); 50 | } 51 | result_dec_part = parm_dec_part; 52 | 53 | if (isdec) { 54 | result = result_int_part + "." + result_dec_part; 55 | } else { 56 | result = result_int_part; 57 | } 58 | return result; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /src/main/java/com/test/JedisTest1.java: -------------------------------------------------------------------------------- 1 | package com.test; 2 | 3 | import redis.clients.jedis.Jedis; 4 | import redis.clients.jedis.JedisPool; 5 | import redis.clients.jedis.JedisPoolConfig; 6 | 7 | import java.util.Map; 8 | import java.util.Set; 9 | 10 | public class JedisTest1 { 11 | 12 | public static void redisPrintZrangeValue(Jedis jedis, String key){ 13 | Set zList = jedis.keys(key); 14 | Object[] listArray = zList.toArray(); 15 | if (listArray.length>0) { 16 | System.out.println(jedis.zrange(key, 0, -1).toString()); 17 | } 18 | 19 | } 20 | 21 | public static void redisPrintHgetValue(Jedis jedis, String preFixKey){ 22 | Set zList = jedis.keys(preFixKey); 23 | Object[] listArray = zList.toArray(); 24 | for (int i=0; i 11 | <% 12 | 13 | request.setCharacterEncoding("UTF-8"); 14 | String model_name=request.getParameter("model_name"); 15 | String interface_name=request.getParameter("interface_name"); 16 | String interface_suff=request.getParameter("interface_suff"); 17 | String host_ip=request.getParameter("host_ip"); 18 | String priority=request.getParameter("priority"); 19 | String expected_result=request.getParameter("expected_result"); 20 | String scenario=request.getParameter("scenario"); 21 | String method=request.getParameter("method"); 22 | String body=URLDecoder.decode(request.getParameter("body"),"UTF-8"); 23 | String section2body=URLEncoder.encode(request.getParameter("section2body"),"UTF-8"); 24 | String is_cache=request.getParameter("is_cache"); 25 | String section2id=""; 26 | body=StringEscapeUtils.escapeSql(body); 27 | 28 | //Object object=session.getAttribute("userid"); 29 | //int user_id=Integer.parseInt(object==null ? "0":object.toString()); 30 | 31 | Connection connection=JDBCConnectionPool.getConnection(); 32 | Statement statement = connection.createStatement(); 33 | 34 | String insert_sql="insert into cases (project_name,interface_name,call_suff,host_ip,priority,expected_result,scenario,method,body,operator,is_cache,is_deleted) values('"+model_name+"','"+interface_name+"','"+interface_suff+"','"+host_ip+"','"+priority+"','"+expected_result+"','"+scenario+"','"+method+"','"+body+"',"+3+","+is_cache+",0)"; 35 | statement.executeUpdate(insert_sql); 36 | ResultSet rsFlag=statement.executeQuery("SELECT @@IDENTITY AS currentID"); 37 | if(rsFlag.next()){ 38 | section2id=rsFlag.getString("currentID"); 39 | } 40 | 41 | Statement s2statement = connection.createStatement(); 42 | String s2insert_sql="insert into cases_parm_relation (case_id,parm_relation,is_deleted) values ("+section2id+",'"+section2body+"',0)"; 43 | s2statement.executeUpdate(s2insert_sql); 44 | 45 | Statement statement2 = connection.createStatement(); 46 | String check_sql="select * from interface_list where call_Stuff = '"+interface_suff+"' and interface_name = '"+interface_name+"' and model_name='"+model_name+"'"; 47 | ResultSet rs = statement2.executeQuery (check_sql); 48 | 49 | if (!rs.next()) 50 | { 51 | String new_insert_interface_list_sql="insert into interface_list (model_name,interface_name,call_Stuff) values ('"+model_name+"','"+interface_name+"','"+interface_suff+"')"; 52 | statement2.executeUpdate(new_insert_interface_list_sql); 53 | } 54 | 55 | JDBCConnectionPool.close(s2statement); 56 | JDBCConnectionPool.close(rsFlag, statement); 57 | JDBCConnectionPool.close(rs, statement2); 58 | %> -------------------------------------------------------------------------------- /src/main/java/com/borderTest/BorderParam.java: -------------------------------------------------------------------------------- 1 | package com.borderTest; 2 | 3 | import java.io.UnsupportedEncodingException; 4 | import java.net.URLEncoder; 5 | import java.util.HashSet; 6 | import java.util.Set; 7 | 8 | /** 9 | * 一键参数化的父类,默认返回类型 10 | * 默认是字符串的校验规则 11 | */ 12 | public class BorderParam { 13 | 14 | /** 15 | * 公共的常量:需要校验超长变量 16 | */ 17 | public final static int LONG_PARAM_NEED_CHECK = 0; 18 | public final static int LONG_PARAM_NO_NEED_CHECK = 1; 19 | public final static String booleanTrue = "true"; 20 | public final static String booleanFalse = "false"; 21 | 22 | /** 23 | * 主要用于校验入库的post请求,对一些基本的特殊字符的支持。 24 | */ 25 | private final static String SPECIAL_CHARACTER_COMMON_US = "'\"&||@-- --<>,.{}[]\\_+^$#!~`"; 26 | 27 | // 完整的一个参数段 28 | String paramPair = ""; 29 | String key = ""; 30 | String value = ""; 31 | // 默认需要长度校验 32 | int needLongCheck = 0; 33 | // 存放替换用的修改过的参数对 34 | Set paramPairList = new HashSet<>(); 35 | 36 | BorderParam(String paramPair, String key, String value) { 37 | this.paramPair = paramPair; 38 | this.key = key; 39 | this.value = value; 40 | 41 | 42 | } 43 | 44 | // 获取被替换的参数列表,保持key=value格式,方便于替换 45 | public Set getParamList() { 46 | // 默认是校验长度的。 47 | if (this.needLongCheck == LONG_PARAM_NEED_CHECK) { 48 | // 长度过长100 49 | paramPairList.add(paramPair + BorderCheckUtil.HTML_POINT_RED + 50 | "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" 51 | + BorderCheckUtil.HTML_POINT_SUFFIX); 52 | // 长度过长300 53 | paramPairList.add(paramPair + BorderCheckUtil.HTML_POINT_RED + "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" 54 | + "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" 55 | + "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" 56 | + BorderCheckUtil.HTML_POINT_SUFFIX); 57 | } 58 | 59 | // 默认都带不传参(key=value都不传) 60 | paramPairList.add(BorderCheckUtil.HTML_POINT_EMPTY); 61 | // 只有key值 62 | paramPairList.add(key + "=" + BorderCheckUtil.HTML_POINT_EMPTY); 63 | 64 | // 如果是true/false 65 | if (value.equalsIgnoreCase(booleanTrue)) { 66 | paramPairList.add(key + "=" + booleanFalse); 67 | } 68 | if (value.equalsIgnoreCase(booleanFalse)) { 69 | paramPairList.add(key + "=" + booleanTrue); 70 | } 71 | 72 | // 增加一些常规的英文特殊字符 73 | try { 74 | paramPairList.add(paramPair + BorderCheckUtil.HTML_POINT_RED + 75 | URLEncoder.encode(SPECIAL_CHARACTER_COMMON_US, "UTF-8") + 76 | BorderCheckUtil.HTML_POINT_SUFFIX); 77 | } catch (UnsupportedEncodingException e) { 78 | e.printStackTrace(); 79 | } 80 | 81 | return paramPairList; 82 | } 83 | 84 | public void setNeedLongCheck(int needLongCheck) { 85 | this.needLongCheck = needLongCheck; 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /src/main/java/com/servlet/JunitGen.java: -------------------------------------------------------------------------------- 1 | package com.servlet; 2 | 3 | import com.talk51.Utils.StringTool; 4 | import freemarker.template.Configuration; 5 | import freemarker.template.Template; 6 | import freemarker.template.TemplateException; 7 | import net.sf.json.JSONObject; 8 | import org.apache.commons.lang.StringEscapeUtils; 9 | 10 | import javax.servlet.ServletException; 11 | import javax.servlet.annotation.WebServlet; 12 | import javax.servlet.http.HttpServlet; 13 | import javax.servlet.http.HttpServletRequest; 14 | import javax.servlet.http.HttpServletResponse; 15 | import java.io.File; 16 | import java.io.IOException; 17 | import java.io.PrintWriter; 18 | import java.net.URLDecoder; 19 | import java.util.HashMap; 20 | import java.util.Map; 21 | 22 | 23 | /** 24 | * Servlet implementation class JunitGen 25 | */ 26 | @WebServlet(name = "JunitGen", value = "/JunitGen") 27 | public class JunitGen extends HttpServlet { 28 | private static final long serialVersionUID = 1L; 29 | 30 | protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 31 | response.setCharacterEncoding("utf-8"); 32 | response.setContentType("text/html;charset=utf-8"); 33 | String model_name = request.getParameter("model_name"); 34 | String interface_name = request.getParameter("interface_name"); 35 | String interface_suff = request.getParameter("interface_suff"); 36 | String host_ip = request.getParameter("host_ip"); 37 | String priority = request.getParameter("priority"); 38 | String expected_result = request.getParameter("expected_result"); 39 | String scenario = request.getParameter("scenario"); 40 | String method = request.getParameter("method"); 41 | String body = StringEscapeUtils.escapeSql(URLDecoder.decode(request.getParameter("body"), "UTF-8")); 42 | String section2body = request.getParameter("section2body"); 43 | String is_cache = request.getParameter("is_cache"); 44 | 45 | PrintWriter out = response.getWriter(); 46 | 47 | Configuration cfg = new Configuration(); 48 | try { 49 | cfg.setDirectoryForTemplateLoading(new File("D:\\workplace\\PlatformForCase\\WebContent\\JunitTemplate")); 50 | Template template = cfg.getTemplate("JunitTemplates.ftl"); 51 | Map map = new HashMap(); 52 | map.put("Api_url", host_ip + interface_suff); 53 | 54 | Map parm_part = new HashMap(); 55 | 56 | JSONObject temp = JSONObject.fromObject(section2body); 57 | for (Object k : temp.keySet()) { 58 | Object v = temp.get(k); 59 | parm_part.put(k.toString(), StringTool.toStingHex(v.toString())); 60 | } 61 | 62 | map.put("parmlength", parm_part.size()); 63 | int i = 0; 64 | for (Object k : parm_part.keySet()) { 65 | map.put("parmkey" + i + "", k.toString()); 66 | map.put("parmvalue" + i + "", parm_part.get(k)); 67 | i++; 68 | } 69 | 70 | map.put("Method", method); 71 | template.process(map, out); 72 | } catch (IOException e) { 73 | e.printStackTrace(); 74 | } catch (TemplateException e) { 75 | e.printStackTrace(); 76 | } 77 | } 78 | 79 | } 80 | -------------------------------------------------------------------------------- /src/main/java/com/servlet/DelCasesServlet.java: -------------------------------------------------------------------------------- 1 | package com.servlet; 2 | 3 | import com.talk51.Utils.JDBCConnectionPool; 4 | 5 | import javax.servlet.ServletException; 6 | import javax.servlet.annotation.WebServlet; 7 | import javax.servlet.http.HttpServlet; 8 | import javax.servlet.http.HttpServletRequest; 9 | import javax.servlet.http.HttpServletResponse; 10 | import java.io.IOException; 11 | import java.io.PrintWriter; 12 | import java.sql.Connection; 13 | import java.sql.PreparedStatement; 14 | 15 | /** 16 | * Created by zhaoyu on 2017/3/22. 17 | */ 18 | @WebServlet(value = "/batchDelCases") 19 | public class DelCasesServlet extends HttpServlet { 20 | 21 | private String del_sql_cases = "DELETE from autotest.cases where id = ? "; 22 | private String del_sql_interface_list = "DELETE from autotest.interface_list where " + 23 | "interface_name = (SELECT interface_name from autotest.cases where id = ?) " + 24 | "and call_Stuff = (SELECT call_suff from autotest.cases where id = ?)"; 25 | 26 | @Override 27 | protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 28 | 29 | response.setCharacterEncoding("utf-8"); 30 | response.setContentType("text/html;charset=utf-8"); 31 | String caseids = request.getParameter("preids"); 32 | 33 | Connection connection = JDBCConnectionPool.getConnection(); 34 | PreparedStatement pstmt_interface_list = null; 35 | PreparedStatement pstmt_cases = null; 36 | PrintWriter out = response.getWriter(); 37 | 38 | int[] results_cases = new int[1]; 39 | int[] results_interface_list = new int[1]; 40 | try { 41 | //需要做事务 42 | connection.setAutoCommit(false); 43 | 44 | //interface_list数据作为附属数据,首先删除 45 | pstmt_interface_list = connection.prepareStatement(del_sql_interface_list); 46 | for (String caseId : caseids.split(",")) { 47 | pstmt_interface_list.setInt(1, Integer.parseInt(caseId)); 48 | pstmt_interface_list.setInt(2, Integer.parseInt(caseId)); 49 | pstmt_interface_list.addBatch(); 50 | } 51 | results_interface_list = pstmt_interface_list.executeBatch(); 52 | pstmt_cases = connection.prepareStatement(del_sql_cases); 53 | for (String caseId : caseids.split(",")) { 54 | pstmt_cases.setInt(1, Integer.parseInt(caseId)); 55 | pstmt_cases.addBatch(); 56 | } 57 | results_cases = pstmt_cases.executeBatch(); 58 | 59 | connection.commit(); 60 | for (int i : results_cases) { 61 | if (i < 1) { 62 | out.write("error"); 63 | break; 64 | } else { 65 | out.write("success"); 66 | } 67 | } 68 | for (int i : results_interface_list) { 69 | if (i < 1) { 70 | out.write("error"); 71 | break; 72 | } else { 73 | out.write("success"); 74 | } 75 | } 76 | } catch (Exception se) { 77 | JDBCConnectionPool.connectionRollback(); 78 | out.write("error"); 79 | se.printStackTrace(); 80 | } finally { 81 | out.flush(); 82 | out.close(); 83 | JDBCConnectionPool.close(pstmt_interface_list); 84 | JDBCConnectionPool.close(pstmt_cases); 85 | } 86 | } 87 | } -------------------------------------------------------------------------------- /src/main/java/com/talk51/Utils/PostMethod_application_json_mulit.java: -------------------------------------------------------------------------------- 1 | package com.talk51.Utils; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.IOException; 5 | import java.io.InputStreamReader; 6 | import java.io.PrintWriter; 7 | import java.net.HttpURLConnection; 8 | import java.net.URL; 9 | import java.net.URLEncoder; 10 | import java.util.Map; 11 | 12 | /** 13 | * 发送POST请求 14 | * 15 | * @param url 目的地址 16 | * @param parameters 请求参数,Map类型。 17 | * @return 远程响应结果 18 | */ 19 | public class PostMethod_application_json_mulit { 20 | 21 | public static String sendPost(String url, Map parameters) { 22 | String result = "";// 返回的结果 23 | BufferedReader in = null;// 读取响应输入流 24 | PrintWriter out = null; 25 | StringBuffer sb = new StringBuffer();// 处理请求参数 26 | String params = ""; 27 | 28 | try { 29 | 30 | if (parameters.size() == 1) { 31 | for (String name : parameters.keySet()) { 32 | sb.append(name) 33 | .append("=") 34 | .append(URLEncoder.encode( 35 | parameters.get(name), "UTF-8")); 36 | } 37 | params = sb.toString(); 38 | } else { 39 | for (String name : parameters.keySet()) { 40 | sb.append(name) 41 | .append("=") 42 | .append(URLEncoder.encode( 43 | parameters.get(name), "UTF-8")).append("&"); 44 | } 45 | String temp_params = sb.toString(); 46 | params = temp_params.substring(0, temp_params.length() - 1); 47 | System.out.println(params); 48 | } 49 | 50 | // 创建URL对象 51 | URL connURL = new URL(url); 52 | // 打开URL连接 53 | HttpURLConnection httpConn = (HttpURLConnection) connURL 54 | .openConnection(); 55 | // 设置通用属性 56 | httpConn.setRequestProperty("Accept", "*/*"); 57 | httpConn.setRequestProperty("Connection", "Keep-Alive"); 58 | httpConn.setRequestProperty("User-Agent", 59 | "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)"); 60 | // httpConn.setRequestProperty("Content-Type", "application/json;charset=utf-8"); 61 | httpConn.setRequestProperty("accept", "application/json"); 62 | httpConn.setUseCaches(true); 63 | // 设置POST方式 64 | httpConn.setDoInput(true); 65 | httpConn.setDoOutput(true); 66 | // 获取HttpURLConnection对象对应的输出流 67 | out = new PrintWriter(httpConn.getOutputStream()); 68 | // 发送请求参数 69 | out.write(params); 70 | // System.out.println(params); 71 | // flush输出流的缓冲 72 | out.flush(); 73 | // 定义BufferedReader输入流来读取URL的响应,设置编码方式 74 | in = new BufferedReader(new InputStreamReader( 75 | httpConn.getInputStream(), "UTF-8")); 76 | String line; 77 | // 读取返回的内容 78 | while ((line = in.readLine()) != null) { 79 | result += line; 80 | } 81 | } catch (Exception e) { 82 | //e.printStackTrace(); 83 | } finally { 84 | try { 85 | if (out != null) { 86 | out.close(); 87 | } 88 | if (in != null) { 89 | in.close(); 90 | } 91 | } catch (IOException ex) { 92 | ex.printStackTrace(); 93 | } 94 | } 95 | 96 | return result; 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /src/main/java/com/borderTest/JSONBorderParam.java: -------------------------------------------------------------------------------- 1 | package com.borderTest; 2 | 3 | 4 | import net.sf.json.JSONArray; 5 | import net.sf.json.JSONObject; 6 | 7 | import java.util.Iterator; 8 | import java.util.Set; 9 | 10 | /** 11 | * JSON格式的参数化。 12 | * 稍微复杂,如果自身的value也是JSON格式,则存在自己调用自己的情况。 13 | * 由于value的类型并不明确,所以其功能依赖于其它类型的参数校验即检验规则。 14 | * 所以JSON格式的参数化数量会非常多,但边界测试参数数量多也是在所难免。 15 | * 用例建议JSON层次不要太高(对于JSONArray至少3层循环),而JSON中的内容可以多一些。 16 | */ 17 | public class JSONBorderParam extends BorderParam { 18 | 19 | JSONBorderParam(String paramPair, String key, String value) { 20 | // 整个参数的过短,过长,为空还是要判断的。 21 | super(paramPair, key, value); 22 | } 23 | 24 | @Override 25 | public Set getParamList() { 26 | // 有则替换成解码后的value 27 | String valueDecode = value.replaceAll("%5B", "[").replaceAll("%7B", "{") 28 | .replaceAll("%3A", ":").replaceAll("%2C", ",") 29 | .replaceAll("%7D", "}").replaceAll("%5D", "]") 30 | .replaceAll("%22", "\\\"").replaceAll("%27", "'") 31 | .replaceAll("%20", ""); 32 | 33 | if (valueDecode.endsWith("]")) {//这是JSONArray格式,用"]"结尾 34 | JSONArray jsonArray = JSONArray.fromObject(valueDecode); 35 | // 遍历其中的JSONObj 36 | for (int i = 0; i < jsonArray.size(); i++) { 37 | JSONObject jsonObj = jsonArray.getJSONObject(i); 38 | dealJsonObj(key, jsonObj, jsonArray); 39 | } 40 | } else {//普通JSON对象,但是不保证其中还存在JSONArray 41 | JSONObject jsonObj = JSONObject.fromObject(valueDecode); 42 | dealJsonObj(key, jsonObj, jsonObj); 43 | } 44 | 45 | return super.getParamList(); 46 | } 47 | 48 | /** 49 | * 处理JSON对象的公共方法,将其改变保存到paramPairList中。 50 | * 51 | * @param key 最上层的被参数化的key 52 | * @param jsonObj 要被改变的JsonObj对象 53 | * @param jsonObjReplace 最上层的Json对象,是jsonObj的父级。 54 | */ 55 | private void dealJsonObj(String key, JSONObject jsonObj, Object jsonObjReplace) { 56 | // 每个JSONObj都有很多key,再遍历他。 57 | Iterator it = jsonObj.keys(); 58 | while (it.hasNext()) { 59 | // 得到其中的一个key值 60 | String oneKey = it.next().toString(); 61 | // 保存value值,用于用后需要还原,因为我们需要对每一个key都做处理。 62 | String valueOriginal = jsonObj.getString(oneKey); 63 | 64 | // 如何replay 是关键。 65 | // 复用了不同类型参数化的方法。 66 | BorderParam borderParam = BorderCheckUtil.getBorderParamType( 67 | oneKey + "=" + valueOriginal, oneKey, valueOriginal, LONG_PARAM_NO_NEED_CHECK); 68 | for (String paramPairFix : borderParam.getParamList()) { 69 | 70 | // JSON格式太长的,增加了标红用于前台展示 71 | // 可能存在递归调用,只为非JSON格式数据增加两边的颜色标识 72 | String valueFixClear = BorderCheckUtil.getParamValue(paramPairFix); 73 | if (BorderCheckUtil.HTML_NO_KEY_NO_VALUE.equals(valueFixClear)) { 74 | // do nothing 75 | // JSON对象中,某一对key和value都不存在的情况,现有方式不校验。 76 | continue; 77 | } else if (valueFixClear.contains("}")) { 78 | jsonObj.replace(oneKey, valueFixClear); 79 | } else { 80 | jsonObj.replace(oneKey, BorderCheckUtil.HTML_POINT_RED + 81 | valueFixClear + BorderCheckUtil.HTML_POINT_SUFFIX); 82 | } 83 | // 已经替换关键value,可以直接调用toString方法。 84 | paramPairList.add(key + "=" + jsonObjReplace.toString().replace(BorderCheckUtil.HTML_POINT_SUFFIX_4JSON, BorderCheckUtil.HTML_POINT_SUFFIX)); 85 | } 86 | // 把数据还原 87 | jsonObj.replace(oneKey, valueOriginal); 88 | } 89 | } 90 | 91 | } 92 | -------------------------------------------------------------------------------- /src/main/java/com/talk51/Utils/PostMethod_Old.java: -------------------------------------------------------------------------------- 1 | package com.talk51.Utils; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.IOException; 5 | import java.io.InputStreamReader; 6 | import java.io.PrintWriter; 7 | import java.net.HttpURLConnection; 8 | import java.net.URL; 9 | import java.net.URLEncoder; 10 | import java.util.HashMap; 11 | import java.util.Map; 12 | 13 | /** 14 | * 发送POST请求 15 | * 16 | * @param url 目的地址 17 | * @param parameters 请求参数,Map类型。 18 | * @return 远程响应结果 19 | */ 20 | public class PostMethod_Old { 21 | 22 | public static String sendPost(String url, Map parameters) { 23 | String result = "";// 返回的结果 24 | BufferedReader in = null;// 读取响应输入流 25 | PrintWriter out = null; 26 | StringBuffer sb = new StringBuffer();// 处理请求参数 27 | String params = "";// 编码之后的参数 28 | try { 29 | // 编码请求参数 30 | if (parameters.size() == 1) { 31 | for (String name : parameters.keySet()) { 32 | sb.append(name) 33 | .append("=") 34 | .append(URLEncoder.encode( 35 | parameters.get(name), "UTF-8")); 36 | } 37 | params = sb.toString(); 38 | } else { 39 | for (String name : parameters.keySet()) { 40 | sb.append(name) 41 | .append("=") 42 | .append(URLEncoder.encode( 43 | parameters.get(name), "UTF-8")).append("&"); 44 | } 45 | String temp_params = sb.toString(); 46 | params = temp_params.substring(0, temp_params.length() - 1); 47 | System.out.println(params); 48 | } 49 | // 创建URL对象 50 | URL connURL = new URL(url); 51 | // 打开URL连接 52 | HttpURLConnection httpConn = (HttpURLConnection) connURL 53 | .openConnection(); 54 | // 设置通用属性 55 | httpConn.setRequestProperty("Accept", "*/*"); 56 | httpConn.setRequestProperty("Connection", "Keep-Alive"); 57 | httpConn.setRequestProperty("User-Agent", 58 | "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)"); 59 | httpConn.setUseCaches(true); 60 | // 设置POST方式 61 | httpConn.setDoInput(true); 62 | httpConn.setDoOutput(true); 63 | // 获取HttpURLConnection对象对应的输出流 64 | out = new PrintWriter(httpConn.getOutputStream()); 65 | // 发送请求参数 66 | out.write(params); 67 | // System.out.println(params); 68 | // flush输出流的缓冲 69 | out.flush(); 70 | // 定义BufferedReader输入流来读取URL的响应,设置编码方式 71 | in = new BufferedReader(new InputStreamReader( 72 | httpConn.getInputStream(), "UTF-8")); 73 | String line; 74 | // 读取返回的内容 75 | while ((line = in.readLine()) != null) { 76 | result += line; 77 | } 78 | } catch (Exception e) { 79 | //e.printStackTrace(); 80 | } finally { 81 | try { 82 | if (out != null) { 83 | out.close(); 84 | } 85 | if (in != null) { 86 | in.close(); 87 | } 88 | } catch (IOException ex) { 89 | ex.printStackTrace(); 90 | } 91 | } 92 | 93 | return result; 94 | } 95 | 96 | public static void main(String[] args) { 97 | Map parameters = new HashMap(); 98 | parameters.put("name", "sarin"); 99 | parameters.put("selectOne", "2"); 100 | String result = PostMethod_Old.sendPost("http://www.51talk.com/ajax.php", 101 | parameters); 102 | System.out.println(result); 103 | 104 | } 105 | 106 | } 107 | -------------------------------------------------------------------------------- /src/main/java/com/talk51/Utils/StringTool.java: -------------------------------------------------------------------------------- 1 | package com.talk51.Utils; 2 | 3 | import java.io.UnsupportedEncodingException; 4 | 5 | public class StringTool { 6 | public static String toHexString(String s) { 7 | if (s == null) { 8 | return ""; 9 | } else { 10 | String str = ""; 11 | for (int i = 0; i < s.length(); i++) { 12 | int ch = (int) s.charAt(i); 13 | String s4 = Integer.toHexString(ch); 14 | if (s4.length() == 1) { 15 | s4 = "000" + s4; 16 | } else if (s4.length() == 2) { 17 | s4 = "00" + s4; 18 | } else if (s4.length() == 3) { 19 | s4 = "0" + s4; 20 | } 21 | str = str + s4; 22 | } 23 | return str; 24 | } 25 | } 26 | 27 | public static String toStingHex(String s) throws UnsupportedEncodingException { 28 | String str = ""; 29 | for (int i = 0; i < s.length(); i = i + 4) { 30 | String buffresult = "\\u" + s.substring(i, i + 4); 31 | buffresult = decodeUnicode(buffresult); 32 | str = str + buffresult; 33 | } 34 | return str; 35 | } 36 | 37 | public static String decodeUnicode(String theString) { 38 | char aChar; 39 | int len = theString.length(); 40 | StringBuffer outBuffer = new StringBuffer(len); 41 | for (int x = 0; x < len; ) { 42 | aChar = theString.charAt(x++); 43 | if (aChar == '\\') { 44 | aChar = theString.charAt(x++); 45 | if (aChar == 'u') { 46 | // Read the xxxx 47 | int value = 0; 48 | for (int i = 0; i < 4; i++) { 49 | aChar = theString.charAt(x++); 50 | switch (aChar) { 51 | case '0': 52 | case '1': 53 | case '2': 54 | case '3': 55 | case '4': 56 | case '5': 57 | case '6': 58 | case '7': 59 | case '8': 60 | case '9': 61 | value = (value << 4) + aChar - '0'; 62 | break; 63 | case 'a': 64 | case 'b': 65 | case 'c': 66 | case 'd': 67 | case 'e': 68 | case 'f': 69 | value = (value << 4) + 10 + aChar - 'a'; 70 | break; 71 | case 'A': 72 | case 'B': 73 | case 'C': 74 | case 'D': 75 | case 'E': 76 | case 'F': 77 | value = (value << 4) + 10 + aChar - 'A'; 78 | break; 79 | default: 80 | throw new IllegalArgumentException("Malformed \\uxxxx encoding."); 81 | } 82 | } 83 | outBuffer.append((char) value); 84 | } else { 85 | if (aChar == 't') 86 | aChar = '\t'; 87 | else if (aChar == 'r') 88 | aChar = '\r'; 89 | else if (aChar == 'n') 90 | aChar = '\n'; 91 | else if (aChar == 'f') 92 | aChar = '\f'; 93 | outBuffer.append(aChar); 94 | } 95 | } else 96 | outBuffer.append(aChar); 97 | } 98 | return outBuffer.toString(); 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /src/main/java/com/talk51/Utils/HttpMethodFactory.java: -------------------------------------------------------------------------------- 1 | package com.talk51.Utils; 2 | 3 | import com.borderTest.BorderCheckUtil; 4 | import okhttp3.Headers; 5 | import org.apache.commons.lang3.StringUtils; 6 | 7 | /** 8 | * 前端使用http方法的工厂类 9 | * 10 | * @author zhaoyu 11 | */ 12 | public class HttpMethodFactory { 13 | 14 | // 执行时间标记的分割符 15 | public final static String EXECUTE_TIME_SEPARATOR = "EXECUTE_TIME_SEPARATOR"; 16 | 17 | /** 18 | * 工厂类方法,返回http请求值 19 | */ 20 | public static String getResult(String method, String url, String bodyinfo) { 21 | String result; 22 | Headers headers = Headers.of("User-Agent", 23 | "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)"); 24 | switch (method) { 25 | case "get": 26 | headers = Headers.of("User-Agent", 27 | "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)"); 28 | result = HttpUtils.sendGet(headers, url, bodyinfo); 29 | break; 30 | case "post": 31 | headers = Headers.of("User-Agent", 32 | "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)"); 33 | result = HttpUtils.sendPost(headers, url, bodyinfo); 34 | break; 35 | case "post_Json": 36 | // headers = Headers.of("Content-Type", "application/json;charset=utf-8"); 37 | result = HttpUtils.sendPost4JSON(headers, url, bodyinfo); 38 | break; 39 | case "post_return_json": 40 | headers = Headers.of("accept", "application/json;charset=utf-8"); 41 | result = HttpUtils.sendPost(headers, url, bodyinfo); 42 | break; 43 | case "put": 44 | result = HttpUtils.sendPut(url, bodyinfo); 45 | break; 46 | case "delete": 47 | result = HttpUtils.sendDelete(url, bodyinfo); 48 | break; 49 | default://一键边界测试进默认方法 50 | result = sendRequest(method, url, bodyinfo); 51 | break; 52 | } 53 | return result; 54 | } 55 | 56 | /** 57 | * 增加一个带执行时间的接口 58 | * 59 | * @return 60 | */ 61 | public static String getResultWithTime(String method, String url, String bodyinfo) { 62 | long start = System.nanoTime(); 63 | String result = getResult(method, url, bodyinfo); 64 | String executeTime = BorderCheckUtil.getExecuteTime(start); 65 | return executeTime + EXECUTE_TIME_SEPARATOR + result; 66 | } 67 | 68 | /** 69 | * 返回值的默认方法,未来可以在这里拓展 70 | */ 71 | private static String sendRequest(String method, String url, String bodyinfo) { 72 | String result = ""; 73 | try { 74 | if (method.endsWith("oneKeyCheck")) { 75 | // 只取前面的真正方法名 76 | method = method.split("@")[0]; 77 | result = BorderCheckUtil.sendCheck(method, url, bodyinfo); 78 | } 79 | } catch (Exception e) { 80 | e.printStackTrace(); 81 | } 82 | return result; 83 | } 84 | 85 | /** 86 | * 获取返回值内容 87 | */ 88 | public static String getResultData(String result) { 89 | if (StringUtils.isEmpty(result) 90 | || !result.contains(EXECUTE_TIME_SEPARATOR) 91 | || result.split(EXECUTE_TIME_SEPARATOR).length == 1) { 92 | return ""; 93 | } else { 94 | String returnValue = result.split(EXECUTE_TIME_SEPARATOR)[1]; 95 | return returnValue; 96 | } 97 | } 98 | 99 | /** 100 | * 获取返回值执行时间 101 | */ 102 | public static String getResultTime(String result) { 103 | if (StringUtils.isEmpty(result) 104 | || !result.contains(EXECUTE_TIME_SEPARATOR) 105 | || result.split(EXECUTE_TIME_SEPARATOR).length == 1) { 106 | return ""; 107 | } else { 108 | String returnValue = result.split(EXECUTE_TIME_SEPARATOR)[0]; 109 | return returnValue; 110 | } 111 | } 112 | } 113 | -------------------------------------------------------------------------------- /src/main/java/com/talk51/Utils/GetMethod_Old.java: -------------------------------------------------------------------------------- 1 | package com.talk51.Utils; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.IOException; 5 | import java.io.InputStreamReader; 6 | import java.net.URLEncoder; 7 | import java.util.List; 8 | import java.util.Map; 9 | import java.util.regex.Matcher; 10 | import java.util.regex.Pattern; 11 | 12 | /** 13 | * 发送GET请求 14 | * 15 | * @return 远程响应结果 16 | */ 17 | 18 | public class GetMethod_Old { 19 | 20 | public static String sendGet(String url, Map param) { 21 | String result = "";// 返回的结果 22 | BufferedReader in = null;// 读取响应输入流 23 | StringBuffer sb = new StringBuffer();// 存储参数 24 | String params = "";// 编码之后的参数 25 | try { 26 | // 编码请求参数 27 | if (param.size() == 0) { 28 | params = ""; 29 | } else if (param.size() == 1) { 30 | for (String name : param.keySet()) { 31 | sb.append(name) 32 | .append("=") 33 | .append(URLEncoder.encode( 34 | param.get(name), "UTF-8")); 35 | params = sb.toString(); 36 | } 37 | } else { 38 | for (String name : param.keySet()) { 39 | sb.append(name) 40 | .append("=") 41 | .append(URLEncoder.encode( 42 | param.get(name), "UTF-8")).append("&"); 43 | String temp_params = sb.toString(); 44 | params = temp_params.substring(0, temp_params.length() - 1); 45 | } 46 | } 47 | String full_url = url + "?" + params; 48 | System.out.println(full_url); 49 | // 创建URL对象 50 | java.net.URL connURL = new java.net.URL(full_url); 51 | // 打开URL连接 52 | java.net.HttpURLConnection httpConn = (java.net.HttpURLConnection) connURL 53 | .openConnection(); 54 | // 设置通用属性 55 | httpConn.setRequestProperty("Accept", "*/*"); 56 | httpConn.setRequestProperty("Connection", "Keep-Alive"); 57 | httpConn.setRequestProperty("User-Agent", 58 | "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)"); 59 | // 建立实际的连接 60 | httpConn.connect(); 61 | // 响应头部获取 62 | Map> headers = httpConn.getHeaderFields(); 63 | // 遍历所有的响应头字段 64 | // for (String key : headers.keySet()) { 65 | // System.out.println(key + "\t:\t" + headers.get(key)); 66 | // } 67 | // 定义BufferedReader输入流来读取URL的响应,并设置编码方式 68 | in = new BufferedReader(new InputStreamReader( 69 | httpConn.getInputStream(), "UTF-8")); 70 | String line; 71 | // 读取返回的内容 72 | while ((line = in.readLine()) != null) { 73 | result += line; 74 | } 75 | } catch (Exception e) { 76 | e.printStackTrace(); 77 | } finally { 78 | try { 79 | if (in != null) { 80 | in.close(); 81 | } 82 | } catch (IOException ex) { 83 | ex.printStackTrace(); 84 | } 85 | } 86 | return result; 87 | } 88 | 89 | 90 | public static void main(String[] args) { 91 | String str = "http://172.16.16.53"; 92 | String str2 = "http://172.16.0.71:8081"; 93 | String str3 = "http://www.51talk.com"; 94 | 95 | 96 | getIpPort(str); 97 | getIpPort(str2); 98 | getIpPort(str3); 99 | 100 | 101 | } 102 | 103 | public static void getIpPort(String str) { 104 | String regex = "http://(.*?):(.*)"; 105 | if (!str.matches(regex)) { 106 | regex = "//(.*?)(.*)"; 107 | } 108 | Pattern p = Pattern.compile(regex); 109 | Matcher m = p.matcher(str); 110 | 111 | while (m.find()) { 112 | System.out.println(m.group(1) == null ? "null" : m.group(1)); 113 | System.out.println(m.group(2) == null ? "null" : m.group(2)); 114 | } 115 | 116 | } 117 | } 118 | -------------------------------------------------------------------------------- /src/main/java/com/borderTest/MultiBorderParam.java: -------------------------------------------------------------------------------- 1 | package com.borderTest; 2 | 3 | import java.util.Set; 4 | 5 | /** 6 | * 多个参数逗号分隔的边界测试 7 | */ 8 | public class MultiBorderParam extends IntegerBorderParam { 9 | 10 | MultiBorderParam(String paramPair, String key, String value) { 11 | super(paramPair, key, value); 12 | } 13 | 14 | @Override 15 | public Set getParamList() { 16 | 17 | // 多逗号相关的边界校验 , : %2C 18 | paramPairList.add(paramPair + "%2C%2C%2C"); 19 | // 参数中带有负数 20 | paramPairList.add(paramPair + "%2C-1"); 21 | // 多ID查询超过100个(增加100个) 22 | paramPairList.add(paramPair + "1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 23 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 24 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 25 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 26 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 27 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 28 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 29 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 30 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 31 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10"); 32 | // 多ID查询超过200个(增加200个) 33 | paramPairList.add(paramPair + "1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 34 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 35 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 36 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 37 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 38 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 39 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 40 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 41 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 42 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 43 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 44 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 45 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 46 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 47 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 48 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 49 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 50 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 51 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 52 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10"); 53 | 54 | // 多ID查询超过300个(增加300个) 55 | paramPairList.add(paramPair + "1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 56 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 57 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 58 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 59 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 60 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 61 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 62 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 63 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 64 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 65 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 66 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 67 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 68 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 69 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 70 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 71 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 72 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 73 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 74 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 75 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 76 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 77 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 78 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 79 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 80 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 81 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 82 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 83 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10" + 84 | "%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10"); 85 | 86 | return super.getParamList(); 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /src/main/java/com/servlet/UpdateCaseApi.java: -------------------------------------------------------------------------------- 1 | package com.servlet; 2 | 3 | import com.talk51.Utils.JDBCConnectionPool; 4 | import org.apache.commons.lang.StringEscapeUtils; 5 | 6 | import javax.servlet.ServletException; 7 | import javax.servlet.annotation.WebServlet; 8 | import javax.servlet.http.HttpServlet; 9 | import javax.servlet.http.HttpServletRequest; 10 | import javax.servlet.http.HttpServletResponse; 11 | import javax.servlet.http.HttpSession; 12 | import java.io.IOException; 13 | import java.io.PrintWriter; 14 | import java.net.URLDecoder; 15 | import java.net.URLEncoder; 16 | import java.sql.Connection; 17 | import java.sql.ResultSet; 18 | import java.sql.SQLException; 19 | import java.sql.Statement; 20 | 21 | /** 22 | * Servlet implementation class UpdateCaseApi 23 | */ 24 | @WebServlet(name = "UpdateCaseApi", value = "/UpdateCaseApi") 25 | public class UpdateCaseApi extends HttpServlet { 26 | 27 | protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 28 | 29 | PrintWriter out = response.getWriter(); 30 | 31 | request.setCharacterEncoding("UTF-8"); 32 | response.setContentType("text/html;charset=utf-8"); 33 | HttpSession session = request.getSession(); 34 | request.setCharacterEncoding("UTF-8"); 35 | request.setCharacterEncoding("UTF-8"); 36 | String model_name = request.getParameter("model_name"); 37 | String interface_name = request.getParameter("interface_name"); 38 | String interface_suff = request.getParameter("interface_suff"); 39 | String host_ip = request.getParameter("host_ip"); 40 | String priority = request.getParameter("priority"); 41 | String expected_result = request.getParameter("expected_result"); 42 | String scenario = request.getParameter("scenario"); 43 | String method = request.getParameter("method"); 44 | String body = StringEscapeUtils.escapeSql(URLDecoder.decode(request.getParameter("body"), "UTF-8")); 45 | String section2body = URLEncoder.encode(request.getParameter("section2body"), "UTF-8"); 46 | String is_cache = request.getParameter("is_cache"); 47 | String updataid = request.getParameter("updataid"); 48 | 49 | int user_id = 0; 50 | try { 51 | user_id = (Integer) session.getAttribute("userid"); 52 | } catch (RuntimeException e) { 53 | user_id = 0; 54 | } 55 | 56 | Connection connection = JDBCConnectionPool.getConnection(); 57 | Statement statement = null; 58 | ResultSet rss2pre = null; 59 | try { 60 | statement = connection.createStatement(); 61 | String updata_sql = "update cases set project_name='" + model_name + "',interface_name='" + interface_name + "',call_suff='" + interface_suff + "',host_ip='" + host_ip + "',priority=" + priority + ",expected_result='" + expected_result + "',scenario='" + scenario + "',method='" + method + "',body='" + body + 62 | "',operator=" + user_id + ",is_cache=" + is_cache + " where id=" + updataid + ""; 63 | statement.executeUpdate(updata_sql); 64 | 65 | String s2preupdata_sql = "select * from cases_parm_relation where case_id=" + updataid + ""; 66 | rss2pre = statement.executeQuery(s2preupdata_sql); 67 | if (!rss2pre.next()) { 68 | String new_s2inert = "insert into cases_parm_relation (case_id,parm_relation,is_deleted) values (" + updataid + ",'" + section2body + "',0)"; 69 | statement.executeUpdate(new_s2inert); 70 | } 71 | 72 | String s2updata_sql = "update cases_parm_relation set parm_relation='" + section2body + "' where case_id=" + updataid + ""; 73 | statement.executeUpdate(s2updata_sql); 74 | 75 | String check_sql = "select * from interface_list where call_Stuff = '" + interface_suff + "' and interface_name = '" + interface_name + "' and model_name='" + model_name + "'"; 76 | rss2pre = statement.executeQuery(check_sql); 77 | 78 | if (!rss2pre.next()) { 79 | String new_insert_interface_list_sql = "insert into interface_list (model_name,interface_name,call_Stuff) values ('" + model_name + "','" + interface_name + "','" + interface_suff + "')"; 80 | statement.executeUpdate(new_insert_interface_list_sql); 81 | } 82 | 83 | statement.close(); 84 | out.print("success"); 85 | } catch (SQLException e) { 86 | e.printStackTrace(); 87 | out.print("error"); 88 | } finally { 89 | out.flush(); 90 | out.close(); 91 | JDBCConnectionPool.close(rss2pre, statement); 92 | } 93 | } 94 | } -------------------------------------------------------------------------------- /src/main/java/com/talk51/Utils/HttpUtils.java: -------------------------------------------------------------------------------- 1 | package com.talk51.Utils; 2 | 3 | import okhttp3.*; 4 | 5 | import java.io.IOException; 6 | import java.util.concurrent.TimeUnit; 7 | 8 | /** 9 | * HTTP的方法集中处理 10 | */ 11 | public class HttpUtils { 12 | 13 | /** 14 | * 是实现client的单例 15 | */ 16 | private static class Singleton { 17 | private final static int CONNECT_TIMEOUT = 60; 18 | private final static int READ_TIMEOUT = 100; 19 | private final static int WRITE_TIMEOUT = 60; 20 | 21 | private static OkHttpClient client = new OkHttpClient.Builder() 22 | .readTimeout(READ_TIMEOUT, TimeUnit.SECONDS)//设置读取超时时间 23 | .writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS)//设置写的超时时间 24 | .connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS)//设置连接超时时间 25 | .build(); 26 | } 27 | 28 | public synchronized static OkHttpClient getOkHttpClient() { 29 | return Singleton.client; 30 | } 31 | 32 | /** 33 | * get方法 34 | */ 35 | public static String sendGet(Headers headers, String url, String params) { 36 | try { 37 | Request request = new Request.Builder() 38 | .url(url + "?" + params) 39 | .get() 40 | .headers(headers) 41 | .build(); 42 | Response response = getOkHttpClient().newCall(request).execute(); 43 | return response.body().string(); 44 | } catch (IOException e) { 45 | e.printStackTrace(); 46 | return e.toString(); 47 | } 48 | } 49 | 50 | /** 51 | * post方法 52 | */ 53 | public static String sendPost(Headers headers, String url, String params) { 54 | try { 55 | MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded"); 56 | return getPostRsp(headers, url, params, mediaType); 57 | } catch (IOException e) { 58 | e.printStackTrace(); 59 | return e.toString(); 60 | } 61 | } 62 | 63 | /** 64 | * post_4JSON方法 65 | */ 66 | public static String sendPost4JSON(Headers headers, String url, String params) { 67 | try { 68 | MediaType mediaType = MediaType.parse("application/json; charset=utf-8"); 69 | return getPostRsp(headers, url, params, mediaType); 70 | } catch (IOException e) { 71 | e.printStackTrace(); 72 | return e.toString(); 73 | } 74 | } 75 | 76 | private static String getPostRsp(Headers headers, String url, String params, MediaType mediaType) throws IOException { 77 | RequestBody body = RequestBody.create(mediaType, params); 78 | Request request = new Request.Builder() 79 | .url(url) 80 | .post(body) 81 | .headers(headers) 82 | .build(); 83 | 84 | Response response = getOkHttpClient().newCall(request).execute(); 85 | return response.body().string(); 86 | } 87 | 88 | /** 89 | * put方法 90 | */ 91 | public static String sendPut(String url, String parms) { 92 | try { 93 | MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded"); 94 | RequestBody body = RequestBody.create(mediaType, parms); 95 | Request request = new Request.Builder() 96 | .url(url) 97 | .put(body) 98 | .addHeader("content-type", "application/x-www-form-urlencoded") 99 | .addHeader("accept", "application/json") 100 | .addHeader("cache-control", "no-cache") 101 | .build(); 102 | 103 | Response response = getOkHttpClient().newCall(request).execute(); 104 | return response.body().string(); 105 | } catch (IOException e) { 106 | e.printStackTrace(); 107 | return e.toString(); 108 | } 109 | } 110 | 111 | /** 112 | * delete方法 113 | */ 114 | public static String sendDelete(String url, String parms) { 115 | try { 116 | MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded"); 117 | RequestBody body = RequestBody.create(mediaType, parms); 118 | Request request = new Request.Builder() 119 | .url(url) 120 | .delete(body) 121 | .addHeader("content-type", "application/x-www-form-urlencoded") 122 | .addHeader("accept", "application/json") 123 | .addHeader("cache-control", "no-cache") 124 | .build(); 125 | 126 | Response response = getOkHttpClient().newCall(request).execute(); 127 | return response.body().string(); 128 | } catch (IOException e) { 129 | e.printStackTrace(); 130 | return e.toString(); 131 | } 132 | } 133 | 134 | } 135 | -------------------------------------------------------------------------------- /src/main/java/com/talk51/Utils/JDBCConnectionPool.java: -------------------------------------------------------------------------------- 1 | package com.talk51.Utils; 2 | 3 | import com.alibaba.druid.pool.DruidDataSourceFactory; 4 | 5 | import javax.sql.DataSource; 6 | import java.io.BufferedInputStream; 7 | import java.io.FileInputStream; 8 | import java.io.IOException; 9 | import java.io.InputStream; 10 | import java.net.URL; 11 | import java.sql.Connection; 12 | import java.sql.ResultSet; 13 | import java.sql.SQLException; 14 | import java.sql.Statement; 15 | import java.util.Properties; 16 | 17 | /** 18 | * Created by zhaoyu on 2017/3/22. 19 | */ 20 | public class JDBCConnectionPool { 21 | 22 | //同步没有风险 23 | private static ThreadLocal threadLocal = new ThreadLocal(); 24 | 25 | public static Connection getConnection() { 26 | Connection connection = threadLocal.get(); 27 | try { 28 | if (connection == null || connection.isClosed()) { 29 | connection = DruidConnectionManager.getInstance().getConnection(); 30 | threadLocal.set(connection); 31 | return connection; 32 | } 33 | } catch (SQLException e) { 34 | e.printStackTrace(); 35 | } 36 | return connection; 37 | } 38 | 39 | public static void close(ResultSet rs, Statement stmt) { 40 | DruidConnectionManager.getInstance().closeAllResources(rs, stmt); 41 | closeConnection(); 42 | } 43 | 44 | public static void close(Statement stmt){ 45 | DruidConnectionManager.getInstance().closeStatement(stmt); 46 | closeConnection(); 47 | } 48 | 49 | public static void closeConnection() { 50 | Connection connection = threadLocal.get(); 51 | try { 52 | if (connection != null && !connection.isClosed()) { 53 | connection.close(); 54 | threadLocal.set(null); 55 | } 56 | } catch (SQLException e) { 57 | e.printStackTrace(); 58 | } 59 | } 60 | 61 | public static void connectionRollback(){ 62 | Connection connection = threadLocal.get(); 63 | try { 64 | if (connection != null && !connection.isClosed()) { 65 | connection.rollback(); 66 | } 67 | } catch (SQLException e) { 68 | e.printStackTrace(); 69 | } 70 | } 71 | 72 | 73 | public static void main(String[] args) throws IOException { 74 | URL classpath = Thread.currentThread().getContextClassLoader().getResource(""); 75 | InputStream Tempin = new BufferedInputStream(new FileInputStream(classpath.getFile() + "JDBCConfig.properties")); 76 | Properties Config = new Properties(); 77 | Config.load(Tempin); 78 | String dbip = Config.getProperty("Test.db.ip"); 79 | System.out.println(dbip); 80 | } 81 | } 82 | 83 | /** 84 | * 连接池类只有JDBC使用,故写在一个文件中。 85 | * Druid被誉为最快的连接池,这里尝试一下。 86 | */ 87 | class DruidConnectionManager { 88 | 89 | private static DruidConnectionManager druidConnection; 90 | private static DataSource datasource; 91 | private static Properties p = new Properties(); 92 | 93 | //资源文件写成单例模式 94 | private DruidConnectionManager() { 95 | datasource = initDataSource(); 96 | } 97 | 98 | private static DataSource initDataSource() { 99 | try { 100 | p.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("JDBCConfig.properties")); 101 | datasource = DruidDataSourceFactory.createDataSource(p); 102 | } catch (Exception e) { 103 | e.printStackTrace(); 104 | } 105 | 106 | return datasource; 107 | } 108 | 109 | public static synchronized DruidConnectionManager getInstance() { 110 | 111 | if (druidConnection == null) { 112 | druidConnection = new DruidConnectionManager(); 113 | } 114 | return druidConnection; 115 | } 116 | 117 | public Connection getConnection() { 118 | if (datasource != null) { 119 | try { 120 | Connection connection = datasource.getConnection(); 121 | return connection; 122 | } catch (SQLException e) { 123 | e.printStackTrace(); 124 | } 125 | } 126 | return null; 127 | } 128 | 129 | public void closeAllResources(ResultSet rs, Statement stmt) { 130 | closeResultSet(rs); 131 | closeStatement(stmt); 132 | } 133 | 134 | public void closeResultSet(ResultSet rs) { 135 | try { 136 | if (rs != null) { 137 | rs.close(); 138 | } 139 | } catch (SQLException e) { 140 | e.printStackTrace(); 141 | } 142 | } 143 | 144 | public void closeStatement(Statement stmt) { 145 | try { 146 | if (stmt != null) { 147 | stmt.close(); 148 | } 149 | } catch (SQLException e) { 150 | e.printStackTrace(); 151 | } 152 | } 153 | } -------------------------------------------------------------------------------- /src/main/java/com/test/SuanFaBiSai1.java: -------------------------------------------------------------------------------- 1 | package com.test; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.File; 5 | import java.io.FileReader; 6 | import java.util.ArrayList; 7 | import java.util.List; 8 | 9 | class Node { 10 | int x = 0; 11 | int y = 0; 12 | int value = 0; 13 | } 14 | 15 | public class SuanFaBiSai1 { 16 | 17 | public static int[][] aa = {{-3, 6, 4, 1}, {8, -7, 5, 2}, {3, 1, 7, 4}, {-2, 8, -5, 9}}; 18 | 19 | public static List maxSumJuZhen(Integer[][] juzhen) { 20 | 21 | // int aaa = juzhen[1][5]; 22 | // java.lang.ArrayIndexOutOfBoundsException 23 | 24 | int maxsum = 0; 25 | int maxtmp = 0; 26 | 27 | int resultI = 0; 28 | int resultJ = 0; 29 | 30 | ArrayList result = new ArrayList(); 31 | for (int i = 0; i < juzhen.length; i++) { 32 | int zhi1 = juzhen[0][i]; 33 | // 根据他可以得到4条线。 34 | if (zhi1 == juzhen[juzhen.length-1][juzhen.length-1]) { 35 | maxsum = zhi1; 36 | continue; 37 | } 38 | 39 | // 第一条横向的就一条 40 | ArrayList list1 = new ArrayList(); 41 | for (int j = 0; j < juzhen.length; j++) { 42 | list1.add(juzhen[0][j]); 43 | } 44 | // 第二条竖向也就一条 45 | ArrayList list2 = new ArrayList(); 46 | for (int j = 0; j < juzhen.length; j++) { 47 | list2.add(juzhen[j][i]); 48 | } 49 | // 左斜线一条 50 | ArrayList list3 = new ArrayList(); 51 | if (i > 0) { 52 | for (int j = 0; j < i + 1; j++) { 53 | list3.add(juzhen[j][i - j]); 54 | } 55 | } 56 | // 右斜线一条 57 | ArrayList list4 = new ArrayList(); 58 | for (int j = 0; j < i + 1; j++) { 59 | try{ 60 | list4.add(juzhen[j][j + i]); 61 | } catch (Exception e){ 62 | continue; 63 | } 64 | } 65 | // 横向的线 66 | ArrayList list5 = new ArrayList(); 67 | for (int j = 0; j < juzhen.length ; j++) { 68 | list5.add(juzhen[i][j]); 69 | } 70 | // 补充的线 71 | ArrayList list6 = new ArrayList(); 72 | for (int j = 0; j < juzhen.length; j ++) { 73 | try { 74 | list6.add(juzhen[i+j][juzhen.length-j]); 75 | } catch (Exception e){ 76 | continue; 77 | } 78 | } 79 | 80 | if ((int) maxSum(list1).get(0) >= maxsum) { 81 | maxsum = (int) maxSum(list1).get(0); 82 | } 83 | if ((int) maxSum(list2).get(0) >= maxsum) { 84 | maxsum = (int) maxSum(list2).get(0); 85 | } 86 | if ((int) maxSum(list3).get(0) >= maxsum) { 87 | maxsum = (int) maxSum(list3).get(0); 88 | } 89 | if ((int) maxSum(list4).get(0) >= maxsum) { 90 | maxsum = (int) maxSum(list4).get(0); 91 | } 92 | if ((int) maxSum(list5).get(0) >= maxsum) { 93 | maxsum = (int) maxSum(list5).get(0); 94 | } 95 | if ((int) maxSum(list6).get(0) >= maxsum) { 96 | maxsum = (int) maxSum(list6).get(0); 97 | } 98 | 99 | } 100 | 101 | 102 | result.add(maxsum); 103 | 104 | return result; 105 | } 106 | 107 | public static void main(String[] args) { 108 | Integer[][] aaa = read(); 109 | long start = System.currentTimeMillis(); 110 | System.out.println(maxSumJuZhen(aaa)); 111 | long end = System.currentTimeMillis(); 112 | System.out.println(end - start); 113 | } 114 | 115 | 116 | public static List maxSum(List list) { 117 | 118 | int maxsum = 0; 119 | int maxtmp = 0; 120 | 121 | int resultI = 0; 122 | int resultJ = 0; 123 | 124 | for (int i = 0; i < list.size(); i++) { 125 | maxtmp = 0; 126 | for (int j = i; j < list.size(); j++) { 127 | maxtmp += list.get(j); 128 | if (maxtmp > maxsum) { 129 | maxsum = maxtmp; 130 | resultI = i; 131 | resultJ = j; 132 | } 133 | } 134 | } 135 | 136 | ArrayList result = new ArrayList(); 137 | result.add(maxsum); 138 | result.add(resultI); 139 | result.add(resultJ); 140 | 141 | return result; 142 | 143 | } 144 | 145 | public static Integer[][] read() { 146 | File file = new File("D:/matrix.txt"); 147 | Integer[][] matrix = new Integer[1024][1024]; 148 | try { 149 | BufferedReader br = new BufferedReader(new FileReader(file)); 150 | String s = null; 151 | int i = 0; 152 | while ((s = br.readLine()) != null) { 153 | String[] values = s.split(" "); 154 | int j = 0; 155 | for (String value : values) { 156 | matrix[i][j++] = Integer.parseInt(value); 157 | } 158 | i++; 159 | } 160 | br.close(); 161 | } catch (Exception e) { 162 | e.printStackTrace(); 163 | } 164 | return matrix; 165 | } 166 | } 167 | -------------------------------------------------------------------------------- /src/main/java/com/servlet/GetApiListByModelNameAndUserId.java: -------------------------------------------------------------------------------- 1 | package com.servlet; 2 | 3 | import com.talk51.Utils.JDBCConnectionPool; 4 | import org.apache.commons.lang.StringUtils; 5 | 6 | import javax.servlet.ServletException; 7 | import javax.servlet.annotation.WebServlet; 8 | import javax.servlet.http.HttpServlet; 9 | import javax.servlet.http.HttpServletRequest; 10 | import javax.servlet.http.HttpServletResponse; 11 | import java.io.IOException; 12 | import java.io.PrintWriter; 13 | import java.sql.Connection; 14 | import java.sql.ResultSet; 15 | import java.sql.SQLException; 16 | import java.sql.Statement; 17 | 18 | /** 19 | * Servlet implementation class GetApiListByModelNameAndUserId 20 | */ 21 | @WebServlet(name = "GetApiListByModelNameAndUserId", value = "/GetApiListByModelNameAndUserId") 22 | public class GetApiListByModelNameAndUserId extends HttpServlet { 23 | private static final long serialVersionUID = 1L; 24 | int rownum = 0; 25 | 26 | protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 27 | response.setCharacterEncoding("utf-8"); 28 | response.setContentType("text/html;charset=utf-8"); 29 | String userid = request.getParameter("userid"); 30 | String projectname = request.getParameter("projectname"); 31 | String prority = request.getParameter("prority"); 32 | String callSuff = request.getParameter("call_suff"); 33 | 34 | String sql = "SELECT * FROM cases where operator in (" + userid + ",0) and project_name = '" + projectname + "' and is_deleted <> 1 and priority in (" + prority + ")"; 35 | if (StringUtils.isNotEmpty(callSuff)) { 36 | sql = "SELECT * FROM cases where is_deleted <> 1 and call_suff like '%" + callSuff +"%'"; 37 | if (!"default".equalsIgnoreCase(projectname)) { 38 | sql = "SELECT * FROM cases where is_deleted <> 1 and project_name = '" + projectname + "' and call_suff like '%" + callSuff +"%'"; 39 | } 40 | } else if ("default".equalsIgnoreCase(projectname)) { 41 | return; 42 | } 43 | sql = sql + " order by update_time desc"; 44 | PrintWriter out = response.getWriter(); 45 | //out.println("
id接口名称接用例场景描述接口请求方法接口请求地址ip以及端口接口方法名接口参数体
"); 46 | Connection connection = JDBCConnectionPool.getConnection(); 47 | Statement statement = null; 48 | ResultSet rs = null; 49 | try { 50 | statement = connection.createStatement(); 51 | //userID = 0 意味着所有的用户都可以看到并修改 52 | rs = statement.executeQuery(sql); 53 | out.println(" "); 54 | out.println(""); 55 | out.println(""); 56 | out.println(""); 57 | out.println(""); 58 | out.println(""); 59 | out.println(""); 60 | out.println(""); 61 | out.println(""); 62 | out.println(""); 63 | while (rs.next()) { 64 | out.println(""); 65 | out.println(""); 68 | out.println(""); 71 | out.println(""); 74 | out.println(""); 77 | // out.println(""); 80 | // out.println(""); 83 | out.println(""); 86 | out.println(""); 89 | out.println(""); 90 | //out.println(""); 93 | out.println(""); 94 | rownum++; 95 | } 96 | out.println("
用例id用例接口名称用例场景描述名称用例请求方法用例方法名称用例优先级操作/选择
"); 66 | out.println(rs.getString("id")); 67 | out.println(""); 69 | out.println(rs.getString("interface_name")); 70 | out.println(""); 72 | out.println(rs.getString("scenario")); 73 | out.println(""); 75 | out.println(rs.getString("method")); 76 | out.println(""); 78 | // out.println(rs.getString("expected_result")); 79 | // out.println(""); 81 | // out.println(rs.getString("actual_result")); 82 | // out.println(""); 84 | out.println(rs.getString("call_suff")); 85 | out.println(""); 87 | out.println(rs.getString("priority")); 88 | out.println("修改|"); 91 | //out.println(rs.getString("body")); 92 | //out.println("
"); 97 | } catch (SQLException se) { 98 | // 处理 JDBC 错误 99 | se.printStackTrace(); 100 | } catch (Exception e) { 101 | // 处理 Class.forName 错误 102 | e.printStackTrace(); 103 | } finally { 104 | out.flush(); 105 | out.close(); 106 | JDBCConnectionPool.close(rs, statement); 107 | } 108 | } 109 | 110 | } 111 | -------------------------------------------------------------------------------- /src/main/java/com/servlet/RunMuiltTest_new.java: -------------------------------------------------------------------------------- 1 | package com.servlet; 2 | 3 | import com.borderTest.BorderCheckUtil; 4 | import com.talk51.Utils.*; 5 | import net.sf.json.JSONObject; 6 | import okhttp3.Headers; 7 | import org.apache.commons.lang.StringEscapeUtils; 8 | 9 | import javax.servlet.ServletException; 10 | import javax.servlet.annotation.WebServlet; 11 | import javax.servlet.http.HttpServlet; 12 | import javax.servlet.http.HttpServletRequest; 13 | import javax.servlet.http.HttpServletResponse; 14 | import java.io.IOException; 15 | import java.io.PrintWriter; 16 | import java.net.URLDecoder; 17 | import java.sql.Connection; 18 | import java.sql.ResultSet; 19 | import java.sql.SQLException; 20 | import java.sql.Statement; 21 | import java.util.HashMap; 22 | 23 | /** 24 | * Servlet implementation class RunMuiltTest 25 | */ 26 | @WebServlet(name = "RunMuiltTest_new", value = "/runmuilttest_new") 27 | public class RunMuiltTest_new extends HttpServlet { 28 | 29 | protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 30 | String actual_result = null; 31 | String debug = null; 32 | response.setCharacterEncoding("utf-8"); 33 | response.setContentType("text/html;charset=utf-8"); 34 | String caseids = request.getParameter("preids"); 35 | String caseip = request.getParameter("another_ip"); 36 | String testurl = ""; 37 | PrintWriter out = response.getWriter(); 38 | String[] preidquery = caseids.split(","); 39 | Connection connection = JDBCConnectionPool.getConnection(); 40 | try { 41 | for (int i = 0; i < preidquery.length; i++) { 42 | Statement statement = connection.createStatement(); 43 | Statement statementbody = connection.createStatement(); 44 | String sql = "SELECT interface_name,host_ip,call_suff,body,scenario,method FROM cases where id = " + preidquery[i] + ""; 45 | String sqlgetbody = "SELECT parm_relation FROM cases_parm_relation where case_id = " + preidquery[i] + ""; 46 | ResultSet rs = statement.executeQuery(sql); 47 | ResultSet rsbody = statementbody.executeQuery(sqlgetbody); 48 | while (rs.next()) { 49 | HashMap dataparm = new HashMap(); 50 | out.println("第" + preidquery[i] + "条用例运行结果:
"); 51 | out.println("所请求接口名称:
"); 52 | String testname = rs.getString("interface_name"); 53 | out.println(testname); 54 | out.println("
"); 55 | out.println("所请求接口url和参数:
"); 56 | if (caseip.equals("none")) { 57 | testurl = rs.getString("host_ip") + rs.getString("call_suff"); 58 | } else { 59 | testurl = caseip + rs.getString("call_suff"); 60 | } 61 | String testbody = rs.getString("body"); 62 | out.println(testurl + "?" + testbody); 63 | out.println("
"); 64 | out.println("所请求接口参数值明细:
"); 65 | while (rsbody.next()) { 66 | String testbodybuff = URLDecoder.decode(rsbody.getString("parm_relation"), "UTF-8"); 67 | debug = testbodybuff; 68 | JSONObject temp = JSONObject.fromObject(testbodybuff); 69 | for (Object k : temp.keySet()) { 70 | Object v = temp.get(k); 71 | dataparm.put(k.toString(), StringTool.toStingHex(v.toString())); 72 | } 73 | } 74 | rsbody.close(); 75 | out.println(testbody); 76 | out.println("
"); 77 | out.println("所请求接口方法:
"); 78 | String method = rs.getString("method"); 79 | out.println(method); 80 | out.println("
"); 81 | 82 | for (String key : dataparm.keySet()) { 83 | if ("idgenerator".equalsIgnoreCase(dataparm.get(key))) { 84 | dataparm.put(key, GenTool.GetTimeGenId()); 85 | } 86 | } 87 | 88 | if (method.equals("get")) { 89 | actual_result = GetMethod_Old.sendGet(testurl, dataparm); 90 | } else if (method.equals("post")) { 91 | actual_result = PostMethod_Old.sendPost(testurl, dataparm); 92 | } else if (method.equals("post_body")) { 93 | Headers headers = Headers.of("Content-Type", "application/json;charset=utf-8"); 94 | actual_result = HttpUtils.sendPost(headers, testurl, rs.getString("body")); 95 | } else if (method.equals("post_return_json")) { 96 | actual_result = PostMethod_application_json_mulit.sendPost(testurl, dataparm); 97 | } else if (method.equals("put")) { 98 | actual_result = PutMethod_mulit.sendPut(testurl, dataparm); 99 | } else if (method.equals("delete")) { 100 | actual_result = HttpUtils.sendDelete(testurl, rs.getString("body")); 101 | } 102 | out.println("所执行测试场景:
"); 103 | String testscr = rs.getString("scenario"); 104 | out.println(testscr); 105 | out.println("
"); 106 | out.println("所得结果:
" + BorderCheckUtil.HTML_POINT_GREEN); 107 | out.println(BorderCheckUtil.toJson(actual_result)); 108 | out.println(BorderCheckUtil.HTML_POINT_SUFFIX + "
"); 109 | out.println("
"); 110 | } 111 | actual_result = StringEscapeUtils.escapeSql(actual_result); 112 | String updata_sql = "update cases set actual_result='" + actual_result + "' where id=" + preidquery[i] + ""; 113 | statement.executeUpdate(updata_sql); 114 | statement.close(); 115 | statementbody.close(); 116 | rs.close(); 117 | } 118 | out.flush(); 119 | } catch (SQLException se) { 120 | // 处理 JDBC 错误 121 | se.printStackTrace(); 122 | } catch (Exception e) { 123 | // 处理 Class.forName 错误 124 | e.printStackTrace(); 125 | } finally { 126 | out.close(); 127 | JDBCConnectionPool.closeConnection(); 128 | } 129 | } 130 | 131 | 132 | } 133 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | test.51talk.com 8 | PlatformForCase 9 | 1.0-SNAPSHOT 10 | war 11 | PlatformForCase Maven Webapp 12 | http://maven.apache.org 13 | 14 | 15 | 16 | 17 | commons-beanutils 18 | commons-beanutils 19 | 1.9.3 20 | 21 | 22 | 23 | org.apache.commons 24 | commons-collections4 25 | 4.1 26 | 27 | 28 | 29 | org.apache.commons 30 | commons-lang3 31 | 3.5 32 | 33 | 34 | 35 | commons-logging 36 | commons-logging 37 | 1.2 38 | 39 | 40 | 41 | net.sf.ezmorph 42 | ezmorph 43 | 1.0.6 44 | 45 | 46 | 47 | org.freemarker 48 | freemarker 49 | 2.3.20 50 | 51 | 52 | 53 | mysql 54 | mysql-connector-java 55 | 5.1.38 56 | 57 | 58 | 59 | com.squareup.okhttp3 60 | okhttp 61 | 3.10.0 62 | 63 | 64 | 65 | com.squareup.okio 66 | okio 67 | 1.14.0 68 | 69 | 70 | 71 | javax.servlet 72 | javax.servlet-api 73 | 3.1.0 74 | provided 75 | 76 | 77 | 78 | net.sf.json-lib 79 | json-lib 80 | 2.4 81 | jdk15 82 | 83 | 84 | 85 | com.alibaba 86 | druid 87 | 1.0.18 88 | 89 | 90 | 91 | 92 | junit 93 | junit 94 | 4.12 95 | test 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | redis.clients 120 | jedis 121 | 2.9.0 122 | 123 | 124 | 125 | com.google.code.gson 126 | gson 127 | 2.8.2 128 | 129 | 130 | 131 | 132 | 133 | 134 | PlatformForCase 135 | 136 | 137 | 138 | org.apache.tomcat.maven 139 | tomcat7-maven-plugin 140 | 2.2 141 | 142 | 8080 143 | /PlatformForCase 144 | 145 | 146 | 147 | 148 | 149 | 150 | org.apache.maven.plugins 151 | maven-compiler-plugin 152 | 153 | 1.8 154 | 1.8 155 | 156 | 157 | 158 | 159 | -------------------------------------------------------------------------------- /src/main/java/com/test/test1.java: -------------------------------------------------------------------------------- 1 | package com.test; 2 | 3 | import java.io.FileWriter; 4 | import java.io.IOException; 5 | import java.util.Arrays; 6 | 7 | public class test1 { 8 | public static void main(String[] args) { 9 | // arrangementSelect(new String[] { 10 | // "1", "2", "3", "4" 11 | // }, 2); 12 | // for (int i=1 ; i<10; i++) { 13 | // combinationSelect(new String[] { 14 | // "44294","38867","38868","350010071","48200","350010033","106499","43875","350000407","350010060","350010027","1786","4436","350000408","350010048","350010030","2111","1874","350010032","350000409","350000420","0","1719","3500897","2248","370001041","350000404","350010035","1836","350010031","3349","350000418","350010051","1592","2274","3500816","350000423","350010028","2841","1510","350000424","33611","34121","19238","350010005","2525" 15 | // }, i); 16 | // } 17 | combinationSelect(new String[]{ 18 | "236666","77","3500800","3500816","3500873","3500919","3500874","3500778","3500776","3500876","3500897","3500820","350000404","3500959","3500736","3500749","7079","87","3079","350000422","350000420","350000407","350000430","350000413","350000423","350000408","350000409","350000897","40719","5555","350000415","213","27713","20000","213923","8802","108001","108002","2229932","100","6666","108003","179000","3501033","350000411","350000412","350000424","350000414","350000417","350000373","1000","350000416","90","33567","89","350000475","350000476","350000468","350000434","350000473","2147483647","350000999","350000467","350000471","350000433","8899","404","44294","38867","38868","350010029","350010071","106499","43875","350010060","1786","18511","4436","350010095","370001043","350010028","370001041","48200","350010027","1874","1719","1592","19238","33289","350000429","370001039","350010096","36694","34269","35695","350010030","2525","3349","1510","350000418","2248","2274","350010074","2059","2841","3948","350010017","350010051","2213","350010104","2835","1836","2497","2111","48201","0","107127","798798","798799","34555","6677","2717","848960","1348960","1848960","998832","700761","998833","1200761","1700761","350010007","350010005","33640","2936","3094","2910","3819","4039","4123","4431","4492","4388","4260","4184","4183","3933","4046","3496","4222","3787","4192","3822","4113","4500","4189","4547","4495","4665","4259","4218","4628","3466","3863","3920","3971","24443344","72893984","834398944","9993434","34121","3784","4169","4161","4408","4491","4095","4020","4400","4445","4421","4454","4446","4401","350010008","350010702","3916","350010019","3892","350010023","4049","350010025","4023","350010026","4174","350010031","4120","350010034","350010035","4170","4173","350010040","3861","350010045","4085","4627","350010062","350010064","4617","350010067","4565","350010072","350010012","4675","350010078","350010079","4709","4684","350010081","4656","350010082","4616","4817","4861","4874","350010105","350010107","4909","4941","350010108","350010109","38174","4677","350010073","350010110","4655","4216","4680","4865","4757","4818","4755","4910","4904","350010112","4902","4893","4916","4997","4972","4242","41644","4711","4596","4613","350010111","4223","4652","4548","4911","4851","4550","350010129","4962","4890","4923","350010241","4574","4701","4687","43849","350010113","350010116","350010021","350010118","370001044","350010048","36397","38374","40206","350010024","350010011","1239115","889911","739115","1739115","90933603","97554788","80476629","98006082","816066","1316066","1816066","36399","350010033" 19 | }, 7); 20 | 21 | } 22 | 23 | /** 24 | * 排列选择(从列表中选择n个排列) 25 | * 26 | * @param dataList 待选列表 27 | * @param n 选择个数 28 | */ 29 | public static void arrangementSelect(String[] dataList, int n) { 30 | System.out.println(String.format("A(%d, %d) = %d", dataList.length, n, arrangement(dataList.length, n))); 31 | arrangementSelect(dataList, new String[n], 0); 32 | } 33 | 34 | /** 35 | * 排列选择 36 | * 37 | * @param dataList 待选列表 38 | * @param resultList 前面(resultIndex-1)个的排列结果 39 | * @param resultIndex 选择索引,从0开始 40 | */ 41 | private static void arrangementSelect(String[] dataList, String[] resultList, int resultIndex) { 42 | int resultLen = resultList.length; 43 | if (resultIndex >= resultLen) { // 全部选择完时,输出排列结果 44 | System.out.println(Arrays.asList(resultList)); 45 | return; 46 | } 47 | 48 | // 递归选择下一个 49 | for (int i = 0; i < dataList.length; i++) { 50 | // 判断待选项是否存在于排列结果中 51 | boolean exists = false; 52 | for (int j = 0; j < resultIndex; j++) { 53 | if (dataList[i].equals(resultList[j])) { 54 | exists = true; 55 | break; 56 | } 57 | } 58 | if (!exists) { // 排列结果不存在该项,才可选择 59 | resultList[resultIndex] = dataList[i]; 60 | arrangementSelect(dataList, resultList, resultIndex + 1); 61 | } 62 | } 63 | } 64 | 65 | /** 66 | * 组合选择(从列表中选择n个组合) 67 | * 68 | * @param dataList 待选列表 69 | * @param n 选择个数 70 | */ 71 | public static void combinationSelect(String[] dataList, int n) { 72 | // System.out.println(String.format("C(%d, %d) = %d", dataList.length, n, combination(dataList.length, n))); 73 | combinationSelect(dataList, 0, new String[n], 0); 74 | } 75 | 76 | /** 77 | * 组合选择 78 | * 79 | * @param dataList 待选列表 80 | * @param dataIndex 待选开始索引 81 | * @param resultList 前面(resultIndex-1)个的组合结果 82 | * @param resultIndex 选择索引,从0开始 83 | */ 84 | private static void combinationSelect(String[] dataList, int dataIndex, String[] resultList, int resultIndex) { 85 | int resultLen = resultList.length; 86 | int resultCount = resultIndex + 1; 87 | if (resultCount > resultLen) { // 全部选择完时,输出组合结果 88 | // System.out.println(Arrays.asList(resultList).toString().replaceAll("\\[","").replaceAll("]", "")); 89 | writeFile("E:\\auto_Java_Interface_zhaoyu\\tea_id.txt", Arrays.asList(resultList).toString().replaceAll("\\[", "").replaceAll("]", "").replaceAll(" ", "") + "\n"); 90 | return; 91 | } 92 | 93 | // 递归选择下一个 94 | for (int i = dataIndex; i < dataList.length + resultCount - resultLen; i++) { 95 | resultList[resultIndex] = dataList[i]; 96 | combinationSelect(dataList, i + 1, resultList, resultIndex + 1); 97 | } 98 | } 99 | 100 | /** 101 | * 计算阶乘数,即n! = n * (n-1) * ... * 2 * 1 102 | * 103 | * @param n 104 | * @return 105 | */ 106 | public static long factorial(int n) { 107 | return (n > 1) ? n * factorial(n - 1) : 1; 108 | } 109 | 110 | /** 111 | * 计算排列数,即A(n, m) = n!/(n-m)! 112 | * 113 | * @param n 114 | * @param m 115 | * @return 116 | */ 117 | public static long arrangement(int n, int m) { 118 | return (n >= m) ? factorial(n) / factorial(n - m) : 0; 119 | } 120 | 121 | /** 122 | * 计算组合数,即C(n, m) = n!/((n-m)! * m!) 123 | * 124 | * @param n 125 | * @param m 126 | * @return 127 | */ 128 | public static long combination(int n, int m) { 129 | return (n >= m) ? factorial(n) / factorial(n - m) / factorial(m) : 0; 130 | } 131 | 132 | /** 133 | * 追加文件:使用FileWriter 134 | * 135 | * @param fileName 136 | * @param content 137 | */ 138 | public static void writeFile(String fileName, String content) { 139 | try { 140 | // 打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件 141 | FileWriter writer = new FileWriter(fileName, true); 142 | writer.write(content); 143 | writer.close(); 144 | } catch (IOException e) { 145 | e.printStackTrace(); 146 | } 147 | } 148 | } 149 | -------------------------------------------------------------------------------- /src/main/webapp/UpdataCase/UpdataStep1.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=UTF-8" 2 | pageEncoding="UTF-8" 3 | 4 | import="java.sql.*" 5 | import="com.talk51.Utils.JDBCConnectionPool" 6 | 7 | %> 8 | 9 | 10 | 11 | 12 | 13 | 14 | 修改测试用例 15 | <% 16 | request.setCharacterEncoding("UTF-8"); 17 | int user_id = 0; 18 | if (session.getAttribute("userid") == null) { 19 | %> 20 | 23 | <% 24 | response.sendRedirect("../index.html"); 25 | return; 26 | } else { 27 | Object O = session.getAttribute("userid"); 28 | user_id = Integer.parseInt(O == null ? "" : O.toString()); 29 | } 30 | 31 | %> 32 | 33 | 34 |
35 | 请选择测试用例所属模块
36 | 选择模块:

52 |
53 |
54 | 优先级 55 | 62 | call_suff like: 63 | 64 |
65 |
66 | 请选择模块 67 |
68 |
69 | 70 | 71 | 72 | 73 | 74 | 75 |
76 |
77 | 输入用例ids,逗号隔开,可以跨模块 : 78 | 79 |
80 | 如果需要在用例保存之外的环境运行用例,请选择
81 | 已有环境: 98 | 或者手动输入IP : 99 |
100 |
101 |
102 |
103 | 104 |
105 | 106 |

107 | <------------------下面主要是为了简单格式的一键边界测试使用---------------------> 108 |

109 |
110 | 请选择目标接口的请求方法
111 | Get 112 | Post 113 | Post_Json 114 | Post_Return_Json 115 | Put 116 | Delete 117 |
118 |
119 | URL: 120 |
121 |
122 |
123 | 请求内容(如果是get请求可以直接将请求黏贴到这里)
124 |
125 |
126 |
127 | 128 | 129 |
130 | 131 | 132 | 327 | -------------------------------------------------------------------------------- /src/main/java/com/borderTest/BorderCheckUtil.java: -------------------------------------------------------------------------------- 1 | package com.borderTest; 2 | 3 | import com.google.gson.*; 4 | import com.talk51.Utils.HttpMethodFactory; 5 | import org.apache.commons.lang.StringUtils; 6 | 7 | import java.io.UnsupportedEncodingException; 8 | import java.net.URLDecoder; 9 | import java.text.SimpleDateFormat; 10 | import java.util.*; 11 | import java.util.regex.Pattern; 12 | 13 | /** 14 | * 边界测试的调用工具类 15 | */ 16 | public class BorderCheckUtil { 17 | 18 | /** 19 | * 私有的常量 20 | */ 21 | private final static String PAGE = "page"; 22 | private final static String SUCCESS_FLAG = "\"10000\""; 23 | private final static int PARAM_TOO_LONG_100 = 100; 24 | private final static int PARAM_TOO_LONG_300 = 300; 25 | private final static int PARAM_TOO_LONG_600 = 600; 26 | private final static String HTML_INTERVAL_2BR = "

"; 27 | private final static int RESULT_TOO_LONG_2000 = 2000; 28 | 29 | /** 30 | * 共有常量 31 | */ 32 | public final static String HTML_RESULT = ""; 33 | public final static String HTML_RESULT_SUFFIX = ""; 34 | public final static String HTML_POINT_RED = ""; 35 | public final static String HTML_POINT_GREEN = ""; 36 | public final static String HTML_POINT_SUFFIX = ""; 37 | 38 | // 为了JSON内字符串的替换 39 | public final static String HTML_POINT_SUFFIX_4JSON = "<\\/font><\\/span>"; 40 | 41 | // 空字符串的提示 42 | public final static String HTML_EMPTY = "实际输入为空!"; 43 | public final static String HTML_POINT_EMPTY = HTML_POINT_RED + HTML_EMPTY + HTML_POINT_SUFFIX; 44 | 45 | // key和value都不传的提示,目前只针对Json格式参数,其它都是打印结果集时替换的。 46 | public final static String HTML_NO_KEY_NO_VALUE = "不传!"; 47 | 48 | // 用于随机取颜色 49 | public final static String[] COLORS = {"red", "Blue", "Green"}; 50 | 51 | // 执行时间超过0.5秒要标红提示 52 | public final static double EXECUTE_TIME_LONG = 0.5; 53 | 54 | /** 55 | * 一键边界测试 56 | */ 57 | public static String sendCheck(String method, String url, String bodyinfo) throws UnsupportedEncodingException { 58 | // 采用循环的方法,1,参数的个数在外循环,2,内循环是每个参数的变化,3,最后将变化的参数拼装回来 59 | // 参数前台已经转码过,所以不包含非法& = 等字符。 60 | 61 | // 用于收集所有返回的不同的响应"code":"10000" 62 | LinkedHashSet errorResultList = new LinkedHashSet<>(); 63 | 64 | // 每一个请求输出结果 65 | StringBuilder resultSb = new StringBuilder(); 66 | // 打印开始结束时间 67 | SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 68 | String beginTime = df.format(new Date()); 69 | // 各种错误返回,剔除重复的。 70 | StringBuilder errorResultSb = new StringBuilder(); 71 | // 如果遇到http访问异常,参数的信息。 72 | StringBuilder exceptionResultSb = new StringBuilder(); 73 | 74 | // 如果遇到超长的异常信息如SQL异常,生成异常提示集合避免重复导致字段过长页面显示失败 75 | TreeMap tooLongResultMap = new TreeMap<>(); 76 | int tooLongResultCount = 0; 77 | 78 | String params[] = bodyinfo.split("&"); 79 | int correctParamsCount = params.length; 80 | int realParamsCount = 0; 81 | int testCount = 0; 82 | for (String paramPair : params) { 83 | 84 | // 参数值获取 85 | if (paramPair.split("=").length < 2) { 86 | paramPair = "JsonBodyInfo=" + paramPair; 87 | } 88 | String key = paramPair.split("=")[0]; 89 | String value = getParamValue(paramPair); 90 | try { 91 | BorderParam borderParam = getBorderParamType(paramPair, key, value, BorderParam.LONG_PARAM_NEED_CHECK); 92 | 93 | // 测试了多少个参数(由于肯定会走到这里,这个计数仅用作结果展示) 94 | realParamsCount++; 95 | // 对于每一个参数都有很多种边界测试 96 | for (String paramPairFix : borderParam.getParamList()) { 97 | // 测试了多少次 98 | testCount++; 99 | // paramPairFix 是包含html格式的,用于结果页html展示所用。 100 | // paramPairFixClear 是真正替换原有参数值,去掉了html格式,参与http请求的。 101 | String paramPairFixClear = clearFixValue(paramPairFix); 102 | // 替换 103 | String bodyinfoFix = ""; 104 | if ("post_Json".equalsIgnoreCase(method)) { 105 | bodyinfoFix = getParamValue(paramPairFixClear); 106 | } else { 107 | if (bodyinfo.endsWith(paramPair)) { 108 | if (bodyinfoFix.contains("&")) { 109 | bodyinfoFix = bodyinfo.replace("&" + paramPair, "&" + paramPairFixClear); 110 | } else {// 对于单个参数不带&符号的处理 111 | bodyinfoFix = bodyinfo.replace(paramPair, paramPairFixClear); 112 | } 113 | } else { 114 | bodyinfoFix = bodyinfo.replace(paramPair + "&", paramPairFixClear + "&"); 115 | } 116 | } 117 | // 输出结果(非Json格式) 118 | String resultAndTime = HttpMethodFactory.getResultWithTime(method, url, bodyinfoFix); 119 | String noJsonResult = HttpMethodFactory.getResultData(resultAndTime); 120 | 121 | String result = toJson(noJsonResult); 122 | if (!noJsonResult.contains(SUCCESS_FLAG)) { 123 | // 对超长的不得不显示的异常提示的处理 124 | if (noJsonResult.length() > RESULT_TOO_LONG_2000) { 125 | if (tooLongResultMap.containsKey(result)) { 126 | result = "" + tooLongResultMap.get(result) + ""; 127 | } else { 128 | String tooLongResultSingle = "返回超长已做唯一化,请点击链接查看:" + tooLongResultCount++; 129 | tooLongResultMap.put(result, tooLongResultSingle); 130 | result = "" + tooLongResultSingle + ""; 131 | } 132 | } 133 | // 不同错误结果的响应 134 | if (!errorResultList.contains(getKeyContent(noJsonResult))) { 135 | errorResultSb.append(noJsonResult).append("
"); 136 | errorResultList.add(getKeyContent(noJsonResult)); 137 | } 138 | } 139 | 140 | // 输出执行时间(超过限定时间标红) 141 | resultSb.append(HttpMethodFactory.getResultTime(resultAndTime)); 142 | 143 | // 返回给前台时需要解码 144 | String keyDecode = URLDecoder.decode(key, "UTF-8"); 145 | String valueFix = getParamValue(paramPairFix); 146 | String paramPairFixDecode = URLDecoder.decode(paramPairFix, "UTF-8"); 147 | // 定制一些特殊的返回值,返回值没有做太多的定制,因为直接返回key-value就很好 148 | if (paramPairFix.equals(HTML_POINT_EMPTY)) { 149 | resultSb.append(keyDecode).append(":不传"); 150 | } else if (valueFix.isEmpty()) { 151 | resultSb.append(paramPairFix + ":传空值"); 152 | } else if (!valueFix.contains("%2C") && !valueFix.contains("}") && valueFix.length() > PARAM_TOO_LONG_100 && valueFix.length() < PARAM_TOO_LONG_300) { 153 | resultSb.append(keyDecode + ":参数大于100字符小于300字符"); 154 | } else if (!valueFix.contains("%2C") && !valueFix.contains("}") && valueFix.length() > PARAM_TOO_LONG_300) { 155 | resultSb.append(keyDecode).append(":参数大于300字符"); 156 | } else { 157 | resultSb.append(paramPairFixDecode); 158 | } 159 | // 非正确的返回标记高识别颜色 160 | if (!result.contains(SUCCESS_FLAG)) { 161 | resultSb.append("
" + HTML_RESULT).append(result).append(HTML_RESULT_SUFFIX + HTML_INTERVAL_2BR); 162 | } else { 163 | resultSb.append("
" + HTML_POINT_GREEN).append(result).append(HTML_POINT_SUFFIX + HTML_INTERVAL_2BR); 164 | } 165 | } 166 | } catch (Exception e) { 167 | e.printStackTrace(); 168 | exceptionResultSb.append(key + "
"); 169 | continue; 170 | } 171 | } 172 | String endTime = df.format(new Date()); 173 | // 拼接结果 174 | String resultSbStr = resultSb.toString().replace("<\\/font>", "
"); 175 | 176 | String returnValue = "参数的个数: " + correctParamsCount + "
" + 177 | "边界测试的参数个数: " + realParamsCount + "
" + 178 | "运行时异常:" + (exceptionResultSb.toString().isEmpty() ? "<无>
" : HTML_POINT_RED + exceptionResultSb + HTML_POINT_SUFFIX) + 179 | "边界测试用例个数: " + testCount + "
" + 180 | "边界测试开始时间:" + beginTime + "
" + 181 | "边界测试结束时间:" + endTime + "
" + 182 | "边界测试提示集合(个):" + errorResultList.size() + "
" + errorResultSb.toString() + 183 | "边界测试详细:
" + resultSbStr; 184 | 185 | if (tooLongResultMap.size() > 0) { 186 | String tooLongResult = ""; 187 | for (String key : tooLongResultMap.keySet()) { 188 | tooLongResult += HTML_INTERVAL_2BR + HTML_POINT_RED + "" + 189 | tooLongResultMap.get(key) + "" + HTML_POINT_SUFFIX + 190 | HTML_INTERVAL_2BR + HTML_RESULT + key + HTML_RESULT_SUFFIX; 191 | } 192 | return returnValue + tooLongResult; 193 | } 194 | return returnValue; 195 | 196 | } 197 | 198 | /** 199 | * 获取一键参数化的各种实现类 200 | * 201 | * @param paramPair key=value 组成的字符串 202 | * @param key 参数的key 203 | * @param value 参数的值 204 | * @param flag 是否需要超长参数的校验 205 | */ 206 | public static BorderParam getBorderParamType(String paramPair, String key, String value, int flag) { 207 | // 整数类型 208 | Pattern patternInteger = Pattern.compile("^[-\\+]?[\\d]*$"); 209 | // YYYY-MM-DD 类型 210 | Pattern patternDateYY = Pattern.compile("^(\\d{4})-(\\d{2})-(\\d{2})$"); 211 | // YYYY-MM-DD HH:mm:ss 类型 212 | Pattern patternDateHH = Pattern.compile("^(\\d{4})-(\\d{2})-(\\d{2})%20(\\d{2})%3A(\\d{2})%3A(\\d{2})$"); 213 | 214 | BorderParam returnValue; 215 | 216 | if (key.equalsIgnoreCase("page_no")) { //page_no的校验 217 | returnValue = new PageNoBorderParam(paramPair, key, value); 218 | } else if (key.equalsIgnoreCase("page_size")) { //page_size的校验 219 | returnValue = new PageSizeBorderParam(paramPair, key, value); 220 | } else if (patternInteger.matcher(value).matches()) {// 整数类型判断 221 | returnValue = new IntegerBorderParam(paramPair, key, value); 222 | } else if (patternDateYY.matcher(value).matches()) {// YYYY-MM-DD 类型判断 223 | returnValue = new DateYYBorderParam(paramPair, key, value); 224 | } else if (patternDateHH.matcher(value).matches()) {// YYYY-MM-DD HH:mm:ss 类型判断 225 | returnValue = new DateHHBorderParam(paramPair, key, value); 226 | } else if (value.contains("%7D") || value.contains("}")) { //带}的JSON类型参数校验 227 | returnValue = new JSONBorderParam(paramPair, key, value); 228 | } else if (value.contains("%2C") || value.contains(",")) { //带英文逗号分隔的参数校验 229 | returnValue = new MultiBorderParam(paramPair, key, value); 230 | } else if (value.contains(".") || value.contains("2E")) { //小数的参数校验 231 | returnValue = new DecimalBorderParam(paramPair, key, value); 232 | } else { 233 | returnValue = new BorderParam(paramPair, key, value); 234 | } 235 | //当前只是一个flag,未来可以将flag类型变化为map,便于拓展。 236 | returnValue.setNeedLongCheck(flag); 237 | return returnValue; 238 | } 239 | 240 | /** 241 | * 取其中的value,便于被递归使用。 242 | * 243 | * @param paramPair key=value,value中没有=。 244 | * @return value 245 | */ 246 | public static String getParamValue(String paramPair) { 247 | if (HTML_POINT_EMPTY.equalsIgnoreCase(paramPair)) {// 对key和value都不传的情况做判断 248 | return HTML_NO_KEY_NO_VALUE; 249 | } else if (StringUtils.isEmpty(paramPair) 250 | || !paramPair.contains("=") 251 | || paramPair.split("=").length == 1) { 252 | return ""; 253 | } else { 254 | String key = paramPair.split("=")[0]; 255 | String returnValue = paramPair.replace(key + "=", ""); 256 | return returnValue; 257 | } 258 | } 259 | 260 | /** 261 | * 消除自定义的Html格式信息 262 | * 263 | * @param valueBeforeFix 修复之前的 264 | * @return 无自定义Html格式字符串 265 | */ 266 | public static String clearFixValue(String valueBeforeFix) { 267 | String valueFix = valueBeforeFix 268 | // 处理空值 269 | .replace(HTML_RESULT, "") 270 | .replace(HTML_RESULT_SUFFIX, "") 271 | .replace(HTML_POINT_RED, "") 272 | .replace("", "") 273 | .replace("", "") 274 | // JSON格式会将\转换成\/,所以多几个步骤 275 | .replace("<\\/font>", "") 276 | .replace("<\\/span>", "") 277 | .replace(HTML_EMPTY, ""); 278 | return valueFix; 279 | } 280 | 281 | /** 282 | * 将数据Json格式化 283 | * 284 | * @param noJsonResult 无格式字符串 285 | * @return json format result 286 | */ 287 | public static String toJson(String noJsonResult) { 288 | String result; 289 | try { 290 | Gson gson = new GsonBuilder().setPrettyPrinting().create(); 291 | JsonParser jp = new JsonParser(); 292 | JsonElement jsonElement = jp.parse(noJsonResult); 293 | sort(jsonElement); 294 | result = gson.toJson(jsonElement); 295 | } catch (JsonSyntaxException e) { 296 | // e.printStackTrace(); 297 | result = noJsonResult; 298 | } 299 | return result; 300 | } 301 | 302 | /** 303 | * 从Json格式的返回值中,提取仅包含code 和 message 的返回值内容,用于比对的key值。 304 | * @param noJsonResult 305 | * @return 306 | */ 307 | public static String getKeyContent(String noJsonResult){ 308 | String result; 309 | try { 310 | JsonParser jp = new JsonParser(); 311 | JsonElement jsonElement = jp.parse(noJsonResult); 312 | String code = String.valueOf(((JsonObject) jsonElement).get("code")); 313 | String message = String.valueOf(((JsonObject) jsonElement).get("message")); 314 | result = code + message; 315 | } catch (JsonSyntaxException e) { 316 | // e.printStackTrace(); 317 | result = noJsonResult; 318 | } 319 | return result; 320 | } 321 | 322 | /** 323 | * 返回执行时间,带有HTML标红格式 324 | */ 325 | public static String getExecuteTime(long start) { 326 | double executeTime = (System.nanoTime() - start) * 0.000000001; 327 | String executeTime4Show = String.format("%.4f", executeTime); 328 | if (executeTime > EXECUTE_TIME_LONG) { 329 | return "执行时间:" + HTML_POINT_RED + executeTime4Show + "秒" + HTML_POINT_SUFFIX + "
"; 330 | } 331 | return "执行时间:" + executeTime4Show + "秒
"; 332 | } 333 | 334 | public static void main(String[] args) { 335 | 336 | // System.out.println("class_info=[{\"src_class_id\":80349718,\"tar_class_id\":80350002,\"tar_class_room_id\":187202},{\"src_class_id\":80349789,\"tar_class_id\":80350073}]&stu_id=606492200&admin_id=1234444&reason=zyTest001&appkey=om_backend×tamp=1517797971" 337 | // .replace("class_info=[{\"src_class_id\":80349718,\"tar_class_id\":80350002,\"tar_class_room_id\":187202},{\"src_class_id\":80349789,\"tar_class_id\":80350073}]&", 338 | // "class_info=[{\"src_class_id\":\"80349718.1\",\"tar_class_id\":80350002,\"tar_class_room_id\":187202},{\"src_class_id\":80349789,\"tar_class_id\":80350073}]&")); 339 | 340 | String Json = "{\"timestamp\":1547461405660,\"message\":\"相同教材关联下的排序值已存在,不允许重复\",\"trace\":\"e5ef55b69a1e\",\"code\":\"20137\"}"; 341 | String result; 342 | try { 343 | Gson gson = new GsonBuilder().setPrettyPrinting().create(); 344 | JsonParser jp = new JsonParser(); 345 | JsonElement jsonElement = jp.parse(Json); 346 | // sort(jsonElement); 347 | // result = gson.toJson(jsonElement); 348 | ((JsonObject) jsonElement).get("trace"); 349 | } catch (JsonSyntaxException e) { 350 | e.printStackTrace(); 351 | result = Json; 352 | } 353 | System.out.println(); 354 | 355 | 356 | } 357 | 358 | /** 359 | * 将Json中的内容排序的方法 360 | */ 361 | private static Comparator getComparator() { 362 | Comparator c = new Comparator() { 363 | public int compare(String o1, String o2) { 364 | return o1.compareTo(o2); 365 | } 366 | }; 367 | return c; 368 | } 369 | 370 | /** 371 | * 将Json中的内容排序的方法 372 | */ 373 | public static void sort(JsonElement e) { 374 | if (e.isJsonNull()) { 375 | return; 376 | } 377 | 378 | if (e.isJsonPrimitive()) { 379 | return; 380 | } 381 | 382 | if (e.isJsonArray()) { 383 | JsonArray a = e.getAsJsonArray(); 384 | for (Iterator it = a.iterator(); it.hasNext(); ) { 385 | sort(it.next()); 386 | } 387 | return; 388 | } 389 | 390 | if (e.isJsonObject()) { 391 | Map tm = new TreeMap(getComparator()); 392 | for (Map.Entry en : e.getAsJsonObject().entrySet()) { 393 | tm.put(en.getKey(), en.getValue()); 394 | } 395 | 396 | for (Map.Entry en : tm.entrySet()) { 397 | e.getAsJsonObject().remove(en.getKey()); 398 | e.getAsJsonObject().add(en.getKey(), en.getValue()); 399 | sort(en.getValue()); 400 | } 401 | return; 402 | } 403 | } 404 | 405 | 406 | 407 | } 408 | -------------------------------------------------------------------------------- /src/main/webapp/AddCase/Step1.jsp: -------------------------------------------------------------------------------- 1 | <%@ page language="java" contentType="text/html; charset=UTF-8" 2 | pageEncoding="UTF-8" 3 | 4 | import="java.sql.*" 5 | import="java.util.*" 6 | import="java.io.*" 7 | import="com.talk51.Utils.JDBCConnectionPool" 8 | %> 9 | 10 | 11 | 12 | 13 | 14 | 添加测试用例 15 | <% 16 | request.setCharacterEncoding("UTF-8"); 17 | 18 | %> 19 | 20 | 21 |
22 |
23 |

第一步,请输入要添加测试用例所属的模块,如果模块存在,也可以直接添加(特殊限制:模块名称中不要包含:英文冒号字符)
24 | 注:如果模块不存在,当提交之后会自动添加至系统,添加后刷新即可在已有模块中看到


25 | 模块名称: 26 | 已有模块:
42 |
43 |
44 |

第二步,请输入要添加测试用例的目标接口,如果模块中该存在,也可以直接添加


45 | 接口名称: 46 | 接口方法: 47 | 168 |
已有接口:

171 | 306 |
307 |
308 |

第三步,请添加该接口所需要的参数名,以及参数值,第一个输入框请输入参数名,第二个为参数值。
如果参数类型为整形或浮点型,可随机生成,请在第三个框中输入随机整数位数,在第四个框中输入随机小数位数
后三个按钮为参数传递概率,第一个按钮为0%,表示该参数必定不传,第二个按钮为50%,表示该参数有50%会不传,第三个为100%,表示该参数必传

309 | 310 | 311 |
312 |
313 |
314 |

第四步,请选择目标接口部署的环境地址以及端口号


315 | 已有环境: 330 |
331 |
332 |
333 | 第五步,请选择目标接口的请求方法
334 | Get 335 | Post 336 | Post_Body 337 | Post_Return_Json 338 | Put 339 | Delete 340 |
341 |
342 | 第六步,请选择测试用例的优先级
343 | 1:第一次冒烟测试和回归测试时需要执行
344 | 2:效验接口参数合法性
345 | 3:自定义
346 | 10:人工执行,比较实际结果和预期结果
347 |
348 |
349 |
350 |
351 | 第七步,请输入预期结果,并选择该接口是否有缓存
352 | 353 | 354 |
355 |
356 | 是否有缓存 357 |
358 |
359 | 第八步,请输入测试用例描述
360 |
361 |
362 |
363 | 第九步,提交该用例、立即执行或生成junit测试类代码
364 | 365 | 366 | 367 |
368 | 837 |
838 |
839 |
840 |
841 |
842 | 843 |
844 | 845 | --------------------------------------------------------------------------------