软件测试基础理论(笔记)

软件测试基础理论

软件测试行业

image-20220612144427090

软件和软件测试

软件:软件是一系列按照特定顺序组织的计算机数据和指令的集合。软件就是程序加文档的集合体:软件=程序+数据+文档

软件的分类

  • 按应用范围划分:系统软件、应用软件
  • 按授权类别划分:专属软件、自由软件、共享软件、免费软件、公共软件
  • 按结构划分:单机软件、分布式软件

软件测试:什么是软件测试?找BUG,发现缺陷。

  • 检查软件产品是否符合设计的要求
  • 确认软件产品是否符合用户的实际要求
  • 提供软件产品的质量信息
  • 投入较低成本保障软件产品质量
  • 验证软件产品的需求、设计和实现的一致性
  • 对软件产品质量的全面评估
  • 揭示软件产品的质量风险
  • 验证和确认的一个过程

软件缺陷

  • 所有不满足需求或超出需求的都是软件缺陷
  • 没有不存在缺陷的软件,只有迄今为止尚未发现的缺陷

img

注:图为格蕾丝·赫柏发现第一个“bug”后的手稿。

软件测试的定义:使用人工或者自动的手段来运行或测试某个系统的过程。

软件测试的目的:以最小的人力、物力和时间找出软件中潜在的错误和缺陷,检验软件产品是否满足规定的需求,弄清实际结果和预期结果的差别。

测试用例

测试用例的定义:测试用例(Test Case)是指对一项特定的软件产品进行测试任务的描述,体现测试方案、方法、技术和策略。其内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等,最终形成文档。简单地认为,测试用例是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,用于核实是否满足某个特定软件需求。

测试用例的特性:有效性、可复用性、易组织性、可评估性、可管理性

测试用例的要素

  • 测试用例八大要素
测试用例编号测试用例标题测试模块预置条件测试输入操作步骤预期结果级别
ST-子项名-01重要
  • 测试用例其它要素
    • 用例设计者:方便准确找到测试用例的设计人员
    • 用例设计日期:方便检查测试用例的设计进度
    • 对应开发人员:出现BUG后能及时找到相应开发人员进行修复
    • 测试结果:执行测试用例最后的执行结果,包括pass/fail/block
    • 测试类型:功能测试、性能测试、压力测试等

测试用例的设计方法

  1. 等价类划分法

等价类,是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,具有等价特性。

等价类划分,指的是一种典型的、重要的黑盒测试方法。其就是解决如何选择适当的数据子集来代表整个数据集的问题,通过降低测试的数目去实现“合理的”覆盖,以此发现更多的软件缺陷,统计好数据后由此对软件进行改进升级。

  1. 边界值法

边界值法,也作边界条件测试,也是一种黑盒测试方法,适度等价类分析方法的一种补充。由长期的测试工作经验得知,大量的错误是发生在输入或输出的边界上。因此针对各种边界情况设计测试用例,可以查出更多的错误。

  1. 因果图法

用图解的方法表示输入的各种组合关系,写出判定表,从而设计相应的测试用例,它适合检查程序中输入条件的各种组合情况。

  1. 判定表法
  2. 正交表法
  3. 场景法
  4. 流程分析法
  5. 错误推断法

测试用例的力度:测试用例力度可划分为三个等级:简单、中庸、复杂。测试用例过于简单,则失去了测试的意义;测试用例过于复杂,则会包含具体的输入项和所期待的结果,具体到界面元素的操作步骤,指定测试的方法和工具等。大多数的测试团队编写的测试用例的力度介于两者之间。

测试用例的评审:测试用例的评审可分为同行评审和用户评审。通过测试⼈员组织⽤例评审会议,邀约项⽬相关⼈员,主要包括产品,开发及测试三⽅,对测试⼈员设计的测试⽤例的可执⾏性和全⾯性进⾏评估,同时消除各⽅对需求⽂档理解的偏差达到对需求理解的⼀致。

缺陷报告

从内部看,软件缺陷是产品开发或者维护过程中存在的错误

从外部看,软件缺陷是系统所需要实现的某种功能的失效或违背

总的来说,软件缺陷最终表现为所需要的功能没有完全实现,没有满足用户的需求

缺陷报告内容

编号属性名称描述
1ID唯一的缺陷ID,可以根据该ID追踪缺陷
2状态跟踪缺陷修复过程的进展情况
3标题缺陷的标题名
4严重程度对软件产品的影响程度
5优先级缺陷修复的先后顺序
6所属模块缺陷所属的项目和模块,要能较精确定位至模块
7记录人提交缺陷的人员姓名
8提交时间提交缺陷的具体时间
9处理人处理缺陷的人员姓名
10处理结果对处理结果的描述,描述处理情况和代码修改说明
11处理时间处理缺陷的具体时间
12验证人对被处理缺陷验证的验证人(回测者)
13验证结果对验证结果的描述:通过或者不通过
14详细描述对缺陷的重现步骤进行一个描述或演示
15环境说明对缺陷进行测试的环境
16必要的附件如涉及到的附件或错误现象的图片等

缺陷状态

  • new:测试人员发现缺陷,提交给开发经理
  • assigned:缺陷已指派、分配给具体的开发人员
  • open:激活(打开)的缺陷,开发方承认的缺陷
  • fixed:修改完成的缺陷(待返测的缺陷)
  • closed:回归测试通过,关闭缺陷
  • reopen:回归测试不通过,再次激活的缺陷
  • postone:推迟修改
  • duplicate:与已提交的缺陷重复
  • reject:被拒绝的缺陷,开发方不承认的缺陷

缺陷严重程度

  • Fatal:存在致命问题的软件缺陷。系统的主要功能完全丧失,导致本模块以及相关模块异常,可能会造成系统或应用程序崩溃、死机、系统挂起或数据丢失等问题。

  • Critical:存在严重错误的软件缺陷。系统的主要功能部分丧失或系统的次要功能部分丧失,缺陷问题局限在本模块,导致模块功能失效或异常退出,如系统资源占用过大等。

  • Major:存在一般问题的软件缺陷。系统的次要功能没有完全实现但不影响使用,如系统提示信息不明确,用户操作界面差、操作时间长,模块功能部分失效等。

  • Minor:存在较小问题的软件缺陷。系统的功能性操作不受影响但使操作者不方便或遇到麻烦,如系统步骤繁琐等。

  • Enhancemental:建议修改的问题,由测试人员或问题提出人对测试对象提出的改进意见、建议或质疑,如用词、用语、颜色、按钮大小等。

缺陷优先级

  • 1级:立即解决。缺陷导致系统几乎不能完全运行、使用,或严重妨碍测试的执行。
  • 2级:高级优先。缺陷严重影响测试,需要优先考虑,在24小时内进行修正。
  • 3级:正常级别。缺陷需要修改,正常排队进行修正。
  • 4级:较低级别。缺陷可以在开发人员空闲时进行修正。

缺陷表现形式

  • 代码问题:不满足需求、功能实现错误、对产品或项目质量有影响的BUG
  • 设计缺陷:页面美观性、协调性、错别字等
  • 用户体验:对产品、项目的建议性意见
  • 性能问题:网络延时、内存问题、CPU占用、硬盘问题
  • 安全问题:业务功能存在的安全问题
  • 兼容问题:在部分环境中表现正常,在部分环境中表现不正常
  • 接口问题:涉及有模块间数据传递时使用
  • 配置问题:由于提供的配置不当或者配置不能够满足实际要求而出现的问题
  • 其他问题:上述不能归纳进来的问题
自动化测试

软件测试的自动化:自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较。在此过程中,为了节省人力、时间或硬件资源,提高测试效率,便引入了自动化测试的概念。

自动化测试包括:黑盒自动化测试、白盒自动化测试、性能测试、压力测试、GUI测试和安全性测试。

Selenium-Web自动化测试

Selenium自动化测试工具:Selenium是一个用于Web应用程序测试的工具。Selenium的核心功能是可以在多个浏览器上进行自动化测试,并且支持多语言。

Selenium控制浏览器原理(Selenium WebDriver)

image-20220614152719845

Selenium自动化测试工具及相关软件的安装配置(基于Python环境搭建)

  • 安装Python(Python 3.5以上版本)
  • 安装PyCharm
  • 安装Selenium包(通过指令安装pip install selenium
  • 安装浏览器(Google、Firefox、Safari、IE、Opera等)
  • 下载WebDriver

淘宝镜像:由于npm(node package manager,node包管理工具)命令在国内下载速度很慢,推荐为npm配置镜像,以加快下载速度。淘宝镜像是淘宝网为开发者提供的镜像服务器,它会和npm官方的服务器保持同步。

WebDriver必须放置在特定目录中,即系统的ATH环境变量所配置的地址。(此电脑==>属性==>高级系统设置==>环境变量==>系统变量Path==>新建)

上述下载安装的浏览器版本、WebDriver版本、Selenium版本需要匹配,具体对应关系可参照官网附录notes.txt

image-20220614160939430

Python-Web自动化测试脚本设计思路

# (1)导包-WebDriver
from selenium import webdriver
import time #导入此模块为执行下面代码

# (2)获取浏览器对象-实例化WebDriver
driver = webdriver.Chrome("chromedriver.exe")

# (3)输入被测网站网址-URL
url = "https://www.baidu.com/"
driver.get(url)

# (4)定位、操作元素


# (5)暂停程序并退出浏览器-回收资源
time.sleep(5) # 打开页面后休息5秒钟再执行后面代码,避免立即执行
driver.quit()

定位元素

  • id:find_element_by_id
  • name:find_element_by_name
  • class_name:find_element_by_class_name
  • tag-name:find_element_by_tag_name
# 定位元素
# 通过元素ID定位元素
driver.find_element_by_id("input")
# 通过元素Name定位元素
driver.find_element_by_name("button")
# 通过元素类名定位元素
driver.find_element_by_class_name("test")
# 通过元素标签名定位元素
driver.find_element_by_tag_name("div")

定位网页中的超链接:因为网页中的超链接(a标签)一般不包括ID名或类名等,所以需要一种特殊的手段进行定位。

  • link_text:find_element_by_link_text
  • partial_link_text:find_element_by_partial_link_text
# 定位超链接元素
# 定位完整的链接文本
driver.find_element_by_link_text("hao123")
# 定位部分的链接文本
driver.find_element_by_partial_link_text("hao")

操作元素

# 操作元素
# 定位网页输入框并输入内容
driver.find_element_by_id("input").send_keys("中国")
# 定位网页的按钮并点击
driver.find_element_by_id("button").click()

操作浏览器

# 操作浏览器
# 最大化浏览器
driver.maximize_window()
# 设置浏览器宽高
driver.set_window_size(width,height)
driver.set_window_size(800,600)
# 设置浏览器位置(浏览器左上角相对于屏幕左上角的位置)
driver.set_window_position(x,y)
driver.set_window_position(200,200)

driver.find_element_by_id("input").send_keys("Hello")
driver.find_element_by_id("button").click()
# 设置浏览器后退
time.sleep(2)
driver.back()
# 设置浏览器前进
time.sleep(2)
driver.forward()
# 设置浏览器刷新
time.sleep(2)
driver.refresh()
# 回收资源
time.sleep(2)
driver.quit

# 关闭浏览器当前页面
driver.close()
# 关闭浏览器
driver.quit()

元素等待(页面等待)

为什么需要等待?

因为在页面中看到的元素,并不一定都是写在HTML代码中的,也有可能是通过JavaScript代码的DOM操作产生出来的。而由JavaScript产生的元素,在浏览器加载页面时会先获取相关数据,处理后再显示到页面中,这一过程中,会导致页面在一定时间内所显示元素或内容不全面。如果运用Web自动化测试工具执行程序化的命令去定位页面元素,这个时间将会是非常短的。因此,一般来讲,由自动化程序定位到元素可能会先于浏览器加载出元素,所以会导致程序因无法定位到元素而出错,无法正常执行命令,这时就需要进行元素等待了。

  • 强制等待:time.sleep()
  • 显示等待:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
url = r'test.html'
driver = webdviver.Chrome()
driver.get(url)
element = WebDriverWait(driver,5).until(EC.presence_of_element_located((By.ID,'userA')))
element.send_keys("admin")
  • 隐式等待:implicitly_wait()

真正页面加载过程中,强制等待不够准确,因为网页在不同的系统环境下其加载时间是不稳定的,有的快有的慢,而将强制等待时间设置为固定值,如time.sleep(1),有可能程序依然会报错,此方法不建议使用。

显示等待的原理是每隔一段时间不断尝试查找元素,如果找到元素就返回,如果超出设定时间没有找到元素就会报错。此方法相对麻烦,不建议使用。

在实际开发中,使用较多的是隐式等待。

移动测试

移动测试是帮助用户发现各类App隐患,包括但不限于应用崩溃、兼容性问题、功能性问题、性能问题等,以期提升App质量和市场竞争力,减少用户流失。

移动测试环境搭建

  • 安装Java SDK(配置环境变量JAVA_HOME和PATH)

image-20220615101658765

配置JAVA_HOME:新建系统变量,设置变量名为"JAVA_HOME",变量值为JavaSDK的安装路径"…\Java\jdk1.8.0"。

配置PATH:找到"…\Java\jdk1.8.0"下的bin目录,复制路径。找到系统变量PATH,新建环境变量并将所复制路径添加。

  • 安装Android SDK(配置环境变量ANDROID_HOME和PATH)

配置ANDROID_HOME和PATH同上一操作步骤一样。

  • 连接安卓机(使用模拟器也可)

image-20220615105708267

注:下载并解压Android SDK时所设置的目录必须为全英文目录。

Appium-移动应用自动化测试工具

Appium自动化测试工具:Appium 是一个开源、跨平台(测试程序跨平台、支持多平台上的App测试)、多语言支持的移动应用自动化工具。

Appium测试对象包括:原生 App,混合 App,移动 Web App。

Appium环境搭建

  • 安装Appium

  • 安装Appium-Python-Client(通过Python安装库)

image-20220615144012648

ADB:ADB(Android Debug Bridge),安卓调试桥。ADB是一个 客户端-服务器端 程序,其中客户端为你用来操作的电脑,,服务器端为Android设备。

ADB常用命令

  • 查看设备名称:adb devices
  • 进入手机终端:adb shell
  • 获取Android手机版本:adb shell getprop ro.build.version.release
  • 获取Android手机当前运行的程序和界面名称:adb shell dumpsys window windows | findstr mFocusedApp
  • 传输电脑文件至手机:adb push 电脑上的文件 手机上的位置
  • 传输手机文件至电脑:adb pull 手机上的文件 电脑上的位置
  • 安装应用:adb install 电脑上apk文件路径
  • 卸载应用:adb uninstall 应用的包名
# (1)连接设备
from appium import webdriver
# 组装一个字典,注明操作平台、系统版本、设备名称和要打开的应用和界面的名称
desired_caps = {} # 先定义一个空字典
desired_caps['platformName'] = 'Android' # 操作系统:Android/IOS
desired_caps['platformVersion'] = '5.1' # 系统的版本号
desired_caps['deviceName'] = '192.168.56.101:5555' # 测试设备的名称
desired_caps['appPackage'] = 'com.android.setting' # 应用唯一标识(包名)
desired_caps['appActivity'] = '.Setting' # 应用界面名称
# 从appium库中导入driver对象
# driver = webdriver.Remomte('appnium程序的地址','字典')
driver = webdriver.Remote('http://127.0.0.0:4723/wd/hub',desired_caps)

# (2)执行操作
# driver.xxx
# element = driver.find_element_by_xxx()
# element.xxx

# (3)退出  
driver.close_app()
driver.quit()

Appium自动化的工作原理

在这里插入图片描述

移动测试自动化-基础操作

  • 关闭应用driver.close_app()

  • 断开连接driver.quit()

  • 安装应用driver.install_app('apk文件在电脑中的绝对路径')

  • 卸载应用driver.remove_app('应用的包名')

  • 判断应用是否安装driver.is_app_installed('应用的包名')

  • 获取应用界面xml源码driver.page_source

  • 获取当前操作应用的包名driver.current_package

  • 获取当前操作应用的界面名称driver.current_activity

  • 获取元素文本内容element.text

  • 点击元素对应位置element.click

  • 获取属性值element.get_attribute(属性名称)

  • 获取元素左上角坐标element.location

  • 获取元素的宽高element.size

移动测试自动化-手势操作

移动端手势包括单击、双击、长按、滑动、缩放、拖拽等操作。

Postman

Postman是一款非常流行的http接口测试工具。协议://域名/资源?num=10

Postman接口测试

image-20220617125342722

接口测试

接口

人类与电脑等信息机器或人类与程序之间的接口称为用户界面。电脑等信息机器硬件组件间的接口叫硬件接口。电脑等信息机器软件组件间的接口叫软件接口。

常见接口格式

  • xml:相对来说比较古老,但也有不少现存系统在使用xml,其主流技术标准是SOAP、WSDL、UDDI等。

  • json:目前相对主流的方案,具有相同含义的信息,传输信息量比较小。

接口测试

通过接口测试,测试接口的正确性和稳定性,快速定位BUG,提高测试效率。能为项目平台带来高效的缺陷监测和质量监督能力。平台越复杂,系统越庞大,接口测试的效果就越明显。

接口测试流程:分析接口文档和需求文档——>编写接口测试计划——>编写接口测试用例——>接口测试执行——>输出接口测试报告

接口测试分类

  • web接口测试:服务器接口测试,即测试浏览器与服务器的接口,为B/S架构。外部接口测试,即测试第三方接口。
  • 模块接口测试:主要测试模块的调用与返回。

接口测试规范-Restful设计规范

Restful设计风格:REST(Representational State Transfer),即表述性状态传递,它是由Roy Fielding博士在2000年的博士论文中提出的一种软件架构风格,是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。例如,Amazon提供接近REST风格的Web服务进行图书查找,Yahoo提供的Web服务也是REST风格的。

性能测试

Apache JMeter是开源软件Apache基金会下的一款性能测试工具,用来测试部署在服务器端的应用程序的性能。

官网下载地址:https://jmeter.apache.org/download_jmeter.cgi(注意最后将安装包下载解压至全英文目录)

img

因为JMeter是基于JAVA语言构建的,所以运行使用JMeter前必须安装JAVA的JRE/JDK并且设置好JAVA_HOME环境变量。

JDK下载官网地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

image-20220707203023547

image-20220707204049695

image-20220707204210776

禅道—软件生命周期管理工具
软件测试项目环境

测试环境介绍

软件测试环境搭建分为基础环境搭建和测试环境搭建。

基础环境=操作系统+Web服务器+数据库+编程语言

  • LNMP:Linux+Nginx+MySQL+PHP
  • WAMP:Windows+Apache+MySQL+PHP

image-20220709112142092

软件测试基础环境

测试环境搭建

测试流程

  1. 需求分析与评审
  2. 编写测试计划与测试方案
  3. 设计测试用例与评审
  4. 执行测试用例与缺陷跟踪
  5. 编写测试报告

测试工程师在需求评审中的主要职责是:

  • 确认自己理解需求,无异议;
  • 确认需求无明显错误,能够支撑后续的用例设计等;
  • 对需求中不合理的地方提出自己的修改意见。

测试计划与测试方案的区别:

  • 测试计划描述了要进行的测试活动的范围、方法、资源和进度文档;测试方案是从技术的角度去分析需求,在方向上明确要如何去测,分析结果重点在于测试策略与技术实现。
  • 测试计划输出的是"管理型"文档;测试方案输出的是"技术型"文档。
  • 测试计划主要解决"做什么?“、“谁来做?”;测试方案主要解决"怎么做?”。

测试计划内容(5W1H):

  • Why——编写目的,为什么要做计划;
  • What——测试范围,测试哪些方面,不同阶段的工作内容;
  • When——任务进度安排,同任务阶段的起止时间;
  • Where——相应文档,缺陷的存放位置,测试环境等;
  • Who——人力物力资源分配,哪些测试人员分别负责哪些测试工作;
  • How——测试方法和策略,使用哪些测试工具
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值