• 13
  • 13
分享
  • 减轻自动化维护小Tip:页面对象模型的妙用——软件测试圈
  • 曼倩诙谐 2021-08-02 11:39:58 字数 2739 阅读 2277 收藏 13

  无论自动化或手工测试其主要目的都是为了持续提高产品的质量,无论企业的项目采取哪种软件开发模型, 自动化测试早已成为当下测试过程中不可或缺的一部分,增加自动化测试覆盖率也已被企业视为衡量测试团队效率的关键绩效指标(KPI)之一。

  今天我们就来聊一聊Web自动化测试中的页面对象模型(POM),开启你对它的认知,探访POM是如何通过减少代码重复来有效减轻自动化维护的工作。

  1. 页面对象模型(POM)攻略

  页面对象模型是一种设计模式,其核心重点是通过减少代码重复,进而达到最小化代码更新/维护中涉及的工作量。 基于页面对象模型(POM)的实现包含以下关键要素:

  (1) 页面类(Page Class/Page Object):

  —— 包含被测页面中页面元素(WebElements)对象的存储库;

  —— 包含针对这些页面元素(WebElements)执行操作的实现;

  (2) 测试用例(Test Cases):

  —— 包含实际测试场景,测试步骤的实现;

  —— 通过页面类(Page Class)中的方法与页面元素(WebElements)进行交互;

  —— 当页面元素(WebElements)发生更改,仅需要更新页面类(Page Class),测试代码保持不变;

  2. 线性脚本测试用例Demo

  我们以“当当网”高级搜索为例,通过Selenium Python + unittest进行线性脚本测试用例展示。

  【测试场景】

  (1)通过Chrome浏览器,打开“当当网”高级搜索页面

  (2)定位到“数字商品”Tab

  (3)输入相关查询词条

  (4)执行搜索

  (5)关闭浏览器

图片 1.png

  【测试脚本实现】

  (1)相关库的导入

图片 2.png

  (2)创建测试用例

  到此,该场景的自动化测试脚本编写完成。显而易见,这属于中规中矩的自动化测试脚本,其中setUp和tearDown分别用于做浏览器驱动的初始化和关闭,test_DangDangSearch用来执行搜索查询相关的测试步骤。

图片 3.png

图片 4.png

图片 5.png

  3. 页面对象模型(POM)实现Demo

  通过观察后不难发现,当被测页面上任意一个元素发生变更时,我们需要对整个测试用例进行更新,如果这样的测试用例有几十个,甚至于几百个呢,难不成一个个脚本更新吗?这样做未免效率太低了,自动化测试的优势将直接变成了劣势。

  所幸的是,页面对象模型(POM)设计给我们带来了解决方案。下面我们将通过引入页面对象模型(POM),对上述线性自动化测试脚本进行优化。

  【测试场景】

  同上。

  【分析与设计】

  (1)为了将上面的线性测试脚本移植到Selenium Python的页面对象模型中,我们将约定遵循一个目录结构,后续无论项目规模和复杂程度如何,都可以将该目录结构视作模板进行扩展;

  (2)目录结构的选择取决于测试需求,测试复杂性以及整个研发测试团队的经验;

  (3)根据以上条件,我们可以得出如下目录结构:

图片 7.png

  根据约定的目录结构,在Pycharm中我们新建如下项目:

图片 9.png

  【应用PO模式的脚本实现】

  (1)元素定位器

  如上图结构所示,目录Project-Directory \ PageObject包含Locators.py,其中根据需要添加了元素定位方式,具体代码实现如下:

  ·Src-----PageObject-----Locators.py

图片 10.png

  由于元素定位方式是根据被测页面添加的,因此后续如有任何关于元素定位方式的变更只需要在Locators.py文件中做相应的更改即可,其他项目文件不会受到影响。

  (2)被测页面Page

  该文件用到了Locators.py中定位的元素,并实现了Locators.py中相关元素的操作,具体代码实现如下:

  ·Src-----PageObject-----Pages-----SearchPage.py

图片 11.png

图片 12.png

图片 13.png

  (3)Web驱动初始化

  为了提高代码的可管理性和可移植性,我们将Selenium Webdriver初始化设置与测试套件和测试用例分开存放;

  如果后续计划使用其他Web驱动程序执行测试时,仅需要在WebDriverSetup.py文件中进行更改即可,其余项目文件的实现保持不变。

  下面是Selenium Webdriver的setUp和tearDown方法在WebDriverSetup.py文件中的统一实现。

  ·Src-----TestBase-----WebDriverSetup.py

图片 15.png

  使用页面对象模型(POM)最终目的是为了最大程度地减少重复代码的百分比,并使代码更具可移植性。

  我们通常会将实现划分为以下3部分:

  ·定位符Locators,页面Pages(基于被测网页)

  ·测试脚本(即测试用例,基于被测网页)

  ·测试套件(测试用例的汇总)

  (4)测试用例

  目前我们已经准备好了WebDriver设置和所需被测页面的实现,接下来就是测试用例的脚本编写了。

  下面是“当当网”高级搜索查询功能的测试用例脚本实现,该脚本使用了目前为止已完成的测试基础结构(“定位器Locator+页面Page”)。

  ·Test ----- Scripts ----- test_Home_Page.py

图片 16.png

  ·Test ----- Scripts ----- test_DangDang_Search.py

图片 17.png

图片 18.png

  由上述测试用例可见, 我们首先创建了Search类的实例,以便于在后续部分中使用该实例的属性及方法,以下方法是在当当高级搜索页面种进行的操作:

  ·tab.click()

  ·bookname.send_keys()

  ·ISBN.send_keys()

  ·author.send_keys()

  ·publisher.send_keys()

  ·submit.click()

  (5)测试用例套件触发器

  用例套件触发器用于加载测试用例到测试套件后,再批量启动执行。具体代码实现如下:

  ·Test ----- TestSuite -----TestRunner.py

图片 20.png

  4. 总结

  页面对象模型(Page Object Model)使测试代码更易于维护,并最大程度地减少项目/产品中的代码重复率。因此,无论Web应用程序亦或是网页中UI是否频繁更改,测试与开发团队都应积极探索并有效将其应用于Selenium自动化测试中。

  以上基于页面对象模型(POM)进行了详细介绍,由浅入深展示了线性自动化测试脚本经过POM改进优化的整个过程,希望能够给大家的测试工作带来帮助,感兴趣的读者不妨一试。



作者:罗狮小钉   

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 测试工作中有时候会对数据库进行压力测试,jmeter实现这个需求较为简单,在这里简单介绍下。可以参考我之前写的15. Jmeter-配置元件二步骤:1、选中测试计划,添加mysql-connector-java-5.1.7-bin.jar插件2、添加一个线程组,设置线程组为103、选中线程组,添加一个配置元件:JDBC Connection Configuration4、对配置元件进行配置5、添加JDBC request6、对JDBC request 进行配置7、添加查看结果树8、运行测试计划作者:软件测试汪链接:https://www.jianshu.com/p/be496e4e00be
            0 0 1190
            分享
          • 背景APP Push的定义为在手机终端锁屏状态下通知栏展示或在操作前台顶端弹出的消息通知,点击后可唤起对应的APP,并在APP内跳转到指定页面。push流程:push流程对应的测试方案针对整个push消息下发、客户端接收上报流程,测试点可以梳理为:能收到push消息、push消息能正常点击调起APP并跳转到指定页面。push测试工具的实现1、push消息发送工具:push消息发送工具的具体使用:push发送工具的设计与实现:支持多APP、环境、push消息类型的选择,可以给指定用户uid或者设备token发送自定义的push消息。2、push可达性分析工具push可达性分析工具的具体使用:pu...
            0 0 1164
            分享
          •   据路透社报道,两位知情人士称,小米已要求印度反垄断机构召回其发现该公司和沃尔玛旗下 Flipkart 违反竞争法的报告,称该报告包含商业机密。  知情人士表示,小米在一份申请中告诉印度竞争委员会(CCI),Flipkart 的调查报告包含小米公司的敏感业务数据,这些数据在与案件各方共享该文件时本应经过编辑。  一位消息人士称,小米对 Flipkart 报告的担忧之一是,该报告包含了其产品型号的销售情况,这是敏感信息。小米、Flipkart 和 CCI 没有立即回应询问。  报道提到,CCI 不会公开调查报告,而是仅与案件各方分享。小米提出的召回要求各方退回报告,然后对报告进一步审查编辑。 ...
            0 0 318
            分享
          •       Prometheus      配置说明      在istio网格中,每个组件都会暴露一个提供metrics的endpoint。Prometheus可以从这些endpoints上抓取metrics(通过Prometheus配置文件来设置scraping,端口以及TLS等)。      为了采集整个网格的metrics,需要配置Prometheus scraping组件:控制面(istiod deployment)ingress和eg...
            0 0 1791
            分享
          • 普通的移动app是需要安装的,但是绝大部分的app不会经常使用,但仍然会占用手机存储空间,所以开始出现免安装app,微信小程序实际是一种免安装的app。类似的比如华为、小米等手机厂商推出的快应用、支付宝小程序。微信小程序实际是运行在微信之上。小程序的类网页经过微信翻译之后以http数据的形式和服务器进行交互。小程序无法脱离微信来进行使用。微信小程序的页面可以包含:1、小程序页面(WXML+WXSS)2、M页页面(H5移动网页)3、toast信息(过一段时间会自动消失的信息,比如登录成功的提示信息,1、2秒后自动消失)4、弹窗微信小程序功能测试微信小程序分为三个版本:1、开发版2、体验版(需要在...
            8 8 1419
            分享
      • 51testing软件测试圈微信