替换模板变量生成测试用例

需求:

针对指标的查值有固定的文法例如 ${org_name}的业务量是多少,需要替换变量来生成测试用例

这个是最新的,把变量和列表放到map里面

package net.yto.com.testplatform;

import com.alibaba.fastjson.JSON;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class TestMain {
    public static void main(String[] args) {
        TestMain testMain = new TestMain();
        List<String> templates = new ArrayList<>();
        templates.add("${org_name}的业务量是多少?");//2
        templates.add("${time}${org_name}的业务量是多少");//2*3=6
        templates.add("${time}${org_name}${max}的业务量是多少");//2*3*2=12
        List<String> orgnameList = new ArrayList<>();
        orgnameList.add("北京");
        orgnameList.add("上海");
        List<String> timeList = new ArrayList<>();
        timeList.add("昨天");
        timeList.add("今天");
        timeList.add("今年");
        List<String> maxList = new ArrayList<>();
        maxList.add("最大");
        maxList.add("前三");

        Map<String,List<String>> param_datas = new HashMap<>();
        param_datas.put("${org_name}",orgnameList);
        param_datas.put("${max}",maxList);
        param_datas.put("${time}",timeList);
        List<String> resultList = new ArrayList<>();
        for (String template : templates) {
            testMain.makeData(template, resultList, param_datas);
        }
        System.out.println(resultList.size());
        System.out.println(JSON.toJSONString(resultList, true));

    }

    /** 根据模板和变量值列表
     * @param template    模板
     * @param testList    生成的用例集合
     */
    public void makeData(String template, List<String> testList, Map<String,List<String>> param_datas) {
        //递归终止条件:
        if (!template.contains("$")) {
            return;
        }
        for (Map.Entry<String,List<String>> entry:param_datas.entrySet()){
            String key = entry.getKey();
            List<String> value = entry.getValue();
            //替换org_name
            if (template.contains(key)) {
                List<String> casesList = makeCases(template, key, value);
                for (String case1 : casesList) {
                    if (case1.contains("$")) {
                        makeData(case1.replace(key, ""), testList, param_datas);
                    } else {
                        testList.add(case1);
                    }
                }
                break;
            }
        }

    }

    /**
     * 具体生成用例方法,实际可以根据指标对应的组织来生成
     *
     * @param template      模板
     * @param param         变量
     * @param paramDataList 变量的值列表
     * @return
     */
    public List<String> makeCases(String template, String param, List<String> paramDataList) {
        List<String> casesList = new ArrayList<>();
        String temp = template;
        for (String paramData : paramDataList) {
            casesList.add(temp.replace(param, paramData));
        }
        return casesList;
    }
}

 

package net.yto.com.testplatform;

import com.alibaba.fastjson.JSON;

import java.util.ArrayList;
import java.util.List;

public class TestMain {
    public static void main(String[] args) {
        TestMain testMain = new TestMain();
        List<String> templates = new ArrayList<>();
        templates.add("${org_name}的业务量是多少?");//2
        templates.add("${time}${org_name}的业务量是多少");//2*3=6
        templates.add("${time}${org_name}${max}的业务量是多少");//2*3*2=12
        List<String> orgnameList = new ArrayList<>();
        orgnameList.add("北京");
        orgnameList.add("上海");
        List<String> timeList = new ArrayList<>();
        timeList.add("昨天");
        timeList.add("今天");
        timeList.add("今年");
        List<String> maxList = new ArrayList<>();
        maxList.add("最大");
        maxList.add("前三");


        List<String> resultList = new ArrayList<>();
        for (String template : templates) {
            testMain.makeData(template, resultList, orgnameList, timeList, maxList);
        }
        System.out.println(resultList.size());
        System.out.println(JSON.toJSONString(resultList, true));

    }

    /** 根据模板和变量值列表
     * @param template    模板
     * @param testList    生成的用例集合
     * @param orgnameList 组织列表
     * @param timeList    时间列表
     * @param maxList     极值列表
     */
    public void makeData(String template, List<String> testList, List<String> orgnameList, List<String> timeList, List<String> maxList) {
        //递归终止条件:
        if (!template.contains("$")) {
            return;
        }
        //替换org_name
        if (template.contains("${org_name}")) {
            List<String> casesList = makeCases(template, "${org_name}", orgnameList);
            for (String case1 : casesList) {
                if (case1.contains("$")) {
                    makeData(case1.replace("${org_name}", ""), testList, orgnameList, timeList, maxList);
                } else {
                    testList.add(case1);
                }
            }
            //替换max
        } else if (template.contains("${max}")) {
            List<String> casesList = makeCases(template, "${max}", maxList);
            for (String case1 : casesList) {
                if (case1.contains("$")) {
                    makeData(case1.replace("${max}", ""), testList, orgnameList, timeList, maxList);
                } else {
                    testList.add(case1);
                }
            }
            //替换time
        } else if (template.contains("${time}")) {
            List<String> casesList = makeCases(template, "${time}", timeList);
            for (String case1 : casesList) {
                if (case1.contains("$")) {
                    makeData(case1.replace("${time}", ""), testList, orgnameList, timeList, maxList);
                } else {
                    testList.add(case1);
                }
            }

        } else {
            return;
        }

    }

    /**
     * 具体生成用例方法,实际可以根据指标对应的组织来生成
     *
     * @param template      模板
     * @param param         变量
     * @param paramDataList 变量的值列表
     * @return
     */
    public List<String> makeCases(String template, String param, List<String> paramDataList) {
        List<String> casesList = new ArrayList<>();
        String temp = template;
        for (String paramData : paramDataList) {
            casesList.add(temp.replace(param, paramData));
        }
        return casesList;
    }
}
 生成结果

20条数据

[
	"北京的业务量是多少?",
	"上海的业务量是多少?",
	"昨天北京的业务量是多少",
	"今天北京的业务量是多少",
	"今年北京的业务量是多少",
	"昨天上海的业务量是多少",
	"今天上海的业务量是多少",
	"今年上海的业务量是多少",
	"昨天北京最大的业务量是多少",
	"今天北京最大的业务量是多少",
	"今年北京最大的业务量是多少",
	"昨天北京前三的业务量是多少",
	"今天北京前三的业务量是多少",
	"今年北京前三的业务量是多少",
	"昨天上海最大的业务量是多少",
	"今天上海最大的业务量是多少",
	"今年上海最大的业务量是多少",
	"昨天上海前三的业务量是多少",
	"今天上海前三的业务量是多少",
	"今年上海前三的业务量是多少"
]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值