Selenium与⾃动化测试——《Selenium2⾃动化测试实战》读书
笔记
背景
最近在弄 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
jquery是什么软件
调⽤execute_script()
6、Selenium IDE
通过浏览器插件的形式提供。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。