通过ruby编写测试脚本的时候,我还是喜欢采用yml来管理测试数据,就像以前的文章(Selenium WebDriver + Grid2 + RSpec之旅(五))提到的一样,但是在引用yml中的数据的时候采用

name = @data["data"]["logindata"]["wrong"]["username"]的方法显得非常臃肿,不方便阅读。

下面就通过定义一个函数来简化一下数据的引用

 def hashes2ostruct(object)
return case object
when Hash
object = object.clone
object.each do |key,value|
object[key] = hashes2ostruct(value)
end
OpenStruct.new(object)
when Array
object = object.clone
object.map! {|i| hashes2ostruct(i) }
else
object
end
end

然后在加载yml文件的时候就通过这个函数来装饰一下,再次引用变量的时候就显得轻便多了

 #encoding:utf-8
require 'selenium-webdriver'
require 'rspec'
require 'yaml'
require 'ostruct' require File.dirname(__FILE__)+'/../../public/public'
require File.dirname(__FILE__)+'/../tool/login_dialog'
require File.dirname(__FILE__)+'/../action/login_page' def hashes2ostruct(object)
return case object
when Hash
object = object.clone
object.each do |key,value|
object[key] = hashes2ostruct(value)
end
OpenStruct.new(object)
when Array
object = object.clone
object.map! {|i| hashes2ostruct(i) }
else
object
end
end describe 'cnblogs main login page' do
include Login_Dialog before (:all) do
@data = hashes2ostruct(YAML.load (File.open(File.dirname(__FILE__)+'/../config/login_data.yml')))
end
#此处省略相对多余代码 context 'input the wrong passwd' do
it 'login failed,and return "用户名或密码错误"' do
name = @data.data.logindata.wrong.username
end
end
end

这样就清爽了吧,就像憋了好久的大便,一下子释放出来的感觉!(哈哈! 这个比喻有点太伤大雅了),希望对大家有用。
详情请访问http://www.dribin.org/dave/blog/archives/2006/11/17/hashes_to_ostruct/

yml文件数据的简洁表达方法(Hashes to OpenStruct)的更多相关文章

  1. Unity 用C#脚本读取JSON文件数据

    读取JSON文件数据网上有很多方法吗,这里采用SimpleJSON,关于SimpleJSON的介绍参考以下链接:http://wiki.unity3d.com/index.php/SimpleJSON ...

  2. yml 文件操作方法

    文件读取方法示例: import yaml fr = open('yml_file_address', 'r',encoding='utf-8') data = yaml.load(fr) print ...

  3. 【转】 Linux内核中读写文件数据的方法--不错

    原文网址:http://blog.csdn.net/tommy_wxie/article/details/8193954 Linux内核中读写文件数据的方法  有时候需要在Linuxkernel--大 ...

  4. C#使用Linq to csv读取.csv文件数据2_处理含有非列名数据的方法(说明信息等)

    第一篇博客为:https://www.cnblogs.com/lxhbky/p/11884474.html 本文主要是为了解决上面博客遗留的一个含有不规范数据的一种方法,目前暂时没有从包里发现可以从第 ...

  5. YAML/YML文件一直提示格式错误解决方法

    第一次接触yml文件,各种格式报错,但是看了几次也没看出来.其实有一个好方法,那就是直接通过yml在线格式检查 可以将yml具体内容复制到以下网址进行查询.具体报错位置会更加详细 https://ww ...

  6. 转:spring boot log4j2配置(使用log4j2.yml文件)---YAML 语言教程

    转:spring boot log4j2配置(使用log4j2.yml文件) - CSDN博客http://blog.csdn.net/ClementAD/article/details/514988 ...

  7. HttpRunner学习7--引用CSV文件数据

    前言 在之前的文章中,我们已经学习了 parameters 参数化,是在测试脚本中直接指定参数列表.这种方法简单易用,但如果我们的参数列表数据比较多,这种方法可能就不太适合了. 当数据量比较大的时候, ...

  8. 详细介绍ASP.NET页面间数据传递的使用方法

    源码:http://www.jinhusns.com/Products/Download/?type=xcj 在ASP.NET中,页面间数据传递的方法有很多.下面为大家总结一下,页面间数据传递的方法. ...

  9. Opencv探索之路(十九):读写xml和yml文件

    有时候我们处理完图像后需要保存一下数据到文件上,以供下一步的处理.一个比较广泛的需求场景就是:我们对一幅图像进行特征提取之后,需要把特征点信息保存到文件上,以供后面的机器学习分类操作.那么如果遇到这样 ...

随机推荐

  1. javascript 基础2第12节

    1. <html> <head> <title>javascript基础</title> </head> <body> 1.Nu ...

  2. CF Round#240题解

    第一次参加CF的比赛,MSK19.30,四个小时的时差真心累,第一次CODE到这么夜-- 一开始做了A,C两题,后来做B题的时候我体力和精神集中度就很低了,导致一直WA在4-- 今天起床后再刷B,终于 ...

  3. ubuntu 12.04 mysql转移目录后 无法 启动

    http://www.boyunjian.com/do/article/snapshot.do?uid=com.iteye.xgbjmxn%2Fblog%2F1208086(转,)     我是用ap ...

  4. centos 不支持mysql

    感觉是php-odbc必须装 yum -y install php php-fpm yum –y install php-mysql php-common php-mbstring php-gd ph ...

  5. linux指令大全(完整篇)(转)

       http://blog.chinaunix.net/uid-9681606-id-1998590.html  linux指令大全(完整篇)(转) 2009-03-17 01:21:46 分类:  ...

  6. 用C#实现MD5算法

     /// <summary>     /// 一个实现MD5散列字符串的类     /// </summary>     public sealed class MD5Hash ...

  7. Mysql修改设置root密码的命令及方法

    方法一:使用SQL语句命令UPDATE 需用到Mysql自带的加密函数PASSWORD(string),该函数对一个明文密码进行加密,但不能解密.专门用于mysql.user(用户权限表)中设置密码, ...

  8. TDirectory.IsRelativePath是否相对路径

    使用函数: System.IOUtils.TDirectory.IsRelativePath class function IsRelativePath(const Path: string): Bo ...

  9. Function Pointer in Delpni

    program Project1; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils; type TVoice = function(): Stri ...

  10. Kivy中文显示

    Win7系统 下载 DroidSansFallback.ttf字体(android设备上自带了) 源代码第一行增加#-*- coding:utf-8 -*- 创建widget值定font_name s ...