Fitnesse批量读取变量信息,并保存到用例执行上下文中
Fitnesse变量可以分成两种,一种是自定义变量,另一种是用例执行过程中的临时变量。
在Finesse使用过程中,如果需要定义一些公共的变量,可以统一在一个文件中使用自定义变量的方法,将公共变量全部定义好,然后在用例中引用该文件就可以了。
但是遇到多环境以及公共变量比较多的时候,上面的方法就比较麻烦了。
为了解决上面的问题,这里采用redis+修改Finesse源码的方式解决问题。
1. redis:
通过 环境名称+变量名称 的方式将变量和值保存在redis中
2. 修改Finesse源码
路径:
\FitnesseMaster\src\fitnesse\slim\SlimExecutionContext.java
修改其中的setVariable方法实现,这里约定,当name(用例执行过程中的临时变量名称)为variables时,就将value当做环境信息处理(value是一个json串,包含指定环境下的所有环境变量信息)。如果不是variables,就按照原实现处理。
1 public void setVariable(String name, MethodExecutionResult value) { 2 if(name.equals("variables")){ 3 System.out.println(String.valueOf(value)); 4 String variables_s=value.toString(); 5 Map<String,String> variablesMap=JSONObject.parseObject(variables_s,Map.class); 6 for(Map.Entry<String,String> entry:variablesMap.entrySet()){ 7 variables.setSymbol(entry.getKey(), new MethodExecutionResult(entry.getValue(), Object.class));//将环境变量信息,保存到用例执行上下文中。 8 System.out.println("1: "+entry.getKey()+"--"+entry.getValue()); 9 } 10 }else{ 11 variables.setSymbol(name, value);//原实现,就这一行代码 12 System.out.println("2: "+name+"--"+value); 13 } 14 }
RedisFixture中reads方法的实现:
1 public String reads(String env){ 2 String value = "null"; 3 Set<String> keys = stringRedisTemplate.keys(env+"*"); 4 Map<String,String> v_map=new HashMap<>(); 5 6 for(String key:keys){ 7 Pattern pattern = Pattern.compile("(.*):(.*):(.*)"); 8 Matcher matcher = pattern.matcher(key); 9 String v_name=null; 10 while (matcher.find()) { 11 v_name = matcher.group(3); 12 } 13 v_map.put(v_name,stringRedisTemplate.opsForValue().get(key)); 14 } 15 value=JSONObject.toJSONString(v_map); 16 return value; 17 }
用例编写:
执行情况:
当出现上如结果后,也就表示json串中的信息,全部被以临时变量的形式,保存到用例执行的上下文中了。
如果需要使用这些变量,可以使用 $+变量名的方式获取值。比如需要使用上图中变量doUploadCfmFileTask_jobName的值,使用 $doUploadCfmFileTask_jobName即可。
本文来自博客园,作者:月色深潭,交流群:733423266,转载请注明原文链接:https://www.cnblogs.com/moonpool/p/11988233.html