zoukankan      html  css  js  c++  java
  • Fitnesse批量读取变量信息,并保存到用例执行上下文中

    Fitnesse变量可以分成两种,一种是自定义变量,另一种是用例执行过程中的临时变量。

    在Finesse使用过程中,如果需要定义一些公共的变量,可以统一在一个文件中使用自定义变量的方法,将公共变量全部定义好,然后在用例中引用该文件就可以了。

    但是遇到多环境以及公共变量比较多的时候,上面的方法就比较麻烦了。

    为了解决上面的问题,这里采用redis+修改Finesse源码的方式解决问题。

     1. redis:

    通过  环境名称+变量名称 的方式将变量和值保存在redis中

     2. 修改Finesse源码

     路径:

    FitnesseMastersrcfitnesseslimSlimExecutionContext.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即可。

  • 相关阅读:
    ubuntu安装jdk的两种方法
    LeetCode 606. Construct String from Binary Tree (建立一个二叉树的string)
    LeetCode 617. Merge Two Binary Tree (合并两个二叉树)
    LeetCode 476. Number Complement (数的补数)
    LeetCode 575. Distribute Candies (发糖果)
    LeetCode 461. Hamming Distance (汉明距离)
    LeetCode 405. Convert a Number to Hexadecimal (把一个数转化为16进制)
    LeetCode 594. Longest Harmonious Subsequence (最长的协调子序列)
    LeetCode 371. Sum of Two Integers (两数之和)
    LeetCode 342. Power of Four (4的次方)
  • 原文地址:https://www.cnblogs.com/moonpool/p/11988233.html
Copyright © 2011-2022 走看看