《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

智能推荐

STM32+74HC595:带领你10分钟用对74HC595_74hc595连接stm32-程序员宅基地

文章浏览阅读2.4w次,点赞14次,收藏68次。使用的是STM32CBT8,小模块用起来性价比超级高,资源丰富,移植u/COS及HTTP、MQTT协议等等用起来简直欲罢不能,摇摇欲仙!BUT:IO口资源太少了,我想让你驱动100个LED,你缺告诉我,我的要求太多,你满足不了......还好,找到了74HC595,但是网上很多资源讲的我看了半天才总结、提炼并另辟蹊径出来精髓===============================_74hc595连接stm32

莱昂哈德·欧拉生平及其成就简介_欧拉的物理成就-程序员宅基地

文章浏览阅读4.1k次,点赞2次,收藏8次。莱昂哈德·欧拉(Leonhard Euler ,1707年4月15日~1783年9月18日),瑞士数学家、自然科学家。1707年4月15日出生于瑞士的巴塞尔,1783年9月18日于俄国圣彼得堡去世。欧拉出生于牧师家庭,自幼受父亲的影响。13岁时入读巴塞尔大学,15岁大学毕业,16岁获得硕士学位。欧拉是18世纪数学界最杰出的人物之一,他不但为数学界作出贡献,更把整个数学推至物理的领域。他是数学史上最多产的数学家,平均每年写出八百多页的论文,还写了大量的力学、分析学、几何学、变分法等的课本,《无穷小分析引论》、_欧拉的物理成就

Error: PL/SQL: ORA-00980: 同义词转换不再有效_sql数据库中同义词转换不再有效-程序员宅基地

文章浏览阅读1.5w次。今天在写存储过程的时候,碰到一个问题,在执行存储过程的时候总是报错--同义词转换不再有效,发现一个查询语句中的一个表原来使用的是一个同义词,就试着把这个同义词单独拿出来进行查询操作,发现并没有问题。最后,经过一番努力,发现该同义词并不是直接指向一个实体表,而是指向另一个同义词。所以,将改同义词的指向改为直接指向原实体表的指向,问题得到解决。即同义词指向的 object ow_sql数据库中同义词转换不再有效

idea 怎么修改项目名字和modules配名字_idea修改groupid-程序员宅基地

文章浏览阅读2.5k次。我们会遇到很多场景比如说git拉取一个项目改成自己的 或者架构师搭建架构喊你拿过来用 是不是的改名字。mvn idea:module 这个是生成.iml文件 删除以前的.iml.重新导入工程编辑运行。第五 补充 如果发现你改项目能把原来的项目modules也改了。第二步 改 点击project Stucture。a/是项目名字 name 也是。第三步 改modules。_idea修改groupid

信息论复习—循环码-程序员宅基地

文章浏览阅读5.5k次,点赞12次,收藏70次。信息论复习—循环码_循环码

IDEA快捷键大全-程序员宅基地

文章浏览阅读8.9w次,点赞148次,收藏872次。IntelliJ IDEA快捷键大全、快捷键使用教程_idea快捷键

随便推点

IBM SVC storage_ibm system storage san voume controller-程序员宅基地

文章浏览阅读2.8k次。IBM SVC storage1. Introduction TheIBM SAN Volume Controller (SVC) is a block storage virtualization appliancethat belongs to the IBM System Storage product family. SVC implements anind_ibm system storage san voume controller

探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(一)

探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(一)Meta 通过推出新的开源 AI 模型 Llama 3 以及新版本的 Meta AI,正在加强其在人工智能 (AI) 竞赛中的竞争力。该虚拟助手由 Llama 3 提供支持,现已可在所有 Meta 平台上使用。

LeetCode.726 原子的数量 C++-程序员宅基地

文章浏览阅读266次。LeetCode.726 原子的数量 原题链接:原子的数量1. 题意:将化学式的各个元素按字典序排序,以(元素+元素个数)的形式依次累加成字符串2. 思路通过pair的形式,将每个元素和该元素的个数对映,括号也与括号后的个数对映,如下图 利用栈结构匹配(),将括号的外的个数,乘以括号里各元素对应的个数。哈希表统计各元素的个数,并以字典序排序3. 代码注释变量定义的解释vector<pa..._c++原子的数量

基于不同CPU架构静态编译QT及相关问题_mips64el编译 curl-程序员宅基地

文章浏览阅读1.9k次。最近在编译linux客户端的时候,出现了瓶颈,不同的CPU + 操作系统 + 内核版本等,造成了客户端维护越来越繁琐,为了提高维护效率,降低维护成本,因此决定采用静态编译。因为是年前的了,所以好多编译时遇到的报错没有截图(所以仅简单做参考记录)面临的问题:后台服务二进制程序依赖glibc,但是不同的操作系统glibc版本不一致,因此程序在不同操作系统运行时会出现版本不符的问题。 QT界面二进制程序除了上面提及glibc的问题,还因为依赖诸多qt库等,导致在不同操作系统中运行报错。好啦,有了问题,_mips64el编译 curl

autoflowchart php,c语言流程图生成器-程序员宅基地

文章浏览阅读512次。AutoFlowchart是一个功能强大,实用的根据源码生成C语言流程图生成器软件,它生成的流程图支持展开/合拢,并且可以预定义流程图块的大小和间隔,移动和缩放流程图也很方便。你还可以把它导出到WORD文档或BMP文件,帮助程序员更好地理解程序,制作文档和可视化代码,支持C,C++,VC++(Visual C++ .NET),Delphi(Object Pascal)。功能介绍根据源程序生成流程图..._autoflowchart

【算法】格雷码(Gray Code)与8421二进制码之间的转换算法 (LeetCode89)-程序员宅基地

文章浏览阅读8.5k次,点赞7次,收藏19次。格雷码_格雷码

推荐文章

热门文章

相关标签