51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4430|回复: 1
打印 上一主题 下一主题

[原创] UI自动化测试框架WAT介绍

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2013-5-18 22:52:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 sxazf 于 2013-5-20 14:56 编辑

可参考我的博客:http://www.cnblogs.com/zhangfei/archive/2013/05/06/3062689.html
WAT功能简介:
Watir Automation Test(瓦特)是UI自动化测试的一个解决方案,其关键词是数据驱动,支持的语言是ruby, 该框架支持watir、watir-webdriver、selenium-webdriver 无缝连接(仅修改少量的代码),灵活性比较好:
1、        浏览器元素对象集中管理、
2、        测试case集中管理、
3、        测试数据支持excel文档管理、
4、        Case中输入数据参数化管理
5、        Log分项目、分日期记录,方便查找日志、
6、        Html格式详细报告、
7、        多项目批量运行、
8、        可以自动生成bat批处理文件,支持单项目一键运行
9、        Conf文件支持全局化配置、
10、        Conf文件支持单个项目case局部配置、
11、        一键自动生成测试项目、
12、        在出错时建立快照、
13、        可以跨平台运行(XP、win7)
14、        邮件功能
15、        分布式执行case(目前还未进行)
16、        与hudson集成(目前还未进行)


http://files.cnblogs.com/zhangfei/WAT_1.7.rar

change log:

1.增加一个命令行运行的all命令

2.增加多浏览器的支持

用法:

1.ruby CommandWAT.rb all

2.在全局的conf.yaml文件的Driver选项进行配置

功能:

1.可运行testcase文件夹下面的所有case,且在report文件夹下面生成一个总的报告report.html

2.可自行选择是用watir/watir-webdriver,及浏览器

如何更新:解压后,全部覆盖即可。

WAT_1.7版本命令行使用方法:

1.创建project. cd到runTime目录里,用命令ruby CommandWAT.rb -cp Demo 在testcase 文件夹下会创建一个Demo的project

2.在runTime目录里,可以用命令ruby CommandWAT.rb list查看所有的project,用命令ruby CommandWAT.rb all运行所有的project,用命令ruby CommandWAT.rb all -y运行在runTime/run.yaml里配置的所有的project

3.还有其它的运行单个project,test 等的命令,可用ruby CommandWAT.rb -h查看

http://files.cnblogs.com/zhangfei/WAT-1.8.rar

更新说明:

1.8版本是一个gem包

安装方法:

1.cd到存放gem包的目录,用命令gem install WAT-1.8.gem -l 安装(前提条件是watir>3.0)

使用方法:

1.安装完后,用wat -h去查看命令

2.创建workspace. cd到你要创建workspace的目录,用命令wat -cw test  会创建一个test的文件夹,该文件夹就是workspace

3.创建project. cd到workspace目录里,用命令wat -cp Demo 在testcase 文件夹下会创建一个Demo的project

4.在workspace里,可以用命令wat list查看所有的project,用命令wat all运行所有的project,用命令wat all -y运行在config/run.yaml里配置的所有的project

5.还有其它的运行单个project,test 等的命令,可用wat -h查看

WAT的使用方法:

1.当创建完project "Demo"后,在testcase文件夹下会创建一个Demo的文件夹,Demo文件夹下会出现如下的文件:conf.yaml,Demo.rb,Demo.yaml,ExpectedData.yaml,TestData.yaml

2.conf.yaml的作用

    conf.yaml创建时为空,
    conf.yaml文件是对config/conf.yaml文件的扩展,在conf.yaml里可以自定义配置选项,如果conf.yaml与config/conf.yaml的配置项相同,config/conf.yaml里的配置项则会被conf.yaml里的配置项覆盖。
    在测试方法里,即Demo.rb文件里的测试方法里,调用conf.yaml与config/conf.yaml里的配置项的方法为:ConfigData("配置项名称")。

3.Demo.yaml的作用

    Demo.yaml是存放页面元素对象的文件。
    Demo.yaml文件在最初始时不为空,显示了存放页面元素对象的两种方式。
    第一种方式中,type是必填项.parent结点,如果有parent,则需加上,如没有,则不加、。比如@ie.div(:class,"test").div(:index,1),示例为:
    test1:
      type: div
      class: test
    test2:
      type: div
      index: 1
      parent: test1
    test1没有parent,所以不必要加上该结点,test2有parent "test1",所以需要加上parent,value为test1。
    第二种方式中,写法为:
    test2: div(:class,"test").div(:index,1)
    我们在项目中,其实第二种方式用的比较多。
    第三种方式,在Demo.yaml文件中没有演示出来,用法是:(第三种方式配合第二种方式,这样效果会更好)
    test1: div(:class,"test")
    test2: %test1%.div(:index,1)
    在测试方法里,即Demo.rb文件里的测试方法里,调用Demo.yaml的页面元素对象的方法为:AutoTest("test1"),AutoTest("test2").

4.TestData.yaml的作用

    TestData.yaml是存放测试数据的文件,格式一定要严格按照文件中已定义好的格式
    由于该框架是数据驱动的模式,数据驱动的概念是指脚本或测试方法根据配置的数据的条数来循环运行,所以除common结点外,其它的结点是脚本中测试方法的名称,比如在Demo.rb文件中有个test_Demo方法,所以在TestData.yaml的配置:
    - test_Demo:
        description: test for 123
        inputValue: 123
    - test_Demo:
        description: test for 234
        inputValue: 234
    则test_Demo方法会运行两次,在脚本中用inputValue的值时,第一次是123,第二次为234.
    如果在TestData.yaml里的结点与Demo.rb文件中的测试方法名不一致,则会没有测试方法被运行。
    TestData.yaml中的common结点,是配置的测试方法中的数据的公共结点,common结点里的数据,在配置的测试方法中都可以被使用,如果测试方法中与common中存在相同的数据,则common结点中的数据会被覆盖。比如:test_Demo中的description的value值就会覆盖common中的description的value值。TestData.yaml文件中必须存在三个数据结点:private,smoking,description。否则会报错。
    private,smoking是两种运行模式,在config/conf.yaml中RunTimeModule的值如果为private,则会运行private的值为y的测试方法,比如:
    - test_Demo:
        private: y
        description: test for 123
        inputValue: 123
    - test_Demo:
        private: n
        description: test for 123
        inputValue: 123
    则test_Demo只会private被标记为y的一次,标记为n的则不会被运行
    description的数据则会被显示在报告中。
    在testcase文件夹下面有个GlobalData.yaml,也是存放测试数据的,里面的数据会被用到所有的project中,里面的数据如果与project中TestData.yaml的测试数据一样时,则会被project中TestData.yaml的测试数据覆盖。比如在一个系统中,可能都会有用户名与密码,则放在GlobalData.yaml中即可,存放数据的格式为:
    loginname: test1
    password: test
    总结:如果GlobalData.yaml存在loginname: test1,在ExpectedData.yaml的common结点下存在loginname: test2,在test_Demo下存在loginname: test3,则在脚本中调用loginname时,值为test3.
    测试数据在test_Demo中的调用方式为:TestData("loginname")

5.ExpectedData.yaml的作用

    ExpectedData.yaml是存放期望值的文件
    ExpectedData.yaml存放数据的格式为:
    hello: 123
    world: 234
    ExpectedData.yaml中的数据在test_Demo中的调用方式为:ExpectData("hello")

6.Demo.rb的作用

    Demo.rb是存放测试方法的地方
    Demo.rb在被生成时,就已经生成好了类与所需要require的文件,格式都已定义好,只需要填写好测试方法即可,当然类名与测试方法名也可以更改,但测试方法名如果更改了,则需记得在TestData.yaml中配置上相应测试方法名。
    setUp方法是指每个测试方法运行前必须会运行的方法,getWebApplication是指创建一个浏览器的对象,调用getWebApplication后会产生一个框架的内置对象@b(类似于watir中@b=Watir::IE.new)。
    tearDown是指每个测试方法运行后必须会运行的方法。@b.close指关闭浏览器,这是watir中的API。
    test_Demo是测试方法,测试方法必须以test开头,否则会不被当成测试方法,这样即使在TestData.yaml中配置了,也不会被运行。
    test_Demo中被注释的项都是在test_Demo中可以被使用的方法
    AutoTest("") 调用Demo.yaml中页面元素对象
    TestData("") 调用TestData.yaml中的测试数据
    ExpectData("") 调用ExpectedData.yaml中的期望值数据
    ConfigData("") 调用conf.yaml中的配置数据
    LoadObject("") 在脚本中加载其它的页面元素对象文件,其文件只能是yaml文件,格式与Demo.yaml文件格式一样,加载的页面元素对象如果与Demo.yaml中一致时,则会覆盖Demo.yaml文件中的数据。此时工作路径在testcase\Demo下,如果要加载testcase\test1.yaml中的数据,则为LoadObject("../test1.yaml")
    LoadTestData("") 在脚本中加载其它的测试数据文件,其文件只能是yaml文件,格式为:
    hello: 123
    加载的测试数据如果与TestData.yaml中 一致时,则会覆盖TestData.yaml文件中的数据。此时工作路径在testcase\Demo下,如果要加载testcase\test2.yaml中的数据,则为LoadTestData("../test2.yaml")
    LoadExpectData("") 在脚本中加载其它的期望值数据文件,其文件只能是yaml文件,格式与ExpectedData.yaml文件格式一样,加载的期望值数据如果与ExpectedData.yaml中 一致时,则会覆盖ExpectedData.yaml文件中的数据。此时工作路径在testcase\Demo下,如果要加载testcase\test3.yaml中的数据,则为LoadExpectData("../test3.yaml")
    TransferData("") 在测试方法运行完成后,会在lib/transfer.yaml(如果是1.8版本的,则在config/transfer.yaml)中保存该测试方法的返回值,这样在其它的project中可以调用:
    TransferData("test_Demo")会返回测试方法test_Demo最后一次运行的返回值(TransferData("")还不太完善,处理方式还没有想清楚,所以大家慎用)
    assert_string("","",""),assert_array("","",""),assert_hash("","",""),assert_true(true,""),assert_false(false,"") 这是五个断方方法,这五个方法中的最后一个参数可以为空,也可以不写,其数据为自已添加,会反应在测试报告中,比如:assert_string("123","123","should be 123")
    l "" 是指在测试方法中添加log,其会反应在测试报告中,比如 l "this is the first step","this is the first step"这一句话会显示在测试报告中。

7.大家在使用的过程中,如果有任何疑问或建议,可直接联系我(QQ群号:254285583),我会第一时间给出答案。希望大家试用愉快。共同学习,共同进步。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

  • TA的每日心情
    无聊
    昨天 09:05
  • 签到天数: 1050 天

    连续签到: 1 天

    [LV.10]测试总司令

    2#
    发表于 2013-5-20 09:06:34 | 只看该作者
    支持!
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-22 03:35 , Processed in 0.078308 second(s), 25 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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