自动化测试代码的自动生成
2015-06-30 10:36
399 查看
自动化测试代码的自动生成
一、界面展示
我们来看看可视化的代码自动化生成界面设计,二、字段用途解释
选择目标测试类指: 需要生成代码所要依据的接口类名称。
备注: 这个是使用的文件上传,自动载入接口类名。
本地的测试工程
指:需要生成代码的路径地址。
备注: 默认是生成在项目空间的java代码资源路径。
脚本使用的模板
指: 自动生成的脚本的代码所使用的模板样式。
备注: 一般是会根据正常场景和异常场景进行区分。
脚本使用的名称
指: 这个是代码生成后的一个名称(类名)
备注:类名称_检查点描述_用例的类型
新建的脚本类型:
指: 正常测试还是异常测试。
备注: 这个是和模板配合使用的。
脚本使用的编号
指: 脚本测试数据的编号
备注: 用于在执行的时候区分用例。
脚本描述
指: 脚本的描述,测试检查点,业务描述等。
参数列表
指: 根据类进行联动生成的。
三、代码展示
代码(0)@RequestMapping(value = "/genScript.form", method = RequestMethod.POST) public ModelAndView genScript(HttpServletRequest request) { String className = request.getParameter("oClass"); String oProject = request.getParameter("oProject"); String oTemplet = request.getParameter("oTemplet"); String oMethodName = request.getParameter("oMethodName"); String oType = request.getParameter("oType"); String oNo = request.getParameter("oNo"); String oDesc = request.getParameter("oDesc"); String oNumber = request.getParameter("oNumber"); String oParaList = request.getParameter("oParaList"); Boolean oBoolean = new TestCaseCGenerator().genScript(mav, className, oProject, oTemplet, oType, oNo, oDesc, oNumber, oParaList,oMethodName); oSharedDateUtil.shareDate(doMapper, user, cj_awardsDO, mav); //设置跳转页面 mav.addObject("jspContent", "res.jsp"); mav.addObject("result", oBoolean); //添加页面标题 mav.addObject("title", "首-页"); //页面业务处理--单独的方法处理 return mav; }
代码(1)
/** * * 方法名称:genScript * 方法描述: * 参数列表:@param mav * 参数列表:@param className * 参数列表:@param oProject * 参数列表:@param tempter * 参数列表:@param oType * 参数列表:@param oNo * 参数列表:@param oDesc * 参数列表:@param oNumber * 参数列表:@param paramas * 参数列表:@param oMethodName * 参数列表:@return * 返 回 值:Boolean * 创 建 人: * 创建时间:2015年6月29日 下午4:10:54 * 修 改 人: * 修改时间:2015年6月29日 下午4:10:54 * 修改备注: * @version * @throws * */ public Boolean genScript(ModelAndView mav, String className, String oProject, String tempter, String oType, String oNo, String oDesc, String oNumber, String paramas, String oMethodName) { VelocityEngine ve = new VelocityEngine(); ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath"); ve.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName()); ve.setProperty(RuntimeConstants.INPUT_ENCODING, "utf-8"); // 输入编码格式设置 ve.setProperty(RuntimeConstants.OUTPUT_ENCODING, "utf-8"); // 输出编码格式设置 ve.init(); Template actionTpt = ve.getTemplate(tempter); Template csv = ve.getTemplate("csv.vm"); VelocityContext ctx = new VelocityContext(); String[] oCls = className.split(":"); String str = oCls[1]; String str1 = lowToUpperCase(str); String oName = str1 + "_" + oCls[0] + "_" + oMethodName + "_" + oType; mav.addObject("name", oName); String tcDir = str1 + "_" + oCls[0]; ctx.put("classNameUpCase", tcDir); ctx.put("oDesc", oDesc); ctx.put("oNo", oNo); ctx.put("subId", oCls[0]); String oTcMethodName = oCls[1] + "_" + oMethodName; ctx.put("classNameLowCase", oTcMethodName); ctx.put("methodParamsName", paramas); String[] arr = paramas.split(","); ArrayList<String> newArr = new ArrayList<String>(); for (int i = 0; i < arr.length; i++) { if ( !StringUtils.equals(arr[i], "user_token")) { newArr.add(arr[i]); } } String csvParamsList = ""; String methodParamsList = ""; if (!newArr.isEmpty()) { String st = newArr.toString(); String oParamas = (String) st.subSequence(1, (st.length()) - 1); methodParamsList = " ,String " + oParamas.replace(",", ",String "); csvParamsList=" , "+oParamas; } ctx.put("csvParamsList", csvParamsList); ctx.put("methodParamsList", methodParamsList); ctx.put("testCaseDesc", oDesc); ctx.put("oMethodName", oMethodName); ctx.put("oType", oType); return excue(mav, actionTpt, csv, ctx, oType, oProject, oMethodName, tcDir, oTcMethodName); }
代码(二)
/** * * 方法名称:excue * 方法描述: * 参数列表:@param mav * 参数列表:@param actionTpt * 参数列表:@param csv * 参数列表:@param ctx * 参数列表:@param oNormal * 参数列表:@param oProject * 参数列表:@param oMethodName * 参数列表:@param tcDir * 参数列表:@param oTcMethodName * 参数列表:@return * 返 回 值:boolean * 创 建 人: * 创建时间:2015年6月29日 下午4:11:24 * 修 改 人: * 修改时间:2015年6月29日 下午4:11:24 * 修改备注: * @version * @throws * */ private static boolean excue(ModelAndView mav, Template actionTpt, Template csv, VelocityContext ctx, String oNormal, String oProject, String oMethodName, String tcDir, String oTcMethodName) { Boolean flag = false; String csvPath = oProject + "\\src\\main\\resources\\TestCase-Data\\" + tcDir + "_" + oMethodName + "\\" + oNormal; createDir(csvPath); csvPath = csvPath + "/" + oTcMethodName + ".csv"; String javaPath = oProject + "\\src\\main\\java\\com\\homs\\ats\\TestSctipts\\" + tcDir + "\\"; createDir(javaPath); javaPath = javaPath + "/" + tcDir + "_" + oMethodName + "_" + oNormal + ".java"; boolean b1 = merge(csv, ctx, csvPath); boolean b2 = merge(actionTpt, ctx, javaPath); if (b1 & b2) { flag = true; } mav.addObject("javaPath", javaPath); mav.addObject("csvPath", csvPath); return flag; }
代码(三)
/** * * 方法名称:lowToUpperCase * 方法描述: 首字母大写 * 参数列表:@param str * 参数列表:@return * 返 回 值:String * 创 建 人:ligang13009 * 创建时间:2015年6月29日 下午4:11:38 * 修 改 人:ligang13009 * 修改时间:2015年6月29日 下午4:11:38 * 修改备注: * @version * @throws * */ private static String lowToUpperCase(String str) { return str.replaceFirst(str.substring(0, 1), str.substring(0, 1) .toUpperCase()); } private static Boolean merge(Template template, VelocityContext ctx, String path) { PrintWriter writer = null; Boolean flag = false; try { writer = new PrintWriter(path); template.merge(ctx, writer); writer.flush(); flag = true; } catch (FileNotFoundException e) { e.printStackTrace(); } finally { writer.close(); } return flag; } private static void createDir(String path) { File file = new File(path); //如果文件夹不存在则创建 if (!file.exists() && !file.isDirectory()) { file.mkdirs(); } }
四、模板
模板(JAVA)模板(CSV)
相关文章推荐
- JAVA File的创建及相对路径绝对路径
- 【java0008】多线程卖票(二)
- Python 多线程分块读文件
- C++ set
- 关于matlab中regionprops及BoundingBox用法,mark一下
- 【MyEclipse 2015】 逆向破解实录系列【1】(纯研究)
- web爬虫之登录google paly 商店
- python: 目录操作
- Java 基础 2015_6_30
- php获取真正的IP地址
- Java生成MD5加密字符串代码实例
- Java中equals方法和“==”的比较
- 并行计算基础&编程模型与工具
- WebService(2)-XML系列之Java和Xml之间相互转换
- Spring MVC-HandlerAdapter
- Java程序设计——第十六周周五:数据库的连接与随机数使用
- C++ MFC 中使用多线程操作实例
- Eclipse SVN冲突解决
- Java数据导出功能之导出Excel文件实例
- C#调用C++方法,C#使用c++方法返回类或结构体。