自动化测试的设计模式(下)——持续测试(11)

发表于:2022-9-28 09:00

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:陈磊    来源:51Testing软件测试网原创

分享:
  应用查找这一组页面元素的语句selectSuccess = GroupPageElement(xpath ='//*[@id= "success"]/option')就可以定位任意一个下拉列表框内的内容。如果选择“成功”,那么selectSuccess.[ u'成功'].click()就完成了单击,流程测试中的脚本清晰。
  同时,在PageObject类中加入了以下3个成员函数。
  getTitle():用于获取当前页面的标题,以方便在测试过程进行页面跳转的检测。
  switchTo():整合了iframe或者窗口之间的跳转。
  acceptAlert():用于接受一些警告交互。
  3个成员函数如代码清单2-10所示。
代码清单2-10
  除对page-objects的一些修改之外,这里还对Python中标准的unittest框架做了二次封装,以便应用。unittest是Python自带的单元测试框架,作为标准Python中的一个模块,是其他很多类似框架和工具的基础。unittest类似于Java中的JUnit,支持自动化测试,共享的启动、测试脚本的关闭,unittest独立于测试报告框架,提供了测试套件模式。
  unittest有以下4个重要概念。
  测试固件(test fixture):代表一个或者多个测试准备工作,以及任何相关的初始化工作。例如,建立临时数据源、数据库代理、临时目录,以及启动服务端服务等。
  测试用例(test case):一次测试中的最小单元,通过一次输入和一次输出完成测试。unittest提供了一个父类TestCase,该类用于创建测试用例。
  测试套件(test suite):测试用例的集合,主要用于将不同测试用例聚合到一起。
  测试运行器(test runner):一个执行测试组件,用于将测试结果统一输出给测试者。测试结果可以使用图形界面、文本接口或者一个特殊的返回值显示。
  在hi_po的hi_po_unit中,设计了unittest.TestCase的子类HiPOUnit,重写了setUp()和tearDown()方法以完成部分测试固件中的工作;设计了TestCaseWithClass()和TestCaseWithFunc()两个静态方法,提供了按测试类和测试方法添加测试用例到测试套件的途径。具体代码如代码清单2-11所示。
代码清单2-11
  从代码中可以看出,重写的setup()已经引入了WebDriver的初始化,重写的tearDown()函数释放了测试执行程过程中占用的一些资源。
  站在测试用例的角度看,以上代码包含了执行步骤和输入数据,PageObject模式前面的一些改动都是为了执行步骤而做的。对于输入数据,接下来将通过简单工厂模式,完成数据驱动的开发。简单工厂模式属于创建型模式,又称作静态工厂方法(Static Factory Method)模式,但不属于23种设计模式。
  简单工厂模式指由一个工厂对象决定创建哪种产品类的实例。简单工厂模式是工厂模式家族中最简单的一种模式,可以理解为不同工厂模式的一个特殊实现。
  在数据驱动部分的设计中,首先设计Param的父类,其他类型的参数文件通过对应的子类实现,当前使用.xls格式,因此由XLS类实现。具体代码如代码清单2-12所示。
代码清单2-12
  设计了ParamFactory的工厂类后,通过MAP的key-value形式实现不同参数的调用。具体代码如代码清单2-13所示。
代码清单2-13
  这样,当添加一种新的参数类型时,只需要实现对应类型的Param的子类,然后维护ParamFactory中的MAP就可以通过简单工厂模式进行使用,减少代码的整体变动。
  当利用XLS类解析Excel参数时,Excel有一个默认格式的约束。
  第1行是参数的实际中文意思。
  第2行是参数的名称。
  第3行及其后面的参数是实际测试过程中的参数。
  一行是一条测试用例。
  PageObject模式的优越性具体如下。
  全部业务逻辑操作用到的同一个页面都会调用同一段代码,可提高测试脚本的复用性。
  Object中统一维护测试页面的代码,当发生变更时,直接修改Object的代码即可,无须大面积搜索代码中对应页面元素的代码,可提高代码的可维护性。
  PageObject设计模式将页面代码和业务逻辑分开,使业务逻辑代码仅仅表述业务逻辑,从而提高代码的可读性。
  2.4.2  自动化测试的ScreenPlay设计模式
  已经开发的设计模式有23种之多,自动化测试的设计模式不仅有PageObject设计模式,还有ScreenPlay设计模式。ScreenPlay设计模式也曾被称作Journey模式。ScreenPlay设计模式更好地将SOLID(Single Responsibility,Open Close,Liskov Substitution,Interface Segregation,Dependence Inverse,单一功能、开闭、里氏替换、接口隔离及依赖反转)原则应用到自动化测试中。
  图2-8描述了ScreenPlay设计模式,它充分利用了BDD(Behavior Driven Development,行为驱动开发)设计方法。
图2-8  ScreenPlay设计模式
  其中,Screen近似等同于PageObject设计模式中的Object,ScreenPlay设计模式的Screen类更小,拥有更精简、更聚焦的Task类,可读性高且继承关系简单。当前ScreenPlay设计模式的测试框架是Serenity BDD,如果读者感兴趣可以深入研究一下。
查看《持续测试》全部连载章节
版权声明:51Testing软件测试网获得作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任
精选软件测试好文,快来阅读吧~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号