本节书摘来自异步社区《Selenium自动化测试指南》一书中的第1章1.1节自动化测试基础,作者赵卓,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.1 自动化测试基础
Selenium自动化测试指南
1.1.1 软件测试概述
即使是经验非常丰富的程序员,在编写代码时也很容易出现错误,这些错误也许是由于需求不明确,也许是由于设计问题,也许是编码中出现了失误等。但无论是怎样的错误,若不及时处理,都会降低软件的可靠性,严重时甚至会导致整个软件的失败。
为了排除这些错误,人们引入了软件测试的概念。通俗地说,软件测试就是为了发现程序中的错误而分析或执行程序的过程。
据研究机构统计分析表明,国外软件开发机构40%的工作量都花在软件测试上,软件测试费用占软件开发总费用的30%~50%。对于一些要求高可靠、高安全的软件,测试费用所占的比例更高。由此可见,要成功开发出高质量的软件产品,软件测试必不可少。
软件测试的主要工作是验证(Verification)和确认(Validation)。
验证是保证软件正确地实现了一些特定功能的一系列活动,即保证软件以正确的方式做了该做的事。具体地讲,验证主要完成以下任务。
(1)确定软件生存周期中一个给定阶段的产品是否达到当前阶段确立的需求。
(2)程序正确性的形式证明,即采用形式理论证明程序符合设计规约的规定。
(3)评审、审查、测试、检查、审计等,或对某些项处理、服务或文件等是否和规定的需求相一致进行判断并进行报告。
确认(Validation)的目的是想证实在一个给定的外部环境中软件的逻辑正确性,即保证软件做了所期望的事情。
(1)静态确认,不在计算机上实际执行程序,通过人工或程序分析来证明软件的正确性。
(2)动态确认,通过执行程序进行分析,测试程序的动态行为,以证实软件是否存在问题。
测试和改正活动可以在软件生命周期的任何阶段进行。然而,随着开发的不断进行,找出并修正错误的代价也会急剧增加。在需求阶段就对其进行修改,付出的代价会很少。如果代码已经编写完毕,再进行更改,则将付出代价会大许多。
软件测试的分类
从是否关心软件内部结构和具体实现的角度来看,软件测试可以划分为以下几类。
白盒测试:需要了解内部结构和代码。
黑盒测试:不关心内部结构和代码。
灰盒测试:介于白盒测试和黑盒测试之间。
从是否执行程序的角度来看,软件测试可以划分为以下几类。
静态测试:测试时不执行被测试软件。
动态测试:测试时执行被测试软件。
按软件开发过程的阶段划分,软件测试可以划分为以下几类。
单元测试:测试软件的单元模块(单元模块指某个功能、某个类等)。
集成测试:将各个“单元”集成到一起测试是否能正确运行。
系统测试:测试软件是否符合系统中的各项需求。
验收测试:类似系统测试,但由用户执行。
按测试的具体目标进行划分,软件测试可以划分为以下几类。
功能测试:测试软件是否符合功能性需求,通常采用黑盒测试方法。
性能测试:测试软件在各种状态下的性能,找出性能瓶颈。
安全测试:测试该软件防止非法入侵的能力。
回归测试:在软件被修正或运行环境发生变化后进行重新测试。
兼容性测试:测试该软件与其他软件、硬件的兼容能力。
安装测试:测试软件的安装、卸载、升级是否正常。
各种软件测试书籍对前面3种划分方式介绍得很多,但在实际工作中,更习惯将测试按具体目标进行划分。
1.1.2 自动化测试简介
软件测试一般是由测试人员执行的,如果由机器来代替人执行软件测试,那么这种测试就叫自动化测试。例如,由计算机代替人来单击被测试软件的界面,执行一系列操作并进行验证。
在各种测试中,都可以引入自动化测试。
通过执行自动化测试,可以节省大量的人力、时间或硬件等资源,同时也能大大提高测试效率。
当然,这听起来很好,但如果要由机器代替人来执行软件测试,就得开发相应的自动化测试代码。开发自动化测试代码也是需要人力、时间或硬件等资源的。因此,在资源有限的情况下,必须对软件开发过程进行分析,观察哪些地方适合使用自动化测试。使用自动化测试通常需要同时满足以下条件。
(1)软件需求变动不频繁。
测试脚本的稳定性决定了自动化测试的维护成本。如果软件需求变动过于频繁,测试人员需要根据变动的需求来更新测试用例以及相关的测试脚本,而脚本的维护本身就是一个代码开发的过程,需要修改和调试,必要的时候还要修改自动化测试的框架,如果所花费的成本不低于利用其节省的测试成本,那么自动化测试便是失败的。
项目中的某些模块相对稳定,而某些模块需求变动性很大。可以对相对稳定的模块进行自动化测试,而变动较大的仍采用手工测试。
(2)项目周期足够长。
自动化测试的过程包括自动化测试需求的确定、自动化测试框架的设计、测试脚本的编写和调试等,这个过程本身就是一个测试软件的开发过程,需要较长的时间来完成。如果项目的周期比较短,没有足够的时间去支持这样一个过程,那么自动化测试便也无从谈起。
(3)自动化测试脚本可重复使用。
如果费尽心思开发了一套近乎完美的自动化测试脚本,但是脚本的重复使用率很低,致使其间所耗费的成本大于所创造的经济价值,自动化测试便成为了测试人员的练手之作,而并非是真正可产生效益的测试手段了。
另外,在手工测试无法完成,需要投入大量时间与人力时也需要考虑引入自动化测试,例如性能测试、配置测试、大数据量输入测试等。
至于自动化测试的开发过程,与软件开发过程从本质上来讲是一样的,这将在第6章中介绍。
1.1.3 Selenium简介
Selenium是一系列基于Web的自动化测试工具。它提供了一系列测试函数,用于支持Web自动化测试。这些函数非常灵活,它们能够通过多种方式定位界面元素,并可以将预期结果与系统实际表现进行比较。
作为一款强大的测试工具,Selenium具有以下几个特性。
(1)可对多浏览器进行测试,如IE、Firefox、Safari、Chrome、Android手机浏览器等。
(2)支持多种语言,例如Java、C#、Python、Ruby、PHP等。
(3)跨平台,例如Windows、Lunix、iOS、Android等。
(4)开源免费。
下面举个例子来说明Selenium的使用,假设将要开始对京东商城的用户登录进行手动测试,测试步骤如下。
(1)进入京东用户登录页面https://passport.360buy.com/new/login.aspx,如图1-1所示。
(2)输入用户名和密码,单击“登录”按钮。输入过程中分别按不输入用户名,输入错误的用户名,不输入密码,输入错误的密码,输入正确的用户名和密码的顺序进行测试。
(3)检查登录后的状态是否符合预期结果。
这看上去是一个很简单的操作,但下面进行一个极端的假设:假设在测试时,需要在6个浏览器上都测试通过(如IE、Firefox、Safari、Chrome、Android、iPhone),每天都有8个项目上线,而登录功能属于冒烟测试检查点,那么登录功能也同样得检查8次。那么算上各个浏览器的测试,每天就得将登录执行6×8=48遍,而且每遍都要包含以下几种检查:不输入用户名,输入错误的用户名,不输入密码,输入错误的密码,最后输入正确的用户名和密码。一个看似简单的操作一天要执行这么多次(还没有算上其他的功能),会让测试人员感觉很烦。
如果使用Selenium,一切就好办了,只需编写少量代码,就可以实现以下功能。
(1)计算机自动打开浏览器并进入京东用户登录页面https://passport.360buy.com/new/login.aspx。
(2)计算机自动输入用户名和密码,并单击“登录”按钮。分别按不输入用户名,输入错误的用户名,不输入密码,输入错误的密码,输入正确的用户名和密码的顺序进行测试。
(3)计算机自动检查登录后的提示文字是否为预期结果,然后自动输出测试报告。
(4)计算机自动切换到另一个浏览器,重复执行(1)~(3)步,直到每个浏览器都执行完毕。
以后执行的时候只需要执行Selenium代码即可,无需测试人员费神,看上去是不是要轻松多了?
1.Selenium工具组
Selenium由以下几个工具组成,每一种工具都扮演着独特的角色。
Selenium IDE。Selenium IDE是一个用于构建脚本的初级工具。它是一个Firefox插件,拥有一个易于使用的界面。Selenium IDE拥有录制功能,能够记录用户执行的操作,并将其导出为可重复使用的脚本(支持多种编程语言),然后用于执行测试。
Selenium 1。Selenium 1(Selenium-RC)是Selenium 最主要的测试工具之一,它所具有的某些功能即使是新版的Selenium 2也无法支持。它能够通过多种语言(Java、JavaScript、Ruby、PHP、Python、Perl和 C#)编写测试代码,同时能支持几乎所有浏览器的测试。
Selenium 2。Selenium 2(WebDriver)作为最新版的Selenium工具,代表未来Selenium的发展方向。这套全新的自动化测试工具提供了许多功能,包括一套组织性更好、面向对象的API,并克服了在之前Selenium 1版本中测试的局限性。
可以通过很少的修改就将Selenium 1的代码移植到Selenium 2。同时,Selenium 2也提供了向前兼容Selenium 1的接口。
Selenium Grid。Selenium Grid能够让Selenium 1的测试在多个不同的环境中运行,也能让测试并行执行。也就是说,各个测试能够在同一时间、不同机器上运行。这有两个好处。首先,如果拥有一套大规模的测试或执行缓慢的测试,可以通过Selenium Grid将测试在同一时间、不同机器上运行,从而大幅提高性能;其次,如果测试必须在多个环境中运行,那么Selenium Grid具有的“同一时间、不同机器”的特性也能够轻松做到这一点。不管怎么样,Selenium Grid都能够大幅提高测试的效率。
2.选择合适的Selenium工具
大多数用户都是从Selenium IDE开始的。如果没有编程经验,可以通过Selenium IDE来快速熟悉Selenium的命令。使用IDE,可以快速创建简单的测试,有时甚至只需花几分钟的时间。
然而,并不建议所有的自动化测试都使用Selenium IDE。为了有效地使用Selnium,需要使用Selenium 1或Selenium 2,并配合使用其中一种编程语言,自己创建并运行测试。
虽然,Selenium 2是Selenium未来的发展方向,但Selenium 1和Selenium 2各有优劣,这需要用户进行判断。另外,Selenium 1和Selenium 2可以互相转换。
Selenium Grid一般用于分布式测试和集群测试,需要在多台机器同时执行测试时,可以选择使用该工具。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。
Original url: Access
Created at: 2019-11-08 15:54:28
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论