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

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

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

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

 1. redis:

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

 2. 修改Finesse源码

路径:

\FitnesseMaster\src\fitnesse\slim\SlimExecutionContext.java

修改其中的setVariable方法实现,这里约定,当name(用例执行过程中的临时变量名称)为variables时,就将value当做环境信息处理(value是一个json串,包含指定环境下的所有环境变量信息)。如果不是variables,就按照原实现处理。

 public void setVariable(String name, MethodExecutionResult value) {
if(name.equals("variables")){
System.out.println(String.valueOf(value));
String variables_s=value.toString();
Map<String,String> variablesMap=JSONObject.parseObject(variables_s,Map.class);
for(Map.Entry<String,String> entry:variablesMap.entrySet()){
variables.setSymbol(entry.getKey(), new MethodExecutionResult(entry.getValue(), Object.class));//将环境变量信息,保存到用例执行上下文中。
System.out.println("1: "+entry.getKey()+"--"+entry.getValue());
}
}else{
variables.setSymbol(name, value);//原实现,就这一行代码
System.out.println("2: "+name+"--"+value);
}
}

 RedisFixture中reads方法的实现:

 public  String reads(String env){
String value = "null";
Set<String> keys = stringRedisTemplate.keys(env+"*");
Map<String,String> v_map=new HashMap<>(); for(String key:keys){
Pattern pattern = Pattern.compile("(.*):(.*):(.*)");
Matcher matcher = pattern.matcher(key);
String v_name=null;
while (matcher.find()) {
v_name = matcher.group(3);
}
v_map.put(v_name,stringRedisTemplate.opsForValue().get(key));
}
value=JSONObject.toJSONString(v_map);
return value;
}

用例编写:

执行情况:

当出现上如结果后,也就表示json串中的信息,全部被以临时变量的形式,保存到用例执行的上下文中了。

如果需要使用这些变量,可以使用 $+变量名的方式获取值。比如需要使用上图中变量doUploadCfmFileTask_jobName的值,使用 $doUploadCfmFileTask_jobName即可。

Fitnesse批量读取变量信息,并保存到用例执行上下文中的更多相关文章

  1. opencv图像处理时使用stringstream批量读取图片,处理后并保存

    简介: 同文件输入输出流一样,使用stringstream可以批量读取图片,处理后并进行保存.因为C++中头文件 stringstream既可以从string读数据也可向string写数据,利于其这个 ...

  2. simotion读写CF卡,保存/读取变量

    simotion读写CF卡功能 1 使用西门子的Simotion运动控制器时,有时需要用到 读/写 CF卡的功能.主要来自以下几个方面的需求. 1)用户数据量较大,可保持(retain)存储区的容量不 ...

  3. R8—批量生成文件夹,批量读取文件夹名称+R文件管理系统操作函数

    一. 批量生成文件夹,批量读取文件夹名称 今日,工作中遇到这样一个问题:boss给我们提供了200多家公司的ID代码(如6007.7920等),需要根据这些ID号去搜索下载新闻,从而将下载到的新闻存到 ...

  4. C++开发人脸性别识别教程(8)——搭建MFC框架之读取目录信息

    在上一篇博客中我们已经绘制了MFC界面,在这篇博客中我们将加入响应代码,为MFC框架加入一个最主要的功能:打开一个目录. 一.加入相关头文件 这里头文件主要包括三类:opencv头文件.批量读取文件相 ...

  5. ASP.NET Core的配置(1):读取配置信息

    提到"配置"二字,我想绝大部分.NET开发人员脑海中会立马浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化 ...

  6. matlab文件读写处理实例(二)——textread批量读取文件

    问题:对文件夹下所有文件进行批量读取,跳过文件头部分,读取每个文件数据部分的7,8,9列,保存到变量并且输出到文件. 数据: 文件夹11m\

  7. Opencv-Python:图像尺寸、图像的读取、显示、保存与复制

    Opencv-Python:图像尺寸.图像的读取.显示.保存与复制 原创 2017年11月23日 21:30:49 4440 在使用opencv的方法时,首先必须导入opencv包.新的opencv导 ...

  8. Matlab批量读取文件夹文件

    现在有一个文件夹 里面有50个左右的txt文件 每个文件大概三万行 两列 第一列是字符串 第二列是浮点数字 我只需要读第二列 现在我想写一个.M文件 批量读取这个文件夹里的txt文件 读取完以后的数组 ...

  9. postman使用之四:切换环境和设置读取变量

    postman提供了environment管理功能,想要在多个环境中测试,比如在测试环境.灰度环境.生产环境等,只需要用同样的接口,切换下环境即可,非常方便.具体步骤: 切换环境 1.点击界面右上角的 ...

随机推荐

  1. 深入浅出 Java Concurrency (25): 并发容器 part 10 双向并发阻塞队列 BlockingDeque[转]

    这个小节介绍Queue的最后一个工具,也是最强大的一个工具.从名称上就可以看到此工具的特点:双向并发阻塞队列.所谓双向是指可以从队列的头和尾同时操作,并发只是线程安全的实现,阻塞允许在入队出队不满足条 ...

  2. NAT后的FTP服务器部署笔记

    (2019年2月19日注:这篇文章原先发在自己github那边的博客,时间是2017年2月5日) 寒假开始以后,过年之前有一个任务,为实验室的人搭建一个FTP,用之前部署好的物理服务器.这本就是网管干 ...

  3. Chrome浏览器console控制台不打印任何js错误信息

    手欠在Chrome控制台在错误信息,右键:Hide messages from vue 看不到 报错信息 这里删除成 默认的Filter 报错就出现了

  4. 如何学习AxureRP Axure学习方法

    从作者最初接触的5.5版本,到5.6版本,到后来6.0的多个迭代版本,直到现在的6.5版本,AxureRP每次的版本升级都伴随着新功能的增 加,也解决了原型设计上的一些难题.这也从另一个方面诠释了“学 ...

  5. java基础之二维数组不定义列数

    有一种特殊的二维数组,它的行数确定,但是每行的列数不确定.这样的的数组实现方法:先创建制定行数,列数缺省的二维数组,然后对数组的每一行重新初始化.举例如下: package day5; //第二种定义 ...

  6. vue 可复用swiper以及scoped样式穿透(可以不受scoped的限制来修改样式)

    参考: https://blog.csdn.net/dwb123456123456/article/details/82701740https://blog.csdn.net/u014027876/a ...

  7. 2014-VGG-《Very deep convolutional networks for large-scale image recognition》翻译

    2014-VGG-<Very deep convolutional networks for large-scale image recognition>翻译 原文:http://xues ...

  8. BZOJ3907 网格 卡特兰数

    题目描述 某城市的街道呈网格状,左下角坐标为A(0, 0),右上角坐标为B(n, m),其中n >= m. 现在从A(0, 0)点出发,只能沿着街道向正右方或者正上方行走,且不能经过图示中直线左 ...

  9. 获取地址栏URL中参数, getQuerySting()方法

    今天同事用的以前的获取url地址参数获取不到.以前的方法失效了.后面发现是正则表达式bug: 第一种获取方法(针对普通情况的一般够用): function getQueryString(name) { ...

  10. 移动端iPhone系列适配问题

    问题一:苹果手机上的input按钮自带渐变效果 一样的代码,为啥在苹果手机上的input按钮就自带渐变效果,搞特殊吗?怎么让它显示正常?只需要加上outline:0px; -webkit-appear ...