自动化测试代码的自动生成

自动化测试代码的自动生成


一、界面展示

我们来看看可视化的代码自动化生成界面设计,

自动化测试脚本自动生成页面


二、字段用途解释

  • 选择目标测试类

    指: 需要生成代码所要依据的接口类名称。

    备注: 这个是使用的文件上传,自动载入接口类名。

  • 本地的测试工程

    指:需要生成代码的路径地址。

    备注: 默认是生成在项目空间的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)
    模板JAVA

  • 模板(CSV)

    模板CSV

猜你喜欢

转载自blog.csdn.net/Spark2008/article/details/46692007