Selenium2自动化测试实战基于Python语言》读书笔记--第1章

第1章 自动化测试基础

1.1 软件测试分类

根据项目流程阶段划分软件测试

1) 单元测试:又称模块测试,是对程序中的单个子程序或具有独立功能的代码段进行测试的过程;

2)集成测试:是在单元测试的基础上,先通过单元模块组装成系统或子系统,再进行测试,重点是检查模块之间的接口是否正确;

3)系统测试:是针对整个产品系统进行的测试,验证系统是否满足需求规格的定义,以及软件系统的正确性和性能等是否满足其需求规格的要求;

4)验收测试:是部署软件之前的最后一个测试阶段,验收测试的目的是确保软件准备就绪,向软件购买者展示该软件能够满足用户的需求;

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

1)黑盒测试:通俗来讲,黑盒测试并不关心盒子里面的结构是什么,只关心输入数据和输出结果。

它只检查程序呈现给用户的功能是否按照需求规格说明书的规定正常使用、程序是否能接收输入数据并产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试;

2)白盒测试:侧重于研究盒子里面的结构和结果。

它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条逻辑路径是否都能按预定要求正确工作;

3)灰盒测试:介于白盒和黑盒测试之间。

既关注输入、输出的正确性,同时也关注内部表现。结合上述两种测试方法,但关注的点,也介于两者之间,不会侧重的那么深。

功能测试、性能测试

1)功能测试:检查功能是否符合需求。

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

2)性能测试:通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。

性能测试也分为:空间性能、时间性能。

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

空间性能:主要是指软件运行时所消耗的系统资源,eg:硬盘、CPU、内存、带宽等。

手工测试、自动化测试

1)手工测试:由测试人员一个一个地去执行测试用例,通过键盘鼠标等输入一些参数,并查看返回结果是否符合预期结果。

2)自动化测试:是把以人为驱动的测试行为转化为机器执行的一种过程。

自动化测试可分为:功能自动化测试、性能自动化测试。

功能自动化测试:通过测试工具(或框架)录制/编写测试脚本,对软件的功能进行测试,并验证测试结果是否正确,从而代替部分的手工测试工作,达到节约人力成本和时间成本的目的;

性能自动化测试:通过性能测试工具模拟成千上万的虚拟用户向系统发送请求,从而验证系统的处理能力。

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

这几个概念是针对于测试周期而言,既不算具体明确的测试阶段,也不是具体的测试方法。

1)冒烟测试

是指在对一个新版本进行大规模的系统测试之前,先验证一下软件的基本功能是否实现,是否具备可测性。

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

2)回归测试

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

回归测试是一个循环的过程,如果回归的问题通不过,则需要再次修复再次进行回归验证,直到所有的问题回归通过为止。

3)随机测试

是指测试中的所有输入数据都是随机生成的,目的是模拟用户的真实操作,并发现一些边缘性的错误。

随机测试可以发现一些隐蔽的错误,但是也有缺点,例如测试不系统、无法统计代码覆盖率和需求覆盖率、发现的问题难以重现等,一般是放在测试的最后执行,随机测试更专业的升级版叫做探索性测试。

4)探索性测试

可以说是一种测试思维技术,它没有很多实际的测试方法、技术和工具,但却是所有测试人员都应该掌握的一种测试思维方式。

探索性测试强调测试人员的主观能动性,抛弃繁杂的测试计划和测试用例设计过程,强调在碰到问题时及时改变测试策略。

5)安全测试

安全测试是在IT软件产品的生命周期中,特别是产品开发基本完成至发布阶段,对产品进行检验以验证产品符合安全需求定义和产品质量标准的过程。

1.2 分层的自动化测试

测试金字塔–敏捷大师Mike Cohn 《Succeeding with Agile》

分层自动化–Martin Fowler

传统的自动化测试: 基于产品UI层的自动化测试,是将黑盒功能测试转化为由程序或工具执行的一种自动化测试。

分层自动化测试: 倡导是从黑盒(UI)单层到黑百盒多层的自动化测试体系,从全面黑盒自动化测试到系统的不同层次进行自动化测试。

单元自动化测试: 是指对软件中的最小可测试单元进行检查和验证。

单元测试框架:Java语言的Junit、TestNG,C#语言的NUnit,以及Python语言的unittest、pytest等。

Code Review插件:Java语言的基于Eclipse的ReviewClipse和Jupiter、Python语言的Review Board等。

接口自动化测试:

  • 模块接口测试:主要测试模块之间的调用和返回。

  • Web接口测试又分为:

    • 服务器接口测试:指测试浏览器与服务器的接口。Web开发一般分为前端和后端,前端开发人员用HTML/CSS/JavaScript等技术,后端开发人员用PHP/Java/C#/Python/Ruby等各种语言。用户的操作是在前端页面上,需要后端提供服务器接口,前端通过调用这些接口来获得需要的数据,通过HTTP协议实现前后端的数据传递。

    • 外部接口测试:指调用的接口由第三方系统提供,典型的例子就是第三方登录,用户登录信息的验证由第三方完成,并返回给当前系统是否验证通过。

UI自动化测试:

主流测试工具有UFT、Watir、Robot Framework、Selenium等。

除UI层所展示的功能外,前端代码同样需要进行测试,针对前端最主要的开发语言JavaScript,QUnit是一个强大的单元测试框架。

在《Google测试之道》一书中提到,Google对产品测试类型划分为:小测试、中测试、大测试。采用70%(小)、20%(中)、10%(大)的比例,大体对应测试金字塔中的Unit、Service、UI层。

自动化测试中最繁琐的是:变化,变化会直接导致测试用例的运行失败,所以需要对自动化脚本进行不断调整。如何控制失败、降低维护成本是对自动化测试工具以及人员能力的 挑战。

反过来讲,一份永远都运行通过的自动化测试用例已经失去了它存在的价值。

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

1) 任务测试明确,不会频繁变动。

2) 每日构建后的测试验证。

3) 比较频繁的回归测试。

4) 软件系统界面稳定,变动少。

5) 需要在多平台上进行的相同测试案例、组合遍历型的测试,大量的重复任务。

6) 软件维护周期长。

7) 项目进度压力不大。

8) 被测试软件系统开发较为规范,能够保证系统的可测试性。

9) 具备大量的自动化测试平台。

10) 测试人员具备较强的编程能力。

上述10条并非全部满足才能进行自动化,还需要大家在实际项目中酌情考虑。

一般情况下,满足如下三条即可:

1) 软件需求变动不频繁

2) 项目周期较长

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

1.4 自动化测试及工具简述

自动化测试: 借助工具来辅助进行软件测试的方法都可以称为自动化测试。

常见的自动化测试工具:

  • UFT

    UFT(Unified Functional Testing)由QTP(Quick Test Professional software)与ST(Service Test)合并而来,由HP公司开发。它是一个企业级的自动化测试工具,提供了强大易用的录制回放功能,同时兼容对象识别模式与图像识别模式两种识别方式,支持B/S与C/S两种架构的软件测试,是目前主流的自动化测试工具。

  • Robot Framework

    是一款基于Python语言编写的自动化测试框架,具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试。

  • Watir

    Watir(Web Application Testing in Ruby)是一个基于Web模式的自动化功能测试工具。Watir是一个Ruby语言库,使用Ruby语言进行脚本开发。

  • Selenium

    Selenium也是一个用于Web应用程序测试的工具,支持多平台、多浏览器、多语言去实现自动化测试。目前在Web自动化领域应用越来越广泛。

1.5 Selenium工具介绍

Selenium: 主要用于Web应用程序的自动化测试,还支持所有基于Web的管理任务自动化。

Selenium特点:

  • 开源、免费

  • 多浏览器支持:Firefox、Chrome、IE、Opera、Edge

  • 多平台支持:Windows、Linux、MAC

  • 多语言支持:Java、Python、Ruby、C#、JavaScript、C++

  • 对Web页面良好的支持

  • 简单(API简单)、灵活(用开发语言驱动)

  • 支持分布式测试用例执行

Selenium构成:

  • Selenium IDE

    Selenium IDE是嵌入到Firefox浏览器中的一个插件,实现简单的浏览器操作的录制与回放功能。IDE录制的脚本可以转换成多种语言,从而帮助我们快速地开发脚本。

  • Selenium Grid

    Selenium Grid是一种自动化的测试辅助工具,Grid通过利用现有的计算机基础设施,能加快Web-App的功能测试。利用Grid可以很方便地实现在多台机器上和异构环境中运行测试用例。

  • Selenum RC

    Selenium RC(Remote Control)是Selenium家族的核心部分。支持多种不同语言编写的自动化测试脚本,通过Selenium RC的服务器作为代理服务器去访问应用。

    Selenium RC分为Client Libraries和Selenium Server。Client Libraries库主要用于编写测试脚本,用来控制Selenium Server的库。Selenium Server负责控制浏览器行为。总的来说,Selenium Server主要包括:Launcher、Http Proxy、Core。其中,Selenium Core是被Selenium Server嵌入到浏览器页面中的。其实Selenium Core就是一堆JavaScript函数的集合,即通过这些JavaScript函数,我们才可以实现用程序对浏览器进行操作。Launcher用于启动浏览器,把Selenium Core加载到浏览器页面中,并把浏览器的代理设置为Selenium Server的Http Proxy。

  • Selenium 2.0

    Selenium 2.0 = Selenium1.0(即上述全部内容)+WebDriver

    WebDriver可以看作是Selenium RC的替代品。出于兼容性考虑,2.0里并没有抛弃RC。

  • WebDriver与Selenium RC的区别

    Selenium RC是在浏览器中运行的JavaScript应用,使用浏览器内置的JavaScript翻译器来翻译和执行selenese命令(selenese是Selenium命令集合)。

    WebDriver是通过原生浏览器支持或者浏览器扩展来直接控制浏览器。针对各个浏览器而开发,取代了嵌入到被测Web应用中的JavaScript,与浏览器紧密集成,因此支持创建更高级的测试,避免了JavaScript安全模型导致的限制,除了来自浏览器厂商的支持外,WebDriver还利用操作系统级的调用,模拟用户输入。

1.6 前端技术介绍

1. HTML简介

HTML(Hyper Text Markup Language)超文本标记语言,是网页的基础。它不是编程语言,而是标记语言,我们可以在HTML标签中嵌入各种前端脚本语言,如VBScript、JavaScript等。

<html>
    <head>
        <title>标题</title>
    </head>
    <body>
        <h1>正文</h1>
    </body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

<html>与</html> 之间的文本用于描述网页。

<head>与</head> 之间的文本用于定义文档的头部,它是所有头部元素的容器。

<title>与</title> 之间的文本显示在浏览器的标题栏。

<body>与</body> 之间的文本是可见的页面内容。

<h1>与</h1> 之间的文本被显示为正文,h1表示为一号字体。

2. JavaScript简介

是由Netscape公司的LiveScript发展而来的前端脚本语言(脚本语言是一种轻量级的语言),是一种解释性语言(代码执行不需要预编译),被设计用来向HTML页面添加交互行为,通常被直接嵌入到HTML页面。

HTML中使用JavaScript,需要添加标签<script>,并通过type属性来定义脚本语言:

<html>
    <body>
        <script type="text/javascript">
            document.write("Hello World!");
        </script>
    </body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

<script type="text/javascript"></script>就可以告诉浏览器,JavaScript脚本从何处开始,到何处结束。使用document.write()可以向文档输出内容。

3. XML简介

XML是指扩展标记语言,是标准通用标记语言的一个子集:

  • HTML是用来显示数据,其焦点是数据的外观

  • XML是为传输和存储数据,其焦点是数据的内容

<?xml version="1.0"?>
<note>
    <to>George</to>
    <from>John</from>
    <heading>Reminder</heading>
    <body>Don't forget the meeting!</body>
</note>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

<?xml version="1.0"?> 一个应该包含XML的声明,它定义了XML文档的版本号。 
<note></note>定义了文档里的第一个元素,也叫根元素。 
<to></to><from></from><heading></heading><body></body>为根元素的子元素,包含了发送者与接收者的信息。其中<to><from>是我们自己定义的,这在XML中是允许的。

这个XML文档仅仅是用标签包装了纯粹的信息,我们需要编写软件程序,才能传送、接收和显示出这个文档。

1.7 前端工具介绍

1. FireBug

FireBug是Firefox浏览器下的一套开发类插件。它集HTML查看和编辑、JavaScript控制台、网络状况监视器、Cookie查看于一体。

2. FirePath

FirePath是FireBug插件扩展的一个工具,用来编辑、检查、生成的XPath1.0表达式、CSS3选择器以及jQuery选择器。可以帮助我们通过XPath和CSS来快速定位页面上的元素。

3. Chrome开发人员工具与IE开发人员工具

Chrome和IE都提供了类似的开发人员工具,F12即可。

1.8 开发语言的选择

自动化测试选取的语言,不一定非要和软件开发使用的语言一致。

基于Python+Selenium编写的自动化测试脚本既可以测试基于Java开发的Web项目,也可以测试基于PHP开发的Web项目。

而选取一致的语言,也有好处,如:提高编码能力、协助开发人员进行单元测试等。

1.9 总结

本章主要是以自动化基础为切入点,为读者讲解了什么是自动化测试,自动化测试的分类,自动化测试采用的语言、工具等内容。

没有过多的深入内容,主要也是为了让大家在开始下一步前,对自动化测试,尤其是web自动化测试,即UI层自动化测试有一个初步的了解。

猜你喜欢

转载自blog.csdn.net/ppw001/article/details/81408945