需求:
针对指标的查值有固定的文法例如 ${org_name}的业务量是多少,需要替换变量来生成测试用例
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}的业务量是多少?");//2templates.add("${time}${org_name}的业务量是多少");//2*3=6templates.add("${time}${org_name}${max}的业务量是多少");//2*3*2=12List<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_nameif (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条数据
["北京的业务量是多少?","上海的业务量是多少?","昨天北京的业务量是多少","今天北京的业务量是多少","今年北京的业务量是多少","昨天上海的业务量是多少","今天上海的业务量是多少","今年上海的业务量是多少","昨天北京最大的业务量是多少","今天北京最大的业务量是多少","今年北京最大的业务量是多少","昨天北京前三的业务量是多少","今天北京前三的业务量是多少","今年北京前三的业务量是多少","昨天上海最大的业务量是多少","今天上海最大的业务量是多少","今年上海最大的业务量是多少","昨天上海前三的业务量是多少","今天上海前三的业务量是多少","今年上海前三的业务量是多少"
]