软件测试—基础知识

单元测试-集成测试-系统测试-回归测试-验收测试

1、单元测试:完成最小的软件设计单元(模块)的验证工作,目标是确保模块被正确的编码,使用过程设计描述作为指南,对重要的控制路径进行测试以发现模块内的错误,通常情况下是白盒的,对代码风格和规则、程序设计和结构、业务逻辑等进行静态测试,及早的发现和解决不易显现的错误。

2、集成测试:通过测试发现与模块接口有关的问题。目标是把通过了单元测试的模块拿来,构造一个在设计中所描述的程序结构,应当避免一次性的集成(除非软件规模很小),而采用增量集成。

自顶向下集成:模块集成的顺序是首先集成主模块,然后按照控制层次结构向下进行集成,隶属于主模块的模块按照深度优先或广度优先的方式集成到整个结构中去。

自底向上集成:从原子模块开始来进行构造和测试,因为模块是自底向上集成的,进行时要求所有隶属于某个给顶层次的模块总是存在的,也不再有使用稳定测试桩的必要。

3、系统测试:是基于系统整体需求说明书的黑盒类测试,应覆盖系统所有联合的部件。系统测试是针对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不相符合或与之矛盾的地方。系统测试的对象不仅仅包括需要测试的产品系统的软件,还要包含软件所依赖的硬件、外设甚至包括某些数据、某些支持软件及其接口等。因此,必须将系统中的软件与各种依赖的资源结合起来,在系统实际运行环境下来进行测试。

4、回归测试:回归测试是指在发生修改之后重新测试先前的测试用例以保证修改的正确性。理论上,软件产生新版本,都需要进行回归测试,验证以前发现和修复的错误是否在新软件版本上再次出现。根据修复好了的缺陷再重新进行测试。回归测试的目的在于验证以前出现过但已经修复好的缺陷不再重新出现。一般指对某已知修正的缺陷再次围绕它原来出现时的步骤重新测试。

5、验收测试:验收测试是指系统开发生命周期方法论的一个阶段,这时相关的用户或独立测试人员根据测试计划和结果对系统进行测试和接收。它让系统用户决定是否接收系统。它是一项确定产品是否能够满足合同或用户所规定需求的测试。验收测试包括Alpha测试和Beta测试。

Alpha测试:是由用户在开发者的场所来进行的,在一个受控的环境中进行。

Beta测试:由软件的最终用户在一个或多个用户场所来进行的,开发者通常不在现场,用户记录测试中遇到的问题并报告给开发者,开发者对系统进行最后的修改,并开始准备发布最终的软件。

黑盒测试和白盒测试

1、黑盒测试(常用于系统测试)也称功能测试或数据驱动测试。常用的黑盒测试方法有:等价类划分法;边界值分析法;因果图法;场景法;正交实验设计法;判定表驱动分析法;错误推测法;功能图分析法

2、白盒测试(常用于单元测试)也称为结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。

白盒测试中的逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖

手工测试和自动化测试的优缺点:

手工测试

        缺点: 1、重复的手工回归测试,代价昂贵、容易出错。

                    2、依赖于软件测试人员的能力。

        优点:

                1、测试人员具有经验和对错误的猜测能力。

                2、测试人员具有审美能力和心理体验。

                3、测试人员具有是非判断和逻辑推理能力。

自动化测试

        优点:

               1、对程序的回归测试更方便。回归测试的动作和用例是完全设计好的,测试期望的结果也是完全可以预料的,将回归测试自动运行,可以极大提高测试效率,缩短回归测试时间。

               2、可以运行更多更繁琐的测试。自动化的一个明显的好处是可以在较少的时间内运行更多的测试。

               3、可以执行一些手工测试困难或不可能进行的测试。

                4、更好地利用资源。将繁琐的任务自动化,可以提高准确性和测试人员的积极性,将测试技术人员解脱出来投入更多精力设计更好的测试用例。有些测试不适合于自动测试,仅适合于手工测试,将可自动测试的测试自动化后,可以让测试人员专注于手工测试部分,提高手工测试的效率。

                5、测试具有一致性和可重复性。由于测试是自动执行的,每次测试的结果和执行的内容的一致性是可以得到保障的,从而达到测试的可重复的效果。

               6、测试的复用性。由于自动测试通常采用脚本技术,这样就有可能只需要做少量的甚至不做修改,实现在不同的测试过程中使用相同的用例。

                7、增加软件信任度。由于测试是自动执行的,所以不存在执行过程中的疏忽和错误,完全取决于测试的设计质量。一旦软件通过了强有力的自动测试后,软件的信任度自然会增加。

        缺点:

                1、不能取代手工测试

                2、手工测试比自动测试发现的缺陷更多

                3、对测试质量的依赖性极大

                4、测试自动化不能提高有效性

                5、测试自动化可能会制约软件开发。由于自动测试比手动测试更脆弱,所以维护会受到限制,从而制约软件的开发。

                6、工具本身并无想像力

                7、自动化测试同样需要维护,如果版本迭代频繁需要一定维护成本。

自动化测试的意义

1、可以对程序的新版本自动执行回归测试

2、可以执行手工测试困难或者不可能实现的测试,如压力测试,并发测试

3、能够更好的利用资源,节省时间和人力

执行自动化测试之前首先判断这个项目是不是和推广自动化测试,然后对项目做需求分析,指定测试计划,搭建自动化测试框架,设计测试用例,执行测试,评估。

自动化测试框架:

pytest:

  • pytest是python的第三方测试框架,是基于unittest的扩展框架,比unittest更简洁,更高效。使用pytest编写用例,必须遵守以下规则:

(1)测试文件名必须以“test_”开头或者"test"结尾(如:test_ab.py)
(2)测试方法必须以“test
”开头。
(3)测试类命名以"Test"开头。

webdriver的工作原理:

(1)启动浏览器后,selenium-webdriver会将目标浏览器绑定到特定的端口,启动后的浏览器则作为webdriver的remote server。

(2)客户端(也就是测试脚本),借助ComandExecutor发送HTTP请求给sever端(通信协议:The WebDriver Wire Protocol,在HTTP request的body中,会以WebDriver Wire协议规定的JSON格式的字符串来告诉Selenium我们希望浏览器接下来做什么事情)。

(3)Sever端需要依赖原生的浏览器组件,转化Web Service的命令为浏览器native的调用来完成操作。

功能测试和接口测试

相对功能测试而言,接口测试有一个比较明显的区别,就是输入不再是界面的,而是一个基于HTTP的请求;输出也不再是界面,而是基于HTTP的响应。所以需要通过请求和响应分别来输入我们的数据以及检查我们的结果。

其实接口测试和的功能测试是非常相似的,功能测试怎么做,接口测试还是怎么做。

功能测试用例,最核心的三个部分就是:输入、操作步骤和预期结果。

接口测试用例,其实主要的也就是这么三个部分。

平时所说的测试用例设计方法,也就是对输入项进行各种不同的取值,然后再做组合。拿登录来说,登录功能有用户名和密码,那用户名,有正确的用户名和错误的用户名两种情况,密码有正确的密码和错误的密码两种情况。用户名和密码在一起就会产生一些组合:
(1)用户名正确,密码正确;
(2)用户名正确,密码错误;
(3)用户名错误,密码的正确;
(4)用户名错误;密码错误。
输入时,选择不同的数据组合会产生不同的测试场景,每一个场景都需要执行一遍。

接口测试工具:Jmeter、Postman等。

接口测试流程:

第一步,设计操作步骤。

操作步骤就是请求,有一些请求是是单独的,有些请求是多个请求前后有联系的,这种情况就需要创建关联,。那么我们需要了解请求的格式,规范以及如何做关联。soapUI,postman,jmeter里,都有关联。

第二步,设计数据用例。

建议将数据用例写到Excel文档里,然后让工具读取Excel。Excel里有几组数据用例,就执行几次。循环执行(自动化),就可以让每一个用例被执行一次,那么每一个测试场景也就被运行到了。

第三步:断言。

也就是提前将预期结果写入到工具中,让工具自动化判断结果是否正确。不同的工具叫法不同,soapUI和Jmeter中叫做断言,postman中叫做tests。

第四步:执行并检查测试结果。

执行很简单,对测试结果进行分析的话就需要了解协议。知道发出去了什么,返回了什么,才能够知道,到底哪个环节出了问题。

Mock测试:

在测试过程中,对于某些不容易构造(如 HttpServletRequest 必须在Servlet 容器中才能构造出来)或者不容易获取的比较复杂的对象(如 JDBC 中的ResultSet 对象),用一个虚拟的对象(Mock 对象)来创建以便测试的测试方法。

Mock是为了解决不同的单元之间由于耦合而难于开发、测试的问题。所以,Mock既能出现在单元测试中,也会出现在集成测试、系统测试过程中。Mock 最大的功能是帮你把单元测试的耦合分解开,如果你的代码对另一个类或者接口有依赖,它能够帮你模拟这些依赖,并帮你验证所调用的依赖的行为。

适用场景:

1、需要将当前被测单元和其依赖模块独立开来,构造一个独立的测试环境,不关注被测单元的依赖对象,只关注被测单元的功能逻辑。

2、被测单元依赖的模块尚未开发完成,而被测单元需要依赖模块的返回值进行后续处理。

3、被测单元依赖的对象较难模拟或者构造比较复杂。

Mock优势:

1、 团队可以并行工作

2、可以模拟那些无法访问的资源

缺点:

当把mock接口换成实际接口后,测试/开发也必须把之前的测试重新做一遍,避免漏测。

Fiddler:抓包工具,模拟弱网环境。

Fiddler限制网速的原理:这是PC端的软件,我们模拟弱网络环境的流程大概是:手机APP使用网络代理代理到我们的pc上,然后所有的网络请求都会经过pc,这个时候我们就可以通过fiddler来限制网络,从而达到模拟弱网络环境的目的。

Monkey测试工具:Android自带

Monkey测试原理:Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法

        由Java语言写成,在Android文件系统中的存放路径是: /system/framework/monkey.jar。

什么是ADB

       Android Debug Bridge,安卓调试桥

                

操作流程

通过名为“monkey”的Shell脚本去启动Monkey.jar程序(shell脚本在Android文件系统中 的存放路径是:/system/bin/monkey),在你指定的APP应用上模拟用户点击,滑动,输入等操作以极快的速度来对设备程序进行压力测试,检测程序是否会发生异常,然后通过日志进行排错。

第一个前提条件就是安装Java JDK,第二个条件就是安装android SDK。JDK 大家肯定知道是什么,同样android SDK(software development kit)也就是android专属的软件开发工具包

目的

测试app 是否会是否会Crash,主要用于稳定性测试
操作命令格式:adb shell monkey {+命令参数}

操作步骤

  1. 环境配置:把adb加入系统环境,手机开启开发者模式
  2. 连接手机,获取测试的包名。获取包名的方法
  3. Monkey编写测试命令,并运行。monkey操作命令

IOS测试工具:

Xcode 是运行在操作系统 Mac OS X 上的集成开发工具(IDE),由 Apple Inc 开发。它是开发 macOSiOS 应用程序的最快捷的方式。Xcode 具有统一的用户界面设计,编码、调试、测试,都在一个简单的窗口内完成。

另外,Xcode 也可以用来测试 APP 的时候获取 APP 的日志,分析 bug 和问题。


iOS 性能测试:

Instruments

Instruments 是 Xcode 自带的,用来动态跟踪和分析 MacOS 和 iOS 代码的实用工具,以独立 APP 形式存在的工具集,包含了很多强大的检测功能:其中包括在真机和模拟器上的 APP 进行性能测试。

主要功能有:

  1. 分析程序进程行为
  2. 分析内存分配及释放细节
  3. 查找 CPU 问题
  4. 查找程序性能瓶颈
  5. 检查设备相关的功能,比如:Wi-Fi、蓝牙等。
  6. 查找 App 中的内存问题,比如内存泄露(Leaked memory)、废弃内存(Abandoned memory)、僵尸(zombies)等。

PerfDog介绍:

移动全平台iOS/Android性能测试、分析工具平台。快速定位分析性能问题,提升APP应用及游戏性能和品质。手机无需ROOT/越狱,手机硬件、游戏及应用APP也无需做任何修改,极简化即插即用。

PerfDog支持移动平台所有应用程序(游戏、APP应用、浏览器、小程序、小游戏、H5、后台系统进程等)、Android模拟器、云真机等性能测试。

支持APP多进程测试(如Android多子进程及iOS扩展进程APP Extension)。Windows & Mac OS X平台PerfDog桌面应用程序版本都支持对iOS和Android设备进行测试。PC上PerfDog可多开,单PC可同时测试多台手机

腾讯工具:https://perfdog.qq.com/

LoadRunner:性能自动化测试工具

LoadRunner,是一种预测系统行为和性能的负载测试工具。通过模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够对整个企业架构进行测试。企业使用LoadRunner能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。

腾讯GT工具:

 GT(随身调) Android版是腾讯 MIG 专项测试组自行研发的Android APP随身调测平台,它是直接运行在手机上的“集成调测环境”(ITE, Integrated Test Environment)。根据官方文档可知悉:利用GT,仅凭一部手机,无需连接电脑,您即可对APP进行快速的性能测试(CPU、内存、流量、电量、帧率/流畅度等等)、开发日志的查看、Crash日志查看、网络数据包的抓取、APP内部参数的调试、真机代码耗时统计等。

GT支持iOS和Android两个手机平台,其中:1、iOS版是一个Framework包,必须嵌入APP工程,编译出带GT的APP才能使用;iPhone和iPad应用都能支持。2、Android版由一个可直接安装的GT控制台APP和GT SDK组成,GT控制台可以独立安装使用,SDK需嵌入被调测的应用、并利用GT控制台进行信息展示和参数修改。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值