需求:
针对指标的查值有固定的文法例如 ${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条数据
[
"北京的业务量是多少?",
"上海的业务量是多少?",
"昨天北京的业务量是多少",
"今天北京的业务量是多少",
"今年北京的业务量是多少",
"昨天上海的业务量是多少",
"今天上海的业务量是多少",
"今年上海的业务量是多少",
"昨天北京最大的业务量是多少",
"今天北京最大的业务量是多少",
"今年北京最大的业务量是多少",
"昨天北京前三的业务量是多少",
"今天北京前三的业务量是多少",
"今年北京前三的业务量是多少",
"昨天上海最大的业务量是多少",
"今天上海最大的业务量是多少",
"今年上海最大的业务量是多少",
"昨天上海前三的业务量是多少",
"今天上海前三的业务量是多少",
"今年上海前三的业务量是多少"
]