当前位置:   article > 正文

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

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

需求:

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

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

  1. package net.yto.com.testplatform;
  2. import com.alibaba.fastjson.JSON;
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. public class TestMain {
  8. public static void main(String[] args) {
  9. TestMain testMain = new TestMain();
  10. List<String> templates = new ArrayList<>();
  11. templates.add("${org_name}的业务量是多少?");//2
  12. templates.add("${time}${org_name}的业务量是多少");//2*3=6
  13. templates.add("${time}${org_name}${max}的业务量是多少");//2*3*2=12
  14. List<String> orgnameList = new ArrayList<>();
  15. orgnameList.add("北京");
  16. orgnameList.add("上海");
  17. List<String> timeList = new ArrayList<>();
  18. timeList.add("昨天");
  19. timeList.add("今天");
  20. timeList.add("今年");
  21. List<String> maxList = new ArrayList<>();
  22. maxList.add("最大");
  23. maxList.add("前三");
  24. Map<String,List<String>> param_datas = new HashMap<>();
  25. param_datas.put("${org_name}",orgnameList);
  26. param_datas.put("${max}",maxList);
  27. param_datas.put("${time}",timeList);
  28. List<String> resultList = new ArrayList<>();
  29. for (String template : templates) {
  30. testMain.makeData(template, resultList, param_datas);
  31. }
  32. System.out.println(resultList.size());
  33. System.out.println(JSON.toJSONString(resultList, true));
  34. }
  35. /** 根据模板和变量值列表
  36. * @param template 模板
  37. * @param testList 生成的用例集合
  38. */
  39. public void makeData(String template, List<String> testList, Map<String,List<String>> param_datas) {
  40. //递归终止条件:
  41. if (!template.contains("$")) {
  42. return;
  43. }
  44. for (Map.Entry<String,List<String>> entry:param_datas.entrySet()){
  45. String key = entry.getKey();
  46. List<String> value = entry.getValue();
  47. //替换org_name
  48. if (template.contains(key)) {
  49. List<String> casesList = makeCases(template, key, value);
  50. for (String case1 : casesList) {
  51. if (case1.contains("$")) {
  52. makeData(case1.replace(key, ""), testList, param_datas);
  53. } else {
  54. testList.add(case1);
  55. }
  56. }
  57. break;
  58. }
  59. }
  60. }
  61. /**
  62. * 具体生成用例方法,实际可以根据指标对应的组织来生成
  63. *
  64. * @param template 模板
  65. * @param param 变量
  66. * @param paramDataList 变量的值列表
  67. * @return
  68. */
  69. public List<String> makeCases(String template, String param, List<String> paramDataList) {
  70. List<String> casesList = new ArrayList<>();
  71. String temp = template;
  72. for (String paramData : paramDataList) {
  73. casesList.add(temp.replace(param, paramData));
  74. }
  75. return casesList;
  76. }
  77. }

 

  1. package net.yto.com.testplatform;
  2. import com.alibaba.fastjson.JSON;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. public class TestMain {
  6. public static void main(String[] args) {
  7. TestMain testMain = new TestMain();
  8. List<String> templates = new ArrayList<>();
  9. templates.add("${org_name}的业务量是多少?");//2
  10. templates.add("${time}${org_name}的业务量是多少");//2*3=6
  11. templates.add("${time}${org_name}${max}的业务量是多少");//2*3*2=12
  12. List<String> orgnameList = new ArrayList<>();
  13. orgnameList.add("北京");
  14. orgnameList.add("上海");
  15. List<String> timeList = new ArrayList<>();
  16. timeList.add("昨天");
  17. timeList.add("今天");
  18. timeList.add("今年");
  19. List<String> maxList = new ArrayList<>();
  20. maxList.add("最大");
  21. maxList.add("前三");
  22. List<String> resultList = new ArrayList<>();
  23. for (String template : templates) {
  24. testMain.makeData(template, resultList, orgnameList, timeList, maxList);
  25. }
  26. System.out.println(resultList.size());
  27. System.out.println(JSON.toJSONString(resultList, true));
  28. }
  29. /** 根据模板和变量值列表
  30. * @param template 模板
  31. * @param testList 生成的用例集合
  32. * @param orgnameList 组织列表
  33. * @param timeList 时间列表
  34. * @param maxList 极值列表
  35. */
  36. public void makeData(String template, List<String> testList, List<String> orgnameList, List<String> timeList, List<String> maxList) {
  37. //递归终止条件:
  38. if (!template.contains("$")) {
  39. return;
  40. }
  41. //替换org_name
  42. if (template.contains("${org_name}")) {
  43. List<String> casesList = makeCases(template, "${org_name}", orgnameList);
  44. for (String case1 : casesList) {
  45. if (case1.contains("$")) {
  46. makeData(case1.replace("${org_name}", ""), testList, orgnameList, timeList, maxList);
  47. } else {
  48. testList.add(case1);
  49. }
  50. }
  51. //替换max
  52. } else if (template.contains("${max}")) {
  53. List<String> casesList = makeCases(template, "${max}", maxList);
  54. for (String case1 : casesList) {
  55. if (case1.contains("$")) {
  56. makeData(case1.replace("${max}", ""), testList, orgnameList, timeList, maxList);
  57. } else {
  58. testList.add(case1);
  59. }
  60. }
  61. //替换time
  62. } else if (template.contains("${time}")) {
  63. List<String> casesList = makeCases(template, "${time}", timeList);
  64. for (String case1 : casesList) {
  65. if (case1.contains("$")) {
  66. makeData(case1.replace("${time}", ""), testList, orgnameList, timeList, maxList);
  67. } else {
  68. testList.add(case1);
  69. }
  70. }
  71. } else {
  72. return;
  73. }
  74. }
  75. /**
  76. * 具体生成用例方法,实际可以根据指标对应的组织来生成
  77. *
  78. * @param template 模板
  79. * @param param 变量
  80. * @param paramDataList 变量的值列表
  81. * @return
  82. */
  83. public List<String> makeCases(String template, String param, List<String> paramDataList) {
  84. List<String> casesList = new ArrayList<>();
  85. String temp = template;
  86. for (String paramData : paramDataList) {
  87. casesList.add(temp.replace(param, paramData));
  88. }
  89. return casesList;
  90. }
  91. }
 生成结果

20条数据

  1. [
  2. "北京的业务量是多少?",
  3. "上海的业务量是多少?",
  4. "昨天北京的业务量是多少",
  5. "今天北京的业务量是多少",
  6. "今年北京的业务量是多少",
  7. "昨天上海的业务量是多少",
  8. "今天上海的业务量是多少",
  9. "今年上海的业务量是多少",
  10. "昨天北京最大的业务量是多少",
  11. "今天北京最大的业务量是多少",
  12. "今年北京最大的业务量是多少",
  13. "昨天北京前三的业务量是多少",
  14. "今天北京前三的业务量是多少",
  15. "今年北京前三的业务量是多少",
  16. "昨天上海最大的业务量是多少",
  17. "今天上海最大的业务量是多少",
  18. "今年上海最大的业务量是多少",
  19. "昨天上海前三的业务量是多少",
  20. "今天上海前三的业务量是多少",
  21. "今年上海前三的业务量是多少"
  22. ]

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/227998
推荐阅读
相关标签
  

闽ICP备14008679号