《Selenium 2 自动化测试实战》读书笔记

news2025/1/15 22:53:52

背景

最近在弄 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,这个仓库也已经帮助了很多的软件测试的学习者,希望也能帮助到你。

​​

​​​​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1111661.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

bulldog 靶机

bulldog 信息搜集 存活检测 详细扫描 后台网页扫描 网页信息搜集 正在开发的如果你正在读这篇文章,你很可能是Bulldog Industries的承包商。恭喜你!我是你们的新老板,组长艾伦布鲁克。CEO解雇了整个开发团队和员工。因此,我们需要迅速招到一…

JVM(Java Virtual Machine)垃圾收集算法篇

前言 本文参考《深入理解Java虚拟机》,主要介绍GC相关的算法,引用计数法、可达性分析算法、垃圾收集算法(分代收集理论,标记-清除/整理/复制) 本系列其他文章链接: JVM(Java Virtual Machine&…

视频监控/安防监控平台EasyCVR新功能——视频播放id调阅来咯

TSINGSEE青犀视频监控汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力&…

中小型企业云存储选型指南:要点与建议

随着信息技术的快速发展,中小型企业越来越依赖于云存储来管理和存储其日益增长的数据。选择适合自己企业的云存储解决方案是确保数据安全、提高工作效率的关键。 选型注意点: 选择适合自己企业的云存储方案 在选择适合自己企业的云存储方案时&#xff…

日志回滚工作原理剖析及在文件系统的作用

日志回滚原理 当涉及到崩溃恢复和一致性保护时,日志回滚是一种常见的机制。它通过记录写入操作到一个事务日志中,而不是直接应用到文件系统,以保护文件系统的一致性。下面是日志回滚的一般工作原理: 日志记录:在进行写…

【COMP305 LEC 1 2】

Part 1 Artificial Neural Networks(ANN) Topic 1 Historical/Biological Introduction 1. Biological Excitability (a. Virtually all living cells maintain an electrical potential difference between their interiors and the environment (exteriors) . 内部和外…

1812_参考spacemacs的文档拆解ivy layer的组成

全部学习汇总: GreyZhang/editors_skills: Summary for some common editor skills I used. (github.com) 升级了spacemacs的配置,之后重新翻了一下spacemacs的文档。看到了这里面的一个核心的结构layer。这样,结合文档并且找出一个layer来看…

【多线程】线程安全问题和解决方案

我们来看下面这一段代码 public class demo {public static void main(String[] args) throws InterruptedException {Cou count new Cou();Thread t1 new Thread(() -> {for (int i 0; i < 10000; i) {count.add();}});Thread t2 new Thread(() -> {for (int i …

王道计算机考研 操作系统学习笔记篇章二: 进程管理

目录 进程与线程 进程的概念 概念 进程的组成 PCB 程序段、数据段 进程的特征 总结 进程的状态与转换 进程的状态 创建态、就绪态 运行态 阻塞态 终止态 进程的转换 进程的组织 链接方式 索引方式 总结 进程控制 什么是进程控制 如何实现进程控制 进程控制相关的原…

Opencv之RANSAC算法用于直线拟合及特征点集匹配详解

Opencv之RANSAC算法用于直线拟合及特征点集匹配详解 讲述Ransac拟合与最小二乘在曲线拟合上的优缺点 讲述在进行特征点匹配时&#xff0c;最近邻匹配与Ransac匹配的不同之处 另外&#xff0c;Ransac也被用于椭圆拟合、变换矩阵求解等 1. 直线拟合 1.1 原理 RANSAC(RANdom …

两分钟搞懂UiAutomator自动化测试框架

1. UiAutomator简介 UiAutomator是谷歌在Android4.1版本发布时推出的一款用Java编写的UI测试框架&#xff0c;基于Accessibility服务。其最大的特点就是可以跨进程操作&#xff0c;可以使用UiAutomator框架提供的一些方便的API来对安卓应用进行一系列的自动化测试操作&#xf…

Linux程序调试器——gdb的使用

gdb的概述 GDB 全称“GNU symbolic debugger”&#xff0c;从名称上不难看出&#xff0c;它诞生于 GNU 计划&#xff08;同时诞生的还有 GCC、Emacs 等&#xff09;&#xff0c;是 Linux 下常用的程序调试器。发展至今&#xff0c;GDB 已经迭代了诸多个版本&#xff0c;当下的…

C#上位机序列9: 批量读写+事件广播+数据类型处理

一、源码结构&#xff1a; 二、运行效果&#xff1a; 三、源码解析 1. 读取配置文件及创建变量信息&#xff08;点位名称&#xff0c;地址&#xff0c;数据类型&#xff08;bool/short/int/float/long/double&#xff09;&#xff09; 2. 异步任务处理&#xff1a;读任务&…

c++_learning-并发与多线程

并发与多线程 并发&#xff1a;进程&#xff1a;线程&#xff1a;基本概念&#xff1a;线程安全&#xff1a;问题出现的场景&#xff1a;涉及的性质&#xff1a;如何保证线程安全&#xff1f; 并发的实现手段&#xff08;优先使用多线程并发&#xff09;&#xff1a;多进程并发…

【特征重要性揭秘:为什么同一个数据集会有不同结果】

文章目录 特征重要性概要为什么特征重要性分析很重要特征重要性分析方法内置特征重要性(coef_或feature_importances_)Leave-one-out相关性分析递归特征消除 Recursive Feature EliminationXGBoost特性重要性主成分分析 PCA方差分析 ANOVA卡方检验&#xff08;Chi-Square Test&…

求最大公约数的几种常见的方法 【详解】

目录 一、关于公约数 二、计算最大公约数的方法 1. 辗转相除法&#xff08;欧几里得算法&#xff09; 2. 更相减损法&#xff08;辗转相减法&#xff09; 3. 分解质因数法 4. 穷举法 5. 递归法 6. 短除法 三、总结 一、关于公约数 首先 &#xff0c;先介绍一下公约…

matplotlib python 画图教程(2)

1、bar 柱状图 import matplotlib.pyplot as plt import numpy as np n12 xnp.arange(12) y1(1-x/float(n))*np.random.uniform(0.5,1,n) y2(1-x/float(n))*np.random.uniform(0.5,1,n) plt.xlim(-.5,n) plt.ylim(-1.25,1.25) plt.xticks([]) plt.yticks([]) plt.bar(x,y1,fac…

利用TypeScript 和 jsdom 库实现自动化抓取数据

以下是一个使用 TypeScript 和 jsdom 库的下载器程序&#xff0c;用于下载zhihu的内容。此程序使用了 duoip.cn/get_proxy 这段代码。 import { JSDOM } from jsdom; import { getProxy } from https://www.duoip.cn/get_proxy;const zhihuUrl https://www.zhihu.com;(async (…

01、Python 安装 ,Pycharm 安装

目录 安装安装 Python安装 Pycharm 创建项目简单添加文件运行 简单爬取下载小视频 安装 python-3.8.10-amd64.exe – 先安装这个 pycharm-community-2022.2.exe 再安装这个 安装 Python python-3.8.10-amd64.exe 安装&#xff08;这个是其他版本的安装&#xff0c;步骤一样…

Linux安装MINIO

MINIO简介MINIO目录 mkdir -p /opt/minio/data && cd /opt/minio MINIO下载 wget https://dl.minio.org.cn/server/minio/release/linux-amd64/minio MINIO授权 chmod x minio MINIO端口 firewall-cmd --zonepublic --add-port7171/tcp --permanent && firewal…