Bootstrap

【软件测试】快速入门软件测试

1.初识软件测试

1.1 软件测试的前景与现状

软件测试越来越被企业重视,人才稀缺,市场需求扩大。

1.2 软件测试人员的职业生涯规划

  • 技术型路线。自动化测试工程师、性能测试工程师、安全测试工程师等。
  • 管理型路线。测试主管、测试经理、测试总监。
  • 产品和市场路线。
  • 开发路线。

1.3 初级软件测试人员专业知识点

  • 软件功能测试。软件功能测试技术通常来说就是手工测试技术,虽然听起来有些老套,但它是最基础的,也是不可替代的测试之一。软件功能测试技术主要包括 软件需求规格说明书的评审、测试计划、测试用例设计技术、环境搭建、测试执行(缺陷提交、回归测试)、测试报告等;软件功能测试主要体现在两个方面,一个是用例设计,另一个是缺陷提交。
  • 接口测试的初级应用能力。进行接口测试意味着软件测试人员从单纯的界面测试转向底层测试,这一过程意义重大,它在一定程度上降低了开发成本,缩短了软件开发周期。
  • Web 自动化测试的初级应用能力。目前,Web 自动化测试是软件测试行业中最高端的测试技术之一,也是未来测试领域的发展趋势。比如 Selenium 自动化工具。

其他需要掌握的知识点(仅列出部分)。

  • Linux 操作系统。熟悉 Linux 系统中的常用命令行。
  • 相关数据库操作。MySQL、SQL Server、Oracle 等。

2.软件测试入门

2.1 矿泉水瓶的测试

  • 瓶子的外观界面测试:主要测试瓶子的大小、瓶身所体现的各种信息以及外观特征是否满足公司最初对瓶子的设计要求。
  • 瓶子的功能测试:主要是测试瓶子的装水功能、喝水功能以及瓶子自带的一些功能特点。
  • 瓶子的性能测试:主要是测试瓶子的抗摔、抗压、抗高低温的这些情况。
  • 瓶子的安全性测试:主要是测试瓶子在使用过程中,瓶子本身是否会对人体或环境造成一些伤害,是否存在潜在的安全问题。
  • 瓶子的易用性测试:主要是测试瓶子用起来是否方便。
  • 瓶子的兼容性测试:主要是测试瓶子除了可以装水之外,是否可以装一些其他的东西,例如其他液体或固体。

2.2 产品测试的基本要素

  • 产品的外观界面测试:测试产品的外观界面是否美观,是否符合设计规范。
  • 产品的功能测试:测试产品的各项功能是否能正常使用。
  • 产品的性能测试:测试产品在特定环境下是否能保持它的稳定性。
  • 产品的安全性测试:测试产品自身或在使用过程中是否会产生安全性的问题。
  • 产品的易用性测试:测试产品使用起来是否复杂,用户体验是否良好。
  • 产品的兼容性测试:测试产品使用过程中是否可以兼容其他产品。

对一名初级软件测试人员来讲,当你对软件进行全面测试的时候,可以基于软件的 外观界面、功能、性能、安全性、兼容性、易用性 6 个方面开展。

思考:如何在 “邮箱的登录测试” 中运用以上 6 个方面。

3.测试工作从评审需求开始

先了解一下软件项目组中所涉及的一些重要角色和关键词,它们分别是项目、项目经理、需求、用户、开发人员、测试人员和产品人员。

在这里插入图片描述

3.1 测试人员需要从哪些方面来对需求文档进行评审呢?

  • 正确性:对照用户的原始需求,检查产品人员制定的需求文档是否偏离了用户的原始需求。
  • 明确性:检查需求文档中每一个需求项是否存在一些含糊其辞的词汇,用语是否清晰,是否有歧义。
  • 完整性:对照用户的原始需求,检查产品人员制定的需求文档是否覆盖了用户所提出的所有需求项,每个需求项有没有遗漏用户所提出的一些必要信息。
  • 限制性:每个需求项里是否清晰地描述了这个软件能做什么,不能做什么,能输入什么,不能输入什么,能输出什么,不能输出什么。
  • 优先级:需求文档中的哪些功能比较重要,哪些功能比较次要,是否做了标识和编号。
  • 一致性:检查需求文档里的内容前后是否一致,确保不冲突,不矛盾。

需求评审是测试人员非常重要的一项工作。据统计,50%以上的软件缺陷是由于前期的需求没有评审确认好而造成的。

4.软件测试的基本概念

作为一名软件测试工程师,从拿到软件需求的那一刻起,软件测试工作其实就已经开始,因为需要对软件需求文档进行需求评审。评审通过后,才可以具体开展测试工作。

4.1 软件质量

软件经过开发测试完成后,软件所展现出来的各项功能特性是否满足需求文档,是否满足用户的需求。如果满足,则表明这个软件质量很好;如果不满足,则表明软件质量不好。

4.2 软件测试

软件测试是从前期需求文档的评审,到中期测试用例设计及测试执行,再到后期问题单的提交和关闭等一系列的测试过程。

4.3 软件错误

测试人员在测试软件的过程中,当发现实际运行的结果和预期的结果不一致时(这个预期的效果其实就是指需求文档里面的规格要求),就把这个不一致的地方统称为软件错误。当然,软件错误不仅仅是指与需求文档不符的地方,在测试过程中,测试人员发现有影响用户体验和使用的任何地方,都可以把它当作软件错误提出来。

4.4 80/20 原则

80% 的 Bug 集中在 20% 的模块里面,经常出错的模块经修复后还会出错。

4.5 测试原理分类

黑盒测试。不关注软件内部代码的结构和算法,只关注这个软件外部所展现出来的所有功能特性的测试。

白盒测试。只关注软件内部代码的结构和算法,而不关注这个软件外部所展现出来的功能点的测试。

4.6 测试阶段分类

  • 单元测试:开发人员开发完一小段代码后就能实现一个小的功能模块,单元测试就是指对这小段代码进行测试。
  • 集成测试:单元测试完成后,开发人员就会把已测试完的单元模块组合在一起并形成一个“组合体”。
  • 系统测试:系统测试简而言之就是测试人员对这个软件系统做全面测试。
  • 验收测试:验收测试是由用户进行的测试,测试的内容与系统测试的内容相似,主要测试软件系统是否满足需求文档里的要求、是否满足用户的需求。采用的方法也是黑盒测试。

在这里插入图片描述

5.软件测试计划

5.1 软件测试计划的内容

  • 测试范围:测试范围用来确定需要测试的功能性需求和非功能性需求。
  • 测试环境:软件环境+硬件环境
  • 测试策略:测试的依据、测试的准入标准(冒烟测试)、测试工具的选择、测试的重点及方法、测试的准出标准
  • 测试管理:测试任务的分配、时间进度的安排、沟通方式
  • 测试风险:不透彻理解需求文档、估计不足测试时间、测试执行不到位

5.2 软件测试计划的模板

  • 文档标识
  • 测试目的
  • 测试范围
  • 测试环境
  • 测试策略
  • 测试管理
  • 测试风险

6.测试用例的设计

在这里插入图片描述

6.1 功能测试的用例设计方法

  • 等价类划分法
  • 边界值分析法
  • 错误推断法
  • 正交表分析法
  • 因果判定法
    • 明确所有的输入条件(因)
    • 明确所有的输出结果(果)
    • 明确哪些条件可以组合在一起,哪些条件不能组合在一起。
    • 明确什么样的输入条件组合可产生哪些输出结果。
    • 通过判定表展示输入条件的组合与输出结果的对应关系。
    • 根据判定表设计测试用例。

6.2 用例设计的基本思路

  • 要紧扣需求文档,挖掘需求细节,并针对这些需求细节进行用例设计。
  • 除了应用所学习过的用例设计方法外,测试人员还应充分利用自己的发散能力和逻辑推理能力来设计,因为人的思维是开放的。
  • 想要更快地获取更多的测试思想,比较直接的办法就是通过互联网来获取相应的资料(因为常见功能点的测试网上几乎都有而且很全面),以此来充实自己的基础测试能力,并扩充视野。
  • 多与测试人员、开发人员、产品人员交流,多看测试人员之前写过的测试用例和相关文档。

6.3 如何评审测试用例

  • 测试用例是否是依据需求文档编写的。
  • 测试用例中的执行步骤、输入数据是否清晰、简洁、正确;对于重复度高的执行步骤,是否进行了简化。
  • 每个测试用例是否都有明确的预期结果。
  • 测试用例中是否存在多余的用例(无效、等价、冗余的用例)。
  • 测试用例是否覆盖了需求文档中所有的功能点,是否存在遗漏。

7.了解测试环境

一般情况下,软件系统有两种常用的结构,一种是浏览器 / 服务器(Browser / Server,B/S)结构的软件系统,另一种是客户端 / 服务器(Client / Server,C/S)结构的软件系统。

7.1 B/S 结构

在这里插入图片描述
前台环境的搭建:

  • 能熟练地安装和使用前台桌面版的操作系统(如Windows XP、Windows7、Windows 10等)。
  • 能熟练安装和使用常见的浏览器。
  • 能熟练安装和使用虚拟机软件。

后台环境的搭建:

  • 分别在后台的Web服务器和数据库服务器上安装服务器版本的操作系统,例如可以安装Linux或是Windows等服务器版本的操作系统。后台服务器的操作系统与前台桌面版的操作系统不同,其对安全性和稳定性及性能等方面有更严格的要求。
  • 在Web服务器的操作系统上安装Web服务器软件Apache,同类的软件还有iis、Nginx等。
  • 在Web服务器的操作系统上安装PHP服务软件(如PHP-fpm中间件),同类的软件还有Java服务软件(如Tomcat中间件)等。
  • 在数据库服务器的操作系统上安装MySQL数据库软件,同类的软件还有Oracle、SQL Server相关版本的数据库软件等。
  • 进行各组件之间的连接、代码上传、数据导入、文件配置、权限设置、环境变量设置、网络连接等一系列的操作,直至完全搭建成功。

7.2 C/S 结构

在这里插入图片描述
前台环境搭建:

  • 只需要安装一个 Windows 桌面版的操作系统(如 Windows 10 操作系统等)和相应的客户端软件即可。

后台环境的搭建:

  • 在后台的数据库服务器上安装操作系统,如Windows Server 2003的操作系统。
  • 在数据库服务器的操作系统上安装数据库软件SQL Server 2005。
  • 将数据导入到数据库中,检查数据库的IP地址、端口号、数据库名称、账号、密码等,检查客户端软件和数据库之间连通性等一系列操作后就可以完成搭建。

8.测试执行

提交Bug不仅仅是测试人员价值的体现,也是测试人员与开发人员沟通的重要桥梁,Bug的数量和质量将会对软件质量的改善起到重要的推动作用。

8.1 一个 Bug 所包括的内容

在这里插入图片描述

8.2 Bug 记录的正确范例

在这里插入图片描述

8.3 测试管理工具

  • 禅道
  • Test Director(简称TD)
  • Quality Center(简称QC)
  • JIRA
  • Mantis

虽然每个公司所使用的Bug管理工具不同,但是它们对Bug的处理流程都大同小异,学会了其中一种,就很容易理解和操作其他的Bug管理工具。

8.4 回归测试的基本流程

在这里插入图片描述

  • 回归测试时执行全部的测试用例。
  • 选择重要的功能点、常用的功能点、与Bug相关联的功能点进行回归测试。
  • 选择性执行关键功能点的测试用例。
  • 仅测试出现Bug的功能点。

回归测试是在系统测试人员完成了需求评审、测试计划、用例设计、环境搭建、Bug提交等关键性的测试工作之后所要开展的工作,可以说此时的测试人员已经完全融入测试体系当中,也完全可以胜任相应的测试工作了。

9.软件测试报告

测试报告是一份描述软件的 测试过程、测试环境、测试范围、测试结果 的文档,用来分析总结系统存在的风险以及测试结论。

  • 测试过程:测试过程需要对测试人员、测试时间、测试地点、测试版本等信息进行描述。其他测试过程中发生的关键信息均可在这里进行描述。
  • 测试环境:测试环境指的是软件环境和硬件环境(主要描述前台环境,此环境同测试计划中的环境),其他相关联的辅助环境均可在这里进行描述。
  • 测试范围:测试范围指的是具体所测模块及分布在该模块上的所有功能点。与之有关联的信息也可在这里进行描述。
  • 测试结果:测试结果主要指测试用例执行情况的汇总、执行结果通过率、Bug的问题汇总、Bug的分布情况等。其他有关联的测试结果均可在这里进行描述。
  • 系统存在的风险:系统存在的风险主要指的是系统中遗留的Bug会对软件造成什么风险。其他风险信息均可以在这里进行描述。
  • 测试结论:测试结论指在报告的最后给出一个是否能上线(通过)的结论。
  • 附件清单:附件清单主要指测试用例的清单和Bug清单,这些清单也需要一并放在测试报告中。

9.1 软件测试报告模板

  • 编写目的
  • 模块功能描述
  • 测试过程
  • 测试环境
  • 功能点测试范围
  • 测试执行结果
  • 风险评估
  • 测试结论
  • 附件

10.初识 Web 自动化测试技术

自动化测试与手工测试相比,最大的一个区别是要求测试人员掌握一门脚本开发语言。

Selenium WebDriver

简单地说,Selenium WebDriver是一个被打了包的模块,该模块内部封装了一套可以操作网页元素的方法,当然单靠这个打了包的模块是没有办法完成Web自动化测试工作的,还需要程序把模块里面的方法调用出来才能实现对网页元素的操纵。

  • HTML 基础
  • Xpath 定位技术
  • Python
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver. maximize_window()
driver. get("http://account. ryjiaoyu.com/log-in")
time. sleep (3)
driver.find_element_by_xpath("//input[@id='Email']"). clear()
driver.find_element_by_xpath("//input [@id='Email']").send_keys("[email protected]")
driver.find_element_by_xpath("//input[@id='Password']"). clear()
driver.find_element_by_xpath("//input[@id='Password']"). send_keys("testpress")
driver.find_element_by_xpath("//input[@value='登录']").click()
driver. quit()

Web自动化测试的工具有很多,例如以前比较流行的QTP(升级版叫UFT),它一直被拿来与Selenium WebDriver作对比。首先,QTP是商业工具,需要付费购买,而Selenium WebDriver是开源的,无须购买;其次,QTP弱化了测试人员脚本设计能力,而Selenium WebDriver强化了测试人员脚本设计能力。深入比较二者后,越来越多的企业把目光转向了Selenium WebDriver。

11.初识 HTTP 接口测试

在测试领域,HTTP接口一般代表的是HTTP接口或HTTPS接口,HTTP请求一般代表的是HTTP请求或HTTPS请求。具体情况需根据其遵循的协议而定。

可以把提供资源的一方称为服务端,把请求资源的一方称为客户端,而“接口”(Application Programming Interface,API)可以理解为服务端或服务端内的某个模块提供的一个可供“他人”调用其内部资源的“入口”。

在这里插入图片描述
再通俗一点说,HTTP接口测试的实质就是数据的传输和接收,传输的是接口地址中的参数,接收的是文本字符串,然后对比文本字符串是否正确。

  • 接口测试可以在用户界面还没有被开发出来之前就对系统或系统中的模块进行测试,不用等到系统提供了可测试的功能界面之后再进行测试。
  • 用户的交互界面封装了系统中各模块的接口。有用户界面时,通过用户界面传递数据到系统中的接口去;没有用户界面时,可以直接通过接口传递数据。也就是说,系统中各模块的接口是实现用户界面功能的基础。越早进行测试,就能越早发现Bug,与此同时开发人员修复Bug的成本就越低,这便是接口测试的意义所在。
  • 前端的页面和后台模块是两组人开发的,后台开发完后,再将前端的页面套在后台的接口上。也就是说,只要后台模块测试好了,前端页面不管怎么改变都可以适用。同时还要注意,数据通过前端页面输入时,前端页面通常只做一些基础校验,核心业务还要靠后台来处理。因为接口测试是跳过前端页面这一层框架提前对后台模块进行测试的,所以它的意义更重大。

在这里插入图片描述
了解 GET / POST 方式的 HTTP 请求

工具:Postman

当采用POST方式发送HTTP请求时,为了安全起见,其传递的参数不能直接放在URL中,这是POST方式与GET方式最大的不同点之一。

POST方式中的参数并不是直接放在URL中,而是放在了请求的Body中。所以如果要采用POST方式发送请求,普通的浏览器是没有办法完成的,只能寻求如Postman这样的专业工具。在接口测试中,具体是采用GET方式还是POST方式,这在接口文档中会有明确的规定。大家按接口文档的要求进行测试即可。

11.1 HTTP 的状态码

状态码意义
200代表你发送的请求成功了,服务端成功响应了你的请求。
202代表你发送的请求已接受,但服务端还未完成处理。
301你请求的资源已被永久地移动到新的URL,网页会跳转到新的地址。
302URL临时移动,与301类似。但资源只是临时被移动,客户端应继续使用原有URL。
400客户端请求的语法错误,服务器无法理解。
403资源不可用,服务器理解客户的请求,但拒绝处理它,通常是由于服务器上文件或目录的权限设置导致的Web访问错误。
404服务器无法根据客户端的请求找到资源(网页),也就是代表着你请求的资源(网页)不存在了。
500服务器的内部产生了错误,无法完成客户端的请求。
501服务器不具备完成请求的功能,无法完成此请求。

11.2 了解 HTTP 请求/响应的协商过程

通过客户端发送HTTP请求到服务端看似很简单,只需要通过浏览器或Postman等相关工具就可以发送,然后等着接收服务端响应的资源即可。但实际上双方还有一个协商的过程,不是说客户端无论发送什么请求,服务端就必须给出相应的响应。客户端在发送请求时,是需要和服务端签订协议的,这个协议称为HTTP协议。

抓包工具:Firefox浏览器就自带抓包工具(有很多工具可供使用)

在这里插入图片描述
上图展示了客户端和服务端交互的信息,这些信息包括 消息头、请求头、响应头、Cookie、参数、响应 6 个选项的信息,对于耗时、堆栈跟踪、安全这些选项初级软件测试人员可不用关注。

  • 请求头的信息会对发送的URL请求起到一个辅助说明的作用
  • 服务器除了把以上正文内容响应给客户端外,还会把响应头里面的信息也一并响应给客户端。响应头里面的信息主要是对响应的正文内容起到一个辅助说明作用。

11.3 通过 Python 代码发送 HTTP 请求

除了通过相关的工具可以发送HTTP请求外,还可以通过代码来发送HTTP请求。Python自带的很多模块也可以发送HTTP请求,如http.client,urllib2等模块,但这些自带的模块用起来很复杂,不建议使用。在这里可以使用一个第三方提供的requests模块,在该模块中已经封装了发送HTTP请求的方法。

import requests
test_params = 'q=漫步人生路’
r = requests.get('https://api.douban.com/v2/music/search', params=test_params)
print(r.status_code)
print(r.headers)
print(r.cookies)
print(r.json())
print(r.text)

在这里插入图片描述

12.Linux 操作系统入门

有90%的企业在招聘软件测试人员时都要求应聘者了解Linux操作系统的相关知识,而近年来云计算的发展更是增加对Linux人才的需求。Linux操作系统同Windows操作系统一样,同样提供了图形操作界面。但Linux操作系统的核心并不在于图形界面,而是在于命令行界面。

Linux操作系统有多个版本,每个版本都有其应用领域。常见的版本有Ubuntu版本、RedHat版本、CentOS版本、Fedora版本等。而CentOS版本是常被应用于后台服务器的操作系统,并且可免费使用。

常见且重要的命令行包括:cd命令、ls命令、pwd命令、命令提示符、touch命令、mkdir命令、cp命令、rm命令、vi编辑器、find命令、grep命令、cat命令、head命令、tail命令。初学者尤其要注意cd命令、ls命令、pwd这3个命令的使用。

[root@localhost etc] #
  • @符号前面的为当前登录的用户,这里可以看到当前登录的用户为root用户,也就是超级管理员。
  • @符号后面跟的是主机名,此处的主机名为localhost。
  • 主机名后面跟的是当前用户所处的目录,这里的目录是etc目录,也就是说root用户正处根目录下的etc目录下。
  • 命令提示符的最后一个字符是“#”号,它的含义是当前登录的用户为root用户,如果此处显示是“$”符号,则代表当前登录的用户不是root用户,而是一个普通用户。

12.1 touch / mkdir / cp / rm 命令

  • 在Linux操作系统中新建一个普通文件时,需要用到touch命令。
    在这里插入图片描述
  • 在Linux操作系统中新建一个目录时,需要用到mkdir命令。
    在这里插入图片描述
  • 如果想将文件复制到test目录里面,应该如何操作呢?这就需要用到cp命令。
    在这里插入图片描述
  • 在Windows操作系统里面很容易进行删除文件夹和文件的操作,只要单击鼠标右键删除即可,在Linux操作系统中就要用到rm命令。(-f 代表强制删除,删除过程中不会出现提示。使用rm删除文件后不能恢复)
    在这里插入图片描述

12.2 vi 编辑器

vi编辑器是Linux操作系统中的一款文本编辑器,用于编写与修改Linux操作系统中的文本文件,而vim是vi的升级版,但大多数Linux用户习惯操作vi编辑器。

vi编辑器在命令行模式下,还可以进行复制、粘贴、删除操作,例如要复制某一行内容,可将光标移动到要复制的行中,然后快速按下yy就可以复制本行内容,粘贴的话只需要按下“P”键就可以了;如果想要删除某一行,只需要快速按下dd就可以了。请注意无论是复制、粘贴,还是删除,都是在命令行模式下操作的。

12.3 find / grep 命令

  • 在前面通过vi编辑器新建了一个名为“123”的文件,如果忘记了这个文件的位置,这时就可以使用find命令找到该文件的具体位置。
    在这里插入图片描述
  • 通过find命令找到了123这个文件,但此时如果想把123这个文件中包含“a”字符的行过滤出来,那么此时就要用到grep命令。具体命令如下。
    在这里插入图片描述

12.4 cat / head / tail 命令

  • 使用 cat 命令查看文件的全部内容。(使用cat命令时只可查看,不可编辑。)
    在这里插入图片描述
  • 如果使用head命令查看文件,默认情况下只会显示该文件的前十行。
    在这里插入图片描述
  • 如果使用tail命令查看文件,默认情况下只会显示该文件末尾10行。

12.5 演示一个简单的 shell 脚本

前一节中介绍的命令行都是一条一条执行的,但其实可以把要执行的命令按顺序存放在一个文本文件中,并且给该文本文件授予一个可执行的权限,这样每次执行时就只需要执行该文本文件,就可以一次性把文本文件里所包含的全部命令执行完成,而无须手工一条一条执行。这个具有可执行权限的文本文件就是shell脚本。

在这里插入图片描述

  • cal 命令用于显示日历信息。
  • su 命令用于切换用户,“su jiangchu001”的含义是从root用户切换到jiangchu001用户中去,注意“su jiangchu001”中间有空格。

退出vi编辑器后将回到命令行界面,接着使用chmod命令为456这个文件授予可执行的权限。

在这里插入图片描述
chmod 为授予权限命令,x 代表的是可执行的权限,+x 456 的含义是为456这个文件增加可执行的权限,注意“+x”前后有空格,执行完“chmod +x 456”这个命令后,456这个文件就变成了一个可执行文件。

通过 ./456(也就是点加斜杠加456,注意这三者之间没有空格)就可以执行456这个脚本文件。

在这里插入图片描述

13.数据库入门

对于Web系统而言,测试人员在前台页面所做的操作,无论是查询数据,还是增加数据等其他操作,其实很大程度上都是在操纵后台数据库。因为前台页面显示的这些数据大多是从后台数据库查询出来的,在前台增加的数据最终也是存放在数据库里。

不同的是通过前台页面操作数据时,需要通过Web中间件(如Apache服务、PHP服务等服务程序)处理后再去操作数据库,也就是说前台在操作数据时其实是在间接地操作数据库。

😊 想对数据库操作了解更多的朋友,可以查看我之前的博客文章。

;