• web自动化测试:watir+minitest(三)


    本文,谢绝转载。

    整体框架设计:

    1、用例的解耦性。一个测试用例一个脚本。而并非minitest中的N个test写在一个文件中

    2、单独调试与全量连跑或部分连跑

    3、任意变量、参数配置。这点对后期维护或产品变更频繁非常重要,后面介绍

    4、元素解耦,一个元素定义一个方法

    5、报告结果展示

    我们来看看具体目录结构划分:

    image

    总共有四个目录:lib存放库文件;rake启动测试连跑,连跑前后对环境的一些操作;screenshot提供对单独调试和连跑失败后截图保存;temp为测试系统数据文件,比如鉴权文件,地图导入文件等

                        testcase就是存放测试脚本的目录了。

    lib下面的3个文件:

    ENV主要为变量设置文件。我的要求是,只要涉及到会变动的参数都给定义到该文件。我不想看到后期开发一个小改动,我们需要改动一批脚本

    image

    system文件主要为被测系统的元素集合。一个元素一个方法。我们对注释、方法名的命名都有严格的标准

    image

    action:一组动作的集合。比如登录系统包括输入账号、密码、点击登录。我把这些动作封装成一个登录的方法。为什么要这么做?举个例子:

              后面需求改动了,在输入完密码后需要输入验证码。如果你有5000个脚本都做了登录,那么你需要改动5000个脚本。而我只要在action的login中

              加入验证码的步骤即可。

    image

    testcase中用例示例:

    #========================================================
    #+++++++++++++++++  测试用例信息   ++++++++++++++++
    # 用例  ID: RQ_login_succ_001_001
    # 用例标题: 管理员账号登录成功
    # 预置条件: 
    #	1.打开浏览器,进入系统登录界面
    # 测试步骤:
    #	1.输入正确的管理员账号:admin和密码:123456;
    #	2.点击“登录”按钮
    # 预期结果:
    #	2.登录成功,跳转到“任务配置”页面
    # 脚本作者: 
    # 写作日期: 20160921
    #=========================================================
    require 'crowdSysAction'
    require_lib($debugLog)
    
    class CrowdSystemTest < MiniTest::Unit::TestCase
    	
      def setup
    	#实例化driver
    	@driver = CrowdAction.new(@dr)
    	#打开被测系统
    	@driver.open_test_system($testBrowser,$crowdSysURL)
    
      end
    
      def test_RQ_login_succ_001_001
    	@driver.login($adminAccount,$adminPasswd)
    	#登录后,检查当前页面存在assert_enterTaskConfig_element元素,即认为登录成功
    	assert(@driver.assert_enterTaskConfig_element.when_present($waitTime).present?,"登录失败,未跳转到指定页面")
    	#注销系统,确认:0;取消:1
    	@driver.logout()
      end
    
      def teardown
    	#关闭浏览器
    	@driver.close_browser
      end
    end
    

     对工程打包成gem的方法请参看我前面写的文章。http://www.cnblogs.com/fithon/p/6381514.html

    git工程位置:https://shencanhui@gitlab.com/shencanhui/workspace.git

  • 相关阅读:
    分享:CodeLite 5.1 发布,C++ 集成开发环境
    Elementary Sockets:readn, writen, and readline Functions
    How to handle boost::iostreams::gzip_dec C++ Forum
    分享:python/c++ 深拷贝与浅拷贝(转)写∽好
    我刚刚通过 @盛大网盘EverBox 分享了 Web协议与实践HTTP.、网络协议、缓存技术和....pdf, 欢迎大家下载!
    Is zlib threadsafe?
    print "\v"
    分享:混合编译c和cpp的makefile模板
    Elementary Sockets:readn, writen, and readline Functions
    c的socket教程 二进制 博客频道 CSDN.NET
  • 原文地址:https://www.cnblogs.com/fithon/p/6687835.html
Copyright © 2020-2023  润新知