51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2497|回复: 8
打印 上一主题 下一主题

[原创] 想开发自己的测试框架? 也许这个工具会帮上忙

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2011-1-8 21:34:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lifr 于 2011-1-8 21:39 编辑

函数可变参数
简单来说, 测试框架是对一个被测试产品操作的一个封装和抽象.
比如说一个创建用户的界面, 测试框架封装了具体的UI操作,向上提供了一个接口 createUser(testData).
这样调用者就不需去关心具体的页面导航, 输入数据, 提交表单这些繁琐的操作, 一个调用就创建好了用户.

假如我们已经确定要提供CreateUser这样一个接口, 那么接下来的问题是, testData应该是什么样的? 一般来说, 这里有三种选择
1) 用参数序列. 比如
createUser(name, age, phoneHome, phoneOffice)
这种方法简单直接, 适合简单的数据,大量的数据就不太合适了. 而且VBS不支持变长参数序列, 后续版本如果要增加参数那就简直是恶梦.

2) 用Map/Dictionary
用Dictionary解决了上面的问题. 即能描述复杂数据, 且不会出现增加参数导致接口变化的问题. 比如
Set map = CreateObject("Scripting.Dictionary")
map("name") = "Jack"
map("age")=21
map("phone") = Array("12334", "22223")
createUser(map)

Dictionary完全能解决问题, 就是"卖相不太好". 它显得有点啰嗦. 一个调用竟然要写5行代码.对于我这样的完美主义者来说很难接受.

于是某些聪明人想出了新的主意, 就是用字符串来描述这个Dictionary结构. 参见 http://www.advancedqtp.com/knowl ... ptional-parameters/
这个方法很棒, 我也一度使用过这个方法, 但是它的问题是描述能力有限. 对于比较复杂数据结构就无能为力了. 最终, 有了下面的方案三.

3) 基于字符串解释器
本质上, 此方案同2), 只是字符串的数据描述能力得到了大幅的加强,  能够描述更为复杂的数据结构. 比如上面例子里的参数可以描述为下面的字符串.
"{name=Jack; age=21; phone=[12334, 22223]}".
看到这样的字符串, 你一定想起了另外一个大名鼎鼎的东东"JSON", 没错. 这个方案语法部分借鉴了JSON, 不过根据QTP测试框架开发的实际, 大幅简化了. 只支持Map/Array/String三种类型. 你不用担心其描述能力, 根据我的实践, 这三种类型的组合可以满足绝大部分要求了.

所以最终版本的创建用户调用就像下面的样子. 看上去是不是好很多呢 :-)

createUser(PM( "name=Jack; age=21; phone=[12334, 22223]"))
' PM means parse map

关于TestData
其实这个字符串的引用范围不仅仅是解决"函数可变参数". 在某一个方向上, 它为DataDriven Test里的TestData提供了一个通用的解决方法(另为一个方向是QTP的datatable). (题外话: Manager和boss都喜欢DataDriven这样的概念 ).

比如我现在开发的测试框架. 它提供了一个针对所有Input Data Screen(Edit Page, Wizard)的统一调用接口. 像下面的样子.
ScreenGo(screenName, screenDescription)
可以想见, screenDescription会是很复杂的, 必须需要字符串解释器这样的工具.

总的来说, 这个工具增强了测试框架对输入数据的处理能力, 更设计出更简单易用的接口. 所以我共享出来, 希望能对你有帮助.


关于解释器本身
这是一个递归下降的程序, 阅读起来并不难. 而且注释良好.
其语法描述如下.

  1. map :
  2.      {}
  3.      {members}

  4. members :
  5.      pair
  6.      pair; members

  7. pair :
  8.      NULL # NULL means nothing. NULL will be ignored, e.g "a=1;;b=2"
  9.      string = value #string will be trimmed

  10. array :
  11.      []
  12.      [elements]

  13. elements:
  14.      NULL # NULL means nothing. NULL will be ignored, e.g "abc,,def"
  15.      value
  16.      value, elements

  17. value :
  18.       NULL # ""
  19.       string
  20.       map
  21.       ary

  22. string :
  23.      char chars

  24. char
  25.      normal # any char but not \ [ ] { } ; , =
  26.      \[
  27.      \]
  28.      \{
  29.      \}
  30.      \=
  31.      \;
  32.      \,
  33.      \\
  34.      \s # (32)
  35.      \t # (9)
  36.      \n # (10)
  37.      \r # (13)
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2011-1-9 22:12:04 | 只看该作者
非常好
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2011-1-10 11:00:58 | 只看该作者
多谢,收藏学习
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2011-1-10 13:39:32 | 只看该作者
the technique helpful to me, Ths
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2011-1-10 13:42:47 | 只看该作者
看看
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2011-1-10 22:07:42 | 只看该作者
先顶后学
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2011-1-11 10:53:28 | 只看该作者
学习中……顶楼主……
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2011-1-11 14:50:13 | 只看该作者
先存了...
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2011-2-17 11:22:47 | 只看该作者
高手啊
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-20 20:44 , Processed in 0.077750 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表