《Selenium 2 自动化测试实战》读书笔记_selenium2自动化测试实战-程序员宅基地

技术标签: 自动化测试  selenium  软件测试  测试工具  职场和发展  

背景

最近在弄 appium,然后顺便发现了 Selenium 框架和这本书,恰好这本书也介绍了一些软件测试 & 自动化测试的理论知识,遂拿过来学习学习。所以本文几乎没有实践内容,大多都是概念和工具的 mark,后续若有实践,我会来补充的。

一、软件测试 分类

1、根据项目流程阶段划分

  • 需求分析

  • 设计

  • 编码

  • 单元测试

  • 集成测试

  • 系统测试

  • 验收测试

在这里插入图片描述

2、白盒测试、黑盒测试、灰盒测试

白盒测试的意义:有时候输出是正确的,但内部其实已经错误了,这种情况非常多。

灰盒测试的意义:如果每次都通过白盒测试来操作,效率会很低,黑盒又太过笼统,因此折中的灰盒测试比较适合。

3、功能测试与性能测试

功能测试主要检査实际功能是否符合用户的需求。

功能测试又可以细分为很多种:逻辑功能測试、界面测试、易用性测试、安装测试、兼容性测试等。


性能测试主要有时间性能和空间性能两种。

时间性能:主要是指软件的一个具体的响应时间。

空间性能:主要指软件运行时所消耗的系统资源。

4、手工测试与自动化测试

自动化测试不能完全地替代手工测试,自动化测试的目的仅仅在于让测试人员从烦琐重复的测试过程中解脱出来,把更多的时间和精力放到更有价值的测试中,例如探索性测试。而自动化测试更多的是用来进行冒烟测试和回归测试。

自动化测试是本文要探讨的重点。

5、冒烟测试、回归测试、随机测试、探索性测试和安全测试

冒烟测试:引入到软件测试中,就是指测试小组在正式测试一个新版本之前,先投入较少的人力和时间验证一个软件的主要功能,如果主要功能都没有运行通过,则打回开发组重新开发。这样做的好处是可以节省时间和人力投入到不可测的项目中。

回归测试:回归测试是指修改了旧代码后,重新进行测试以确认修改后没有引入新的错误或导致其他代码产生错误。

随机测试

探索性测试

安全测试

6、正向测试与逆向测试

正向测试用例 (Positive Test Case) 和反向测试用例 (Negtive test Case) 是对测试用例的一种分类。

例如:一个输入只能接受输入数字 0-9,那么正向用例可以为:0,1,2,3,4,5,6,7,8,9,反向用例可以为:其它值。

反向测试用例通常指,系统不支持的输入或则状态,这类用例可以检查系统的容错能力、健壮性和可靠性。

二、何为自动化测试

自动化测试的概念有广义与狭义之分:广义上来讲,所有借助工具来辅助进行软件测试的方式都可以称为自动化测试:狭义上来讲,主要指基于 UI 层的功能自动化测试。

注意:如果没有特别说明,则本文所说的 “自动化测试” 均指 “基于 UI 的功能自动化测试”。

三、自动化测试 与 分层模型

1、测试金字塔

不同测试阶段所投入的自动化测试的比例:Unit > Service > UI。

在这里插入图片描述

2、Unit 层

单元测试:单元就是人为规定的最小的被测功能模块。规范的进行单元测试需要借助单元测试框架,如 Java 语言的 Junit、TESTNG, C# 语言的 Nunit,以及 Python 语言的 unittest、pytest 等,目前几乎所有的主流语言都有其相应的单元测试框架。

Code Review:与 Code Review 相关的插件和工具有很多,例如 Java 语言中基于 Eclipse 的 Review Clipse 和 Jupiter、主要针对 Python 语言的 Review Board 等。

现在因为 github/gitlab 的流行, 以前的工具用的很少了。不排除大厂用一些更专业的工具。

拓展:Code Review
目的:

1、改善代码质量

一些很基础的,比如缩进空格什么的,就交给 eslint 什么的去解决吧。

2、保证团队代码规范

3、提高代码性能

4、预防 bug

5、加深技术团队成员沟通,营造技术氛围

6、老带新互助成长

实践建议:

1、所有代码都必须经过 Review 才能 merge。

2、批评的时候最好同时给解决方案

3、每次 review 至少给一条正面评价,提高对方信心

4、不要在 review 中讨论需求

5、不要在 review 中讨论太多的架构或者设计模式,这个应该是在前期设计时解决的事

普及情况:

Code Review 做得好的普遍是一些比较偏技术的团队,而偏业务的技术团队比较少。

我们公司也很少做其实。

3、Service 层

接口测试:也有相应的类库或工具,例如测试 HTTP 的有 Httpunit、Postman 等。

4、UI 层

UI 自动化测试:目前主流的测试工具有 UFT、Watir、Robot Framework、Selenium 等。

JS 自动化测试:Qunit 就是针对 Javascript 的一个强大的单元测试框架,由 jQuery 团队的成员所开发,并且用在 jQuery,jQuery UI,jQuery Mobile 等项目。

其实这个也是单元测试,但是因为是前端,所以归到了 UI 这边。

四、什么样的项目适合自动化测试

(1)软件需求变动不频繁

或者一种折中的做法是先对系统中相对稳定的模块与功能进行自动化测试,而变动较大的部分用手工进行测试。

(2)项目周期较长

(3)自动化测试脚本可重复使用

(4)等等

五、自动化测试模型

1、线性测试

最原始的方法,测试用例之间可能会存在重复的操作,会导致开发成本和维护成本都很高。

2、模块化驱动测试

很好地解决了脚本的重复问题。

3、数据驱动測试

因为输入数据的不同从而引起输出结果的不同。实现了数据与脚本的分离。

4、关键字驱动测试

理解了数据驱动后,无非是把 “数据” 换成 “关键字”,通过关键字的改变引起测试结果的改变。

好处:

目前市面上典型关键字驱动工具以 QTP(目前已更名为 UFT- Unified Functional Testing)、Robot Framework (RIDE)工具为主。这类工具封装了底层的代码,提供给用户独立的图形界面,以 “填表格” 的形式免除测试人员对写代码的恐惧,从而降低脚本的编写难度,我们只需使用工具所提供的关键字以 “过程式” 的方式来编写用例即可。

坏处:

关键字驱动也可以像写代码一样写用例,在编程的世界中,没有什么不能做:不过这样的用例同样需要较高的学习成本,与学习一门编程语言几乎相当。这样的框架越到后期越难维护,可靠性也会变差,关键字的用途与经验被局限在自己的框架内,你所学到的知识也很难重用到其他地方。所以,从测试人员的经验与技术积累价值来讲,笔者更倾向于直接通过编程的方式开发自动化脚本。

六、自动化测试工具 - selenium 2(UI 层)

本章实操部分省略,后续若有实践,会适当补充。

有人说我们公司的软件是用某语言开发的,所以自动化测试也要选某语言:其实软件开发语言和软件自动化测试语言没有必然联系。也就是说,基于 Python (+ Selenium)编写的自动化测试脚本既可以测试基于 Java 开发的 Web 项目,也可以测试基于 PHP 开发的 Web 项目。所以,在选择 Selenium 自动化测试语言时不需要考虑与开发语言的一致性。

1、什么是 selenium 2

selenium 2 是 web 浏览器自动化测试框架。

下文的 selenium 默认都指 selenium 2。

虽然 selenium 支持 Android 自动化测试,但更推荐 Appium, Appium 是 selenium 的延伸,基本上可以视为 “Selenium for Apps”,因为它也是基于 Selenium 的 Webdriver 技术开发的。

2、selenium 历史

selenium (selenium 1) 和 webdriver 原来是两个不同的开源项目,但在 selenium 2 的时候,将 selenium 与 webdriver 合并了,即:

selenium 2 = webdriver + selenium 1

所以 selenium 2 可以等价为 webdriver ,对于 Selenium 2 的学习,其实是对 WebDriver API 的学习。

3、selenium 的支持模式

selenium 支持 HtmlUnit 和 PhantomJS 两个模式。

Phantom JS 是一个拥有 Javascript API 的无界面 Webkit 内核,与 Htmlunit 类似,但比它更高级一些。

通过 HtmlUnit 或 Phantom JS 进行的自动化测试运行不会真正打开一个浏览器,在我们看来,可见的东西才会觉得是真实的,需要的时候,可以调用截图的 api。

4、安装 selenium

pip3 install selenium

5、常用功能

控制浏览器:如调整窗口大小

找元素(定位)

操作元素

鼠标事件

键盘事件

设置元素等待

多 frame、iframe 切换 / 多窗口切换

调用 switch_to.frame() 和 switch_to.window()

处理警告框 如接受警告框:driver.switch_to_alert().accept()

上传 / 下载文件 更复杂的上传 / 下载需要编写 Autoit 脚本

操作 Cookie

调用 JS 调用 execute_script()

6、Selenium IDE

通过浏览器插件的形式提供。

在这里插入图片描述

功能点备注:

1、断言和验证的区别:与断言相比,当执行验证命令失败后不会终止测试。

2、pause 和 waitfor 的区别: pause 来设置固定时间的体眠,而 waitfor 则用于在一定时间内等待某一元素显示。

3、支持将录制内容导出为代码,支持类型如下:

Ruby/Rspec/Webdriver

Ruby/Rspec/Remote Control

Ruby/Test: Unit/ Webdriver

Ruby/Test: Unit/Remote Control

Python/unittest/Webdriver

Python/unittest/Remote Control

Java/Junit4/Webdriver

Java/Junit4/Webdriver Backed

Java/Junit4/Remote Control

Java/Junit3/Remote Control

Java/TESTNG/Remote Control

C#/Nunit/Webdriver

C#/Nunit/Remote Control

7、Selenium Grid 2

(1)介绍
利用 Selenium Grid 2 可以在不同的主机上建立主节点(hub)和分支节点(node),可以使主节点上的测试用例在不同的分支节点上运行。对不同的节点来说,可以搭建不同的测试环境(操作系统、浏览器),从而使一份测试用例得到不同环境下的执行结果。

(2)安装
Selenium Grid 2 的时候,不再提供单独的包,其功能已经集成到 Selenium Server 中,所以,需要下载和运行 Selenium Server オ可以使用 Grid 2 的功能。

下文中 Selenium Grid 2 都简称为 Selenium Grid。

(3)缺点与改进
Selenium Grid 只是提供多系统、多浏览器的执行环境,Selenium Grid 本身并不提供并行的执行测试用例。所以建议使用多线程技术结合 Selenium Grid 实现分布式并行地执行测试用例。

七、 自动化测试工具 - unittest(python 单元测试框架)

在 Python 语言下有诸多单元測试框架,如 doctest、unittest、pytest、nose 等,unittest 框架(原名 Pyunit 框架)为 Python 语言自带的单元测试框架,Python2.1 及其以后的版本已将 unittest 作为一个标准模块放入 Python 开发包中。

1、概念

单元测试本身就是通过一段代码去验证另一段代码。

(1)Test Case
一个 Testcase 的实例就是一个测试用例。

一个用例为一个完整的场景,从用户登录系统到最终退出并关闭浏览器。

一个用例只验证一个功能点,不要试图在用户登录系统后把所有的功能都验证一遍。

用例与用例之间尽量避免产生依赖。

一条用例完成测试之后需要对测试场景进行还原,以免影响其他用例的执行。

(2)Test Suite
一个功能的验证往往需要多个测试用例,可以把多个测试用例集合在一起来执行,这就产生了测试套件 Testsuite 的概念。

(3)Test Runner
包含执行策略和执行结果。

(4)Test Fixture
对一个测试用例环境的搭建和销毁,就是一个 fixture。

2、使用

待写

3、生成 HTML 测试报告

HTMLTestRunner 是 unittest 的一个扩展,它生成易于使用的 HTML 测试报告。

待写

4、缺点

跟上面说的 Selenium Gird 一样,unittest 单元测试框架本身并不支持多线程技术,它不能像 Java 的 TESTNG 框架一样通过简单的配置就可以使用多线程技术执行测试用例。

八、自动化测试高级应用

1、自动发邮件功能

SMTP (Simple Mail Transfer Protocol)是简单邮件传输协议。

Python 的 smtplib 模块提供了一种很方便的途径用来发送电子邮件。

可用于如测试时结果的告知。

2、Page Object 设计模式

Page 对象(Page Object)的一个基本经验法则是:凡是人能做的事,page 对象通过软件客户端都能够做到。因此,它也应当提供一个易于编程的接口并隐藏窗口中底层的部件。所以访问一个文本框应该通过一个访问方法(accessor method)来实现字符串的获取与返回,复选框应当使用布尔值,按钮应当被表示为行为导向的方法名。page 对象应当将在 GUI 控件上所有查询和操作数据的行为封装为方法。一个好的经验法则是,即使改变具体的控件,paee 对象的接口也不应当发生变化。

也可以建立一个 base 的 Page 对象,让别的 page 继承它。

很像面向对象编程思想里的接口与实现。


最后

如果你想学习自动化测试,那么下面这套视频应该会帮到你很多

如何逼自己1个月学完自动化测试,学完即就业,小白也能信手拈来,拿走不谢,允许白嫖....

最后我这里给你们分享一下我所积累和整理的一些文档和学习资料,有需要直接领取就可以了!


以上内容,对于软件测试的朋友来说应该是最全面最完整的备战仓库了,为了更好地整理每个模块,我也参考了很多网上的优质博文和项目,力求不漏掉每一个知识点,很多朋友靠着这些内容进行复习,拿到了BATJ等大厂的offer,这个仓库也已经帮助了很多的软件测试的学习者,希望也能帮助到你。

​​

​​​​

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_56271699/article/details/133934933

智能推荐

leetcode 172. 阶乘后的零-程序员宅基地

文章浏览阅读63次。题目给定一个整数 n,返回 n! 结果尾数中零的数量。解题思路每个0都是由2 * 5得来的,相当于要求n!分解成质因子后2 * 5的数目,由于n中2的数目肯定是要大于5的数目,所以我们只需要求出n!中5的数目。C++代码class Solution {public: int trailingZeroes(int n) { ...

Day15-【Java SE进阶】IO流(一):File、IO流概述、File文件对象的创建、字节输入输出流FileInputStream FileoutputStream、释放资源。_outputstream释放-程序员宅基地

文章浏览阅读992次,点赞27次,收藏15次。UTF-8是Unicode字符集的一种编码方案,采取可变长编码方案,共分四个长度区:1个字节,2个字节,3个字节,4个字节。文件字节输入流:每次读取多个字节到字节数组中去,返回读取的字节数量,读取完毕会返回-1。注意1:字符编码时使用的字符集,和解码时使用的字符集必须一致,否则会出现乱码。定义一个与文件一样大的字节数组,一次性读取完文件的全部字节。UTF-8字符集:汉字占3个字节,英文、数字占1个字节。GBK字符集:汉字占2个字节,英文、数字占1个字节。GBK规定:汉字的第一个字节的第一位必须是1。_outputstream释放

jeecgboot重新登录_jeecg 登录自动退出-程序员宅基地

文章浏览阅读1.8k次,点赞3次,收藏3次。解决jeecgboot每次登录进去都会弹出请重新登录问题,在utils文件下找到request.js文件注释这段代码即可_jeecg 登录自动退出

数据中心供配电系统负荷计算实例分析-程序员宅基地

文章浏览阅读3.4k次。我国目前普遍采用需要系数法和二项式系数法确定用电设备的负荷,其中需要系数法是国际上普遍采用的确定计算负荷的方法,最为简便;而二项式系数法在确定设备台数较少且各台设备容量差..._数据中心用电负荷统计变压器

HTML5期末大作业:网页制作代码 网站设计——人电影网站(5页) HTML+CSS+JavaScript 学生DW网页设计作业成品 dreamweaver作业静态HTML网页设计模板_网页设计成品百度网盘-程序员宅基地

文章浏览阅读7k次,点赞4次,收藏46次。HTML5期末大作业:网页制作代码 网站设计——人电影网站(5页) HTML+CSS+JavaScript 学生DW网页设计作业成品 dreamweaver作业静态HTML网页设计模板常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 明星、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 军事、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他 等网页设计题目, A+水平作业_网页设计成品百度网盘

【Jailhouse 文章】Look Mum, no VM Exits_jailhouse sr-iov-程序员宅基地

文章浏览阅读392次。jailhouse 文章翻译,Look Mum, no VM Exits!_jailhouse sr-iov

随便推点

chatgpt赋能python:Python怎么删除文件中的某一行_python 删除文件特定几行-程序员宅基地

文章浏览阅读751次。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。AI职场汇报智能办公文案写作效率提升教程 专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。_python 删除文件特定几行

Java过滤特殊字符的正则表达式_java正则表达式过滤特殊字符-程序员宅基地

文章浏览阅读2.1k次。【代码】Java过滤特殊字符的正则表达式。_java正则表达式过滤特殊字符

CSS中设置背景的7个属性及简写background注意点_background设置背景图片-程序员宅基地

文章浏览阅读5.7k次,点赞4次,收藏17次。css中背景的设置至关重要,也是一个难点,因为属性众多,对应的属性值也比较多,这里详细的列举了背景相关的7个属性及对应的属性值,并附上演示代码,后期要用的话,可以随时查看,那我们坐稳开车了······1: background-color 设置背景颜色2:background-image来设置背景图片- 语法:background-image:url(相对路径);-可以同时为一个元素指定背景颜色和背景图片,这样背景颜色将会作为背景图片的底色,一般情况下设置背景..._background设置背景图片

Win10 安装系统跳过创建用户,直接启用 Administrator_windows10msoobe进程-程序员宅基地

文章浏览阅读2.6k次,点赞2次,收藏8次。Win10 安装系统跳过创建用户,直接启用 Administrator_windows10msoobe进程

PyCharm2021安装教程-程序员宅基地

文章浏览阅读10w+次,点赞653次,收藏3k次。Windows安装pycharm教程新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入下载安装PyCharm1、进入官网PyCharm的下载地址:http://www.jetbrains.com/pycharm/downl_pycharm2021

《跨境电商——速卖通搜索排名规则解析与SEO技术》一一1.1 初识速卖通的搜索引擎...-程序员宅基地

文章浏览阅读835次。本节书摘来自异步社区出版社《跨境电商——速卖通搜索排名规则解析与SEO技术》一书中的第1章,第1.1节,作者: 冯晓宁,更多章节内容可以访问云栖社区“异步社区”公众号查看。1.1 初识速卖通的搜索引擎1.1.1 初识速卖通搜索作为速卖通卖家都应该知道,速卖通经常被视为“国际版的淘宝”。那么请想一下,普通消费者在淘宝网上购买商品的时候,他的行为应该..._跨境电商 速卖通搜索排名规则解析与seo技术 pdf

推荐文章

热门文章

相关标签