京东系统质量保障技术实战(样章)- 3.1.3 构建一款基于Selenium 的易用WebUI 框架

2017-10-30   作/译者:京东 - 孔祥云

3.1.3 构建一款基于Selenium 的易用WebUI 框架

        数据驱动测试有两大特点: 

        (1)测试脚本与测试数据分离;
        (2)通过配置不同长度的二维数组进行每组数据的轮询测试。
        通常用一个表来存储真实的测试数据。Excel 表、数据库表、文本文件和数组都可以用作数据的载体。
        在构建WebUI 框架时,我们考虑用这种方式将测试数据写入到文件中,与测试脚本进行分离。框架考虑使用TestNG 的DataProvider 方式分发测试数据,在CSV 文件中定义测试数据集的长度和值。测试脚本通过传入参数的方式接收数据。而 TestNG 负责解析并分发测试数据。
        框架基于Selenium WebDriver 开源技术,使用Maven 工具进行项目管理,通过TestNG 工具测试脚本串联。框架提供丰富的基于WebElement 的方法关键字来简化操作步骤。使用CSV 文件存储测试数据,实现测试数据和测试脚本的分离,方便数 据管理。
        整体思路是这样的:建立Element 的父类,把操作元素的方法封装起来,形成一套关键字。例如:click、double click、input、select 等。然后通过Selenium IDE录制测试过程,导出一个CSV 文件。文件包含元素名称、测试数据、元素定位采取 类型、元素位置。
        有了CSV 文件后,通过程序转化成Java 文件。这个生成的Java 文件,其实就是一个PageObjects 里面定义的一个Page。
        有了这个Page 类,我们只需要通过代码编写驱动程序即可。
        这样就完成了元素、驱动的集成。当元素位置改变后,只需要改变CSV 文件即可。
         第一,建立一套关键字驱动API

        这部分需要将WebElement 再封装一层。每个元素不是定义为WebElement 对象,而是自定义的Element 对象。Element 对象有许多封装好的方法,例如:click、double click、input、select 等。 

         第二,如何写好驱动程序
         当有了Page 和Element 之后,驱动程序就非常好写了。通过PageFactory,把所有的Page 初始化后,驱动程序写法非常简单。如下:
        loginPage.userName.input("test");
  • loginPage 是由CSV 文件转化的Java 类。 
  • userName 是loginPage 类中的属性,这个属性实际上就是元素对象,它是继承了Element 对象的。 
  • input 是Element 提供的关键字方法,作用是模拟键盘的输入,内部实际是调用了WebElement 的sendKeys 方法。 
  • test 是输入的实际内容,这个由驱动程序控制。可以将这部分内容通过数据驱动的方式实现。 
       每个操作实际上都可以这样写,其好处是简化了许多重复的代码。编写者只需要关注业务逻辑即可。这样就可以串成一个完整的用例,然后通过TestNG 进行测试编排。
        第三,TestNG 的扩展
        TestNG 默认的HTML 报表虽然信息全面,但是不够直观。ReportNG 提供了一种简单的方式来查看测试结果,并能够对结果代码进行着色。还可以通过修改CSS文件来替换默认的输出样式。所以,我们用ReportNG 作为报表生成插件,在项目中的listener 中加入此插件。同时,生成的报告还可以通过邮件方式发送出去,这样就可以更加及时地收到用例执行结果了。
        综上所述,本节首先介绍了Selenium 基础,接着详细讲述了Selenium 原理,只有了解了原理才能更好地使用Selenium。然后介绍了Selenium 的高级技巧。之后介绍了PageFactory 这种设计模式。WebUI 测试代码经过这种设计模式的重新设计后,呈现出模块化的特点,具有高可读性、高复用性。最后给出了构建一款WebUI 框架的要素。这里主要讲述了设计思路,希望能得到读者的共鸣。


Testwo官方店铺商品链接:



声明:本文为本站编辑转载,文章版权归原作者所有。文章内容为作者个人观点,本站只提供转载参考(依行业惯例严格标明出处和作译者),目的在于传递更多专业信息,普惠测试相关从业者,开源分享,推动行业交流和进步。 如涉及作品内容、版权和其它问题,请原作者及时与本站联系(QQ:1017718740),我们将第一时间进行处理。本站拥有对此声明的最终解释权!欢迎大家通过新浪微博(@测试窝)或微信公众号(测试窝)关注我们,与我们的编辑和其他窝友交流。
273° /2738 人阅读/0 条评论 发表评论

登录 后发表评论