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

news/2024/7/7 21:12:56

需求:

针对指标的查值有固定的文法例如 ${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条数据

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


http://lihuaxi.xjx100.cn/news/2088262.html

相关文章

GitLab页面创建分支,并且本地idea切换新建分支后推送代码到远程仓库

点开对应的项目 创建分支 创建分支 添加分支名称 创建好分支 idea开发工具从远程仓库切换分支 切换后的分支 推送到远程仓库

el-form v-for循环列表的表单如何校验

1、普通的表单校验直接在最外层<el-form> :model"数据" :rules"规则" &#xff0c;再在<el-form-item>层设置prop值与model里数据定义的key保持一致即可。 <el-form-item label"名称" prop"ruleName" :rules"[{r…

Codeql复现CVE-2018-11776学习笔记

基本使用 1、首先下载struts2漏洞版本源码&#xff1a; https://codeload.github.com/apache/struts/zip/refs/tags/STRUTS_2_3_20 2、构建codeql数据库&#xff08;构建失败文末有解决办法&#xff09;&#xff1a; codeql database create ~/CodeQL/databases/struts2-2.3.…

① MyBatis使用入门,解决IDEA中Mapper映射文件警告。

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ MyBatis使用入门&#xff0c;解决IDEA中Mapper…

【C++设计模式】UML图的介绍及其画法

文章目录 前言一、UML图的介绍1.1 UML图是什么1.2 UML图的作用 二、UML图的画法2.1 最简单的UML图2.2 继承的UML图2.3 关联关系2.4 聚合关系2.5 组合关系2.6 依赖关系 总结 前言 在软件开发过程中&#xff0c;设计模式是一种被广泛应用的方法&#xff0c;它为解决特定问题提供…

uniapp微信小程序 隐藏顶部导航栏 路由跳转带参数

隐藏单页顶部导航栏和左上角返回按钮&#xff0c;在pages.json里配置 {"path": "pages/gameLogin/gameLogin","style": {"navigationStyle":"custom","app-plus":{"titleView":false}} } 路由跳转 u…

计算机服务器中了locked勒索病毒怎么解密,locked勒索病毒解密流程

科技的发展带动了企业生产&#xff0c;越来越多的企业开始利用计算机服务器办公&#xff0c;为企业的生产运营提供了极大便利&#xff0c;但随之而来的网络安全威胁也引起了众多企业的关注。近日&#xff0c;云天数据恢复中心接到许多企业的求助&#xff0c;企业的计算机服务器…

FFmepg--重采样器设计

文章目录 基本概念流程apicode 基本概念 重采样器设计原理&#xff1a; 支持重采样参数的设置支持不同形式的源输入&#xff0c;如frame &#xff0c;int** data支持不同形式的输出&#xff0c;如frame, int ** ou支持pts (显示时间戳)支持获取指定采样点数支持flush 流程 …