(给Python开发者加星标,提升Python技能)

来源:  叁藏法师

https://www.cnblogs.com/sanzangTst/p/8376550.html

【导语】Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。本文介绍selenium的框架设计。

自动化测试框架

1.什么是自动化测试框架

简单来说,自动化测试框架就是由一些标准,协议,规则组成,提供脚本运行的环境。自动化测试框架能够提供很多便利给用户高效完成一些事情。

框架具有以下一些优点:

1)代码复用

2)最大覆盖率

3)很低成本维护

4)很少人工干预

5)简单报告输出

2.常见的测试框架分类

1)基于模块的测试框架

2)基于库(Library)结构测试框架

3)数据驱动测试框架,和QTP很像

4)关键字驱动测试框架,也是QTP过来的

5)混合测试框,3 4和综合

6)行为驱动开发测试框架

3.框架基本组件

1)需要配置文件管理

2)业务逻辑代码和测试脚本分离

3)报告和日志文件输出

4)自定义的库的封装

5)管理、执行脚本方式

6)第三方插件引入

7)持续集成

解释:

我们需要一个配置文件去控制一些,环境信息,开关,配置文件可以是txt/xml/yaml/properties/ini,一般.properties使用较多在JAVA里,本文是Python系列,我可能会选择ini文件。

业务逻辑代码和测试脚本分离,不像我们刚开始学习Selenium那样,代码和脚本在一个类文件里演示。我们根本没有用到代码重构,复用。代码和用例文件分离后,更加清晰,去多人开发脚本,方便调试。

报告和日志文件输出,你执行了多少case,case结果如何,这都需要报告来展示,一般采用第三方插件来实现这个功能,好多报告格式是html,简单,明了的风格。日志输出也很重要,如果发生报错,脚本执行失败,通过日志快速定位发生问题位置。

用户自定义库,这个很好理解,我们很多功能需要重复调用,这样我们就写成一个公用方法,放到工具包下,每次方便调用,例如浏览器引擎类和basepage.py的封装。

管理和执行脚本的方式,例如Python中单元测试框架unittest使用率非常高。

第三方插件,有时候,我们一些功能,需要借助第三方插件,能够更好实现,例如AutoIT,来实现文件上传和下载。还有利用第三方报告插件生成基于html格式的测试报告。

持续集成,git,svn,ant,maven,jenkins,我们会把这整合到jenkins,达到持续集成,一键执行测试脚本。

根据以上的特点介绍,我大致用以下图来描述一下,一个简单的自动化测试框架,可能包含哪些组成部分。

unittest单元测试框架unittest是一个单元测试框架,是Python编程的单元测试框架。unittest支持测试自动化,共享测试用例中的初始化和关闭退出代码,在unittest中最小单元是test,也就是一个测试用例。要了解unittest单元测试框架,先来了解以下几个重要的概念。测试固件(test fixture)一个测试固件包括两部分,执行测试代码之前的准备部分和测试结束之后的清扫代码。这两部分一般用函数setUp()和tearDown()表示。这里举例以下,例如要测试百度搜索selenium这个场景,我们的测试固件可以这样写,setUp()里写打开浏览器,浏览器最大化,和打开百度首页等脚本代码;在tearDown()里写结束搜索后,退出并关闭浏览器的代码。测试用例(test case)unittest中管理的最小单元是测试用例,一个测试用例,包括测试固件,和具体测试业务的函数或者方法。一个测试用例中,测试固件可以不写,但是至少有一个已test开头的函数。unittest会自动化识别test开头的函数是测试代码,如果你写的函数不是test开头,unittest是不会执行这个函数里面的脚本的,这个千万要记住,所有的测试函数都要test开头,记住是小写的哦。测试套件 (test suite)很简单,就是很多测试用例的集合,叫测试套件,一个测试套件可以随意管理多个测试用例。如果测试用例比作单个学生,测试套件就是好像是班级的概念。测试执行器 (test runner)test runner是一个用来执行加载测试用例,并执行用例,且提供测试输出的一个组建。它可以加载test case或者test suite进行执行测试任务。我们举例来,练习一下test fixture和test case的使用,学习unittest的简单用法:1. 新建一个testbaidu.py的文件2. 导入unittest模块3. 当前测试类继承unittest.TestCase,相当于当前利用unittest创建了一个test case,这个test case是能够被unittest直接识别。4. 写setUP(),主要是打开浏览器和打开站点5. 写一个test_search()用例写搜索的代码6. 写tearDown(),主要是浏览器退出操作相关脚本代码如下:

# coding=utf-8  import time  import unittest  from selenium import webdriver      class BaiduSearch(unittest.TestCase):        def setUp(self):          """         测试固件的setUp()的代码,主要是测试的前提准备工作         :return:         """          self.driver = webdriver.Chrome()          self.driver.maximize_window()          self.driver.implicitly_wait(8)          self.driver.get("https://www.baidu.com")        def tearDown(self):          """         测试结束后的操作,这里基本上都是关闭浏览器         :return:         """          self.driver.quit()        def test_baidu_search(self):          """         这里一定要test开头,把测试逻辑代码封装到一个test开头的方法里。        :return:         """          self.driver.find_element_by_id('kw').send_keys('selenium')          time.sleep(1)          try:              assert 'selenium' in self.driver.title              print ('Test Pass.')          except Exception as e:              print ('Test Fail.', format(e))    if __name__ == '__main__':      unittest.main()
解释:

最后结尾处的unittest.main(),添加这个是支持在cmd,里面,cd到这个脚本文件所在的目录,然后python 脚本名.py执行,如果不添加这一段,是无法执行cmd里面运行脚本的,在PyCharm中,不添加最后一段,也可以通过,右键 Run "unittest xxx",来达到执行效果。

什么是POM

POM,中文字母意思是,页面对象模型,POM是一种最近几年非常流行的自动化测试模型,或者思想,POM不是一个框架,就是一个解决问题的思想。采用POM的目的,是为了解决前端中UI变化频繁,从而造成测试自动化脚本维护的成本越来越大。下图,形象描述了POM的好处。

从上图看出,采取了POM设计思路和不采取的区别,左侧把测试代码和页面元素都写在一个类文件,如果需要更改页面,那么就要修改页面元素定位,从而要修改这个类中测试代码,这个看起来和混乱。右侧,采取POM后,主要的区别就是,把页面元素和业务逻辑和测试脚本分离出来到两个不同类文件。ClassA只写页面元素定位,和业务逻辑代码操作的封装,ClassB只写测试脚本,不关心如何元素定位,只写调用ClassA的代码去覆盖不同的测试场景。如果前端页面发生变化,只需要修改ClassA的元素定位,而不需要去修改ClassB中的测试脚本代码。POM主要有以下优点:1. 把web ui对象仓库从测试脚本分离,业务代码和测试脚本分离。2. 每一个页面对应一个页面类,页面的元素写到这个页面类中。3. 页面类主要包括该页面的元素定位,和和这些元素相关的业务操作代码封装的方法。4. 代码复用,从而减少测试脚本代码量。5. 层次清晰,同时支持多个编写自动化脚本开发,例如每个人写哪几个页面,不影响他人。6. 建议页面类和业务逻辑方法都给一个有意义的名称,方便他人快速编写脚本和维护脚本。

- EOF -

推荐阅读  点击标题可跳转

1、再次为王!Python 是 2020 年度编程语言

2、Selenium 自动化测试环境搭建

3、自动化测试基础篇:Selenium unittest 简介

觉得本文对你有帮助?请分享给更多人

推荐关注「Python开发者」,提升Python技能

点赞和在看就是最大的支持❤️

修改pom文件_自动化测试基础篇:Selenium 框架设计(POM)相关推荐

  1. 自动化测试基础篇--Selenium框架设计(POM)

    一.自动化测试框架 感谢木棉花的漂泊分享,内容转自链接:http://www.cnblogs.com/fengyiru6369/p/8053035.html 1.什么是自动化测试框架 简单来说,自动化 ...

  2. 自动化测试基础篇--Selenium中数据参数化之TXT

    一.搜索参数化 在TXT文件中保存需要搜索的内容: 测试代码: 1 #!/usr/bin/env python 2 #-*- coding: utf-8 -*- 3 #@File : txt.py 4 ...

  3. 自动化测试基础篇--Selenium浏览器操作

    Selenium 主要提供的是操作页面上各种元素的方法,但它也提供了操作浏览器本身的方法,比如浏览器的大小以及浏览器后退.前进按钮等. 一.控制浏览器窗口大小 有时候我们希望能以某种浏览器尺寸打开,让 ...

  4. 自动化测试基础篇--Selenium多窗口、句柄问题

    有时我们在打开浏览器浏览网页时,当点击网页上某些链接时,它不是直接在当前页面上跳转,而是重新打开一个新标签页面,对于这种情况,想在新页面上操作,就得先切换窗口了.获取窗口的唯一标识用句柄表示,所以只需 ...

  5. 自动化测试基础篇--Selenium发送测试报告邮件

    发邮件需要用到python两个模块,smtplib和email,这俩模块是python自带的,只需import即可使用.smtplib模块主要负责发送邮件,email模块主要负责构造邮件.其中MIME ...

  6. Linux平台Makefile文件的编写基础篇和GCC参数详解

    问:gcc中的-I.是什么意思....看到了有的是gcc -I. -I/usr/xxxxx..那个-I.是什么意思呢 最佳答案 答:-Ixxx 的意思是除了默认的头文件搜索路径(比如/usr/incl ...

  7. python 修改pom文件_引用pom文件

    Maven2集成Idea创建多模块项目 创建项目 选择Maven Module,新建一个Maven项目 选择maven-archetype-quickstart选项,点击下一步 顶级项目就创建好啦,把 ...

  8. jenkins修改pom文件_动手实践:美化 Jenkins 报告插件的用户界面

    对于 Jenkins 而言,可使用插件来可视化各种构建步骤的结果.有一些插件可用于呈现测试结果.代码覆盖率.静态分析等.这些插件通常都会获取给定构建步骤的构建结果,并在用户界面中显示它们.为了呈现这些 ...

  9. jenkins修改pom文件_从Jenkins中的pom文件自动派生强制性SonarQube属性

    情况: 我想用由詹金斯(1.642.4)触发的SonarQube(5.4)分析我的项目.它是使用maven构建的Java项目. 我看到两种触发分析的方法: 发布构建操作"使用maven进行S ...

最新文章

  1. 红帽、Docker、SUSE 在俄罗斯停服
  2. 如何在一家内容公司,从零搭建起一支技术团队
  3. 云信小课堂|如何实现音视频通话
  4. 实验2 递归和分治法(二分查找)
  5. 【MySQL】sysbench压测服务器及结果解读
  6. 洛谷2619/bzoj2654 Tree(凸优化+MST)
  7. Python Web框架Tornado的异步处理代码演示样例
  8. java值参_JAVA赋值和传参理解
  9. 搞IT也不能不懂“五险一金”啊
  10. centos7安装python3_详解Centos7升级python 2.7至Python 3.7
  11. 常程加盟小米,“电磁炉”组合出道,网友喊话雷军也接收一下罗永浩!
  12. JS字符串转换为数字,Number(),parseInt()和parseFloat()的区别
  13. C语言程序设计练习题解
  14. 安装APK时INSTALL_FAILED_ALREADY_EXISTS的解决办法
  15. office出错怎么简单修复
  16. java 读取字符串文件_Java读取文件为字符串
  17. 便宜的前端培训班都有哪些?
  18. yudian温控表a1温度怎么补偿_yudian温控表a1说明书
  19. 安卓4.4和6.0系统wifi开关设置
  20. 在知乎上看到的一个关于Linux运维工程师必知的几点,希望对有志于从事运维工作的你有帮助

热门文章

  1. 关注丨数据库在线学习实训平台即将发布,长江鲲鹏-墨天轮联合实验室取得重大突破...
  2. 智能时代,企业如何“聚数为智”加速数字化转型?
  3. 嘉年华回顾丨 王津银带你深入解析自动化运维能力框架
  4. 守得云开见月明:一次ASM存储高可用故障解决过程分析
  5. 华为云大数据轻模式体验:忘掉底层烦恼,专注数据开发
  6. 解析对偶理论与对偶单纯性法
  7. 经典永流传,华为云媒体 AI 让老电影焕发新生
  8. 想了解物联网应用的自动部署,看这篇就够了
  9. 大数据组件运维工具之HBase
  10. Head First设计模式读书笔记七 第八章 模板方法模式