导图社区 软件测试
软件测试技术是软件开发过程中的一个重要组成部分,是贯穿整个软件开发生命周期、对软件产品(包括阶段性产品)进行验证和确认的活动过程,其目的是尽快尽早地发现在软件产品中所存在的各种问题——与用户需求、预先定义的不一致性。
编辑于2022-06-15 15:09:23软件测试
基本理论
概述
什么是软件? 文档+数据+程序 什么是测试? 使用人工或自动的手段来运行或测试某个系统,并发现问题,解决问题的过程。 软件测试的目的? 在于检验它是否满足规定的需求或弄清预期结果和实际结果之间的差别。
模型
瀑布模型 需求分析--概要设计--详细设计--编码--测试--运行维护 V模型 需求分析--概要设计--详细设计--编码--单元测试--集成测试--系统测试--验收测试--运行维护 W模型 用户需求--需求分析--概要设计--详细设计--编码--集成--实施--支付 验收测试设计--确认与系统测试设计--集成测试设计--单元测试设计--单元测试--集成测试--系统测试--验收测试
软件测试的分类
按测试的策略分类: 黑盒、白盒 按测试技术分类: 手工、自动 按测试过程阶段划分: 单元测试、集成测试、系统测试、验收测试 验收测试分类: α测试:先在公司内部的环境运行,由公司员工和个别用户代表先使用,提出反馈意见和发现缺陷。(开发人员、测试人员要在现场)内测 β测试:让少数用户和公司的合作伙伴试用,提出反馈意见和发现缺陷。(开发人员、测试人员不在现场)公测 正式验收:基本由用户执行、测试或实施人员支持 黑盒:又称为数据驱动测试,把测试对象当做看不见的黑色盒子,在完全不知道驱动内部结构和处理过程的情况下进行测试,又分为功能测试和性能测试。 功能测试:是黑盒测试的一方面,检查实际软件的功能是否符合用户的需求。 (界面测试、易用性测试、兼容性测试) 性能测试:检查程序的性能是否符合用户的需求。 (负载测试、压力测试) 负载:让被测系统在其能忍受的压力和极限之间连续运行,来测试系统的稳定性。 压力:持续不断的给被测系统增加压力直到被测系统压垮为止,用来测试系统能够承受的最大压力。
黑盒测试的方法
等价类、边界值、因果图、判定表、场景法、正交测试法、错误推测法
白盒测试
又称为结构测试或者逻辑驱动测试,是一种按照程序内部结构和编码结构,设计测试数据并完成测试。 静态白盒测试、动态白盒测试 静态白盒测试: 不运行被测程序本身、仅通过分析或者检查源程序的语法、结构、方法、接口来验证程序的正确性。为需求文档和设计文档还有源程序做结构分析、流程图分析、符号执行来找错。 动态白盒测试: 运行程序,由于是白盒,就一定要洞察盒子里面,检查代码的运行情况。 方法:逻辑覆盖方法(语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、路径覆盖) 白盒测试的策略: 逻辑覆盖、循环覆盖、同行评审、桌前检查、代码走查、代码评审、静态数据流分析
测试用例
概念
定义: 测试用例就是记下我们要进行什么测试,进行测试的具体步骤,以及测试执行是否正确的标准。 测试用例是一个包含输入,预期输出并与实际输出有关的标识。 测试用例的用途和目的: 用途: 执行测试,发现缺陷。 重复执行测试,重现缺陷。 管理测试过程。 回归测试,验证缺陷是否合理。 目的: 使得测试更加方便执行。 提高测试的效率。 便于进行回归测试,使得测试过程更加方便管理。 测试用例设计的主要因素: 需求目标、用户实际使用场景、软件功能需求规格说明书、测试方法、测试对象
黑盒测试的方法
等价类:根据程序对数据的要求,把程序的输入划分成若干个部分,区分出哪些数据是有效的,哪些是无效的,然后从每个部分取少数代表性的数据作为测试用例。 有效等价类(有意义的,合理的数据)、无效等价类(没有意义的,不合理的数据) 边界值:对程序输入或输出的边界值进行分析和测试,是对等价类划分的一个补充。 0<=x<=99 -99<=x<=0 因果图:分析输入条件和输出条件,划出输入条件的相互制约的关系以及组合关系,输出结果对输入条件的依赖关系,也就是什么样的输入条件组合会产生怎样的输出结果。 判定表:画因果图是一个辅助工具,通过分析最终得到的判定表,再通过判定表编写测试用例,但有时画因果图非常麻烦,影响测试的效率,所以在应用熟练之后,可以直接写判定表,进行编写测试用例。 正交排列设计法:正交排列设计法能够用最少的测试覆盖更多的操作,当可能的输入数据或者输入数据的组合数量很大时,由于不可能为每个组合创建测试用例,可以采用此方法 场景法:模拟用户操作软件的场景,主要用于测试系统的业务流程。当拿到一个测试任务时,我们并不是先考虑某个控件的边界值、等价类是否满足要求,而是先关注它的主要功能和业务流程是否实现 错误推测法:在测试程序时人们可以根据经验或者直觉去推测程序中可能出现的各种错误,从而有针对性的编写检查这些错误的测试用例
缺陷报告
缺陷的特征: 未实现需求说明书要求的功能,出现了不应该出现的错误,实现了未要求的功能,软件测试人员认为难以理解,不易使用,运行速度缓慢,或者(最终用户)认为不好使用。 缺陷属性: 编号,标题,状态,严重程度,优先级别,类型,发现者,发现日期,所属模块,发现缺陷的版本,重现的步骤
功能测试涉及的软件
SVN:版本管理工具 禅道:项目管理工具(产品、需求、项目、测试)
环境部署
基本概念
开发环境、测试环境、正式环境 测试环境: Web服务:Apache<xampp>(禅道、78OA)、 IIS<系统程序功能安装IIS服务>(在线考试系统)、 Tomcat<下载安装Tomcat包+jdk>(易买网) 数据库:sqlserver、mysql、oracle
Windows下的IIS
https://www.tokos.cn/article/detail/1314750156557651968
Windows下的Tomcat
https://blog.csdn.net/qq_35117024/article/details/86085067
Linux下的Tomcat
https://blog.csdn.net/weixin_40496191/article/details/107812969
子主题
自动化测试
基本概念
种类:UFT,Selenium(python) 为什么做自动化? 高速、不间断运行 可以多次重复,减少单调性 模拟成千上万并发用户同时发送请求 准确客观 缺点:发现缺陷少、成本高(开发成本和维护成本)、工具无法对复杂的逻辑进行判断、没有创造力,不能灵活处理意外事件
UFT
mercury 前生叫做QTP,后被惠普公司改名为UFT UFT录制脚本: 1.准备测试环境、资源、了解被测系统,详细的测试需求 2.根据测试需求编写测试用例 3.做测试前最好手动执行一遍测试流程,提高录制脚本的效率,避免多余的脚本 4.初始化条件和结束条件一致,第一部走到最后一步,然后要从最后一步流畅的返回第一个界面 5.创建测试脚本(录制脚本),回放录制的脚本,确保录制的脚本流程没有问题 6.验证和增强:在第5点中录制的脚本是一个最基本的起点,并不实用,因为没有检查点 7.添加检查点(位图、文本、图片、标准检查点) 8.参数化(实质上是把用例中设计的数据一一填入查看测试结果),可以利用参数化模拟多个订单、多个用户的操作。 什么是action:action是动作,是一系列操作步骤的集合,在UFT中,允许将整个测试脚本分为多个action,每个action就是一个相对独立的逻辑测试单元,而一个UFT脚本就是由顺序调用每个action而构成。 action的种类:可复用(可以被其他测试多次调用,在其他测试中以只读的方式使用 ),不可复用(只能在本测试脚本中调用),外部 action的优点: 提高了测试步骤的复用性,开发效率,节省了时间
selenim
自动化的流程: 1.需求分析 2.自动化测试的策划:测试策略设计+自动化测试用例+自动化测试框架设计 3.自动化脚本编写:注意编写前也要进行评审 4.测试执行 5.测试总结 什么是selenium: web应用自动化测试的工具集 Selenium IDE:嵌入到浏览器的操作,用于录制和回放脚本 Selenium WebDriver:用于操作浏览器的一套API Selenium Standalone Server:实现脚本高效执行和拓展
环境搭建
1.安装selenium 在python的scripts文件下打开命令窗口,输入pip install selenium==3.141.0 2.安装firefox,与上面匹配的版本54。(注意:关闭自动更新) 3.给浏览器添加一个firebug插件。 4.安装firefox驱动WebDriver,与上面匹配的版本是0.19.1。(geckodriver放在python的根目录) 5.安装并配置pycharm 6.调试下整个环境 from selenium import webdriver driver=webdriver.Firefox()//谷歌、edge driver.get("http://www.baidu.com")
元素定位
1.了解什么是页面元素 2.元素定位: (1)find_element_by_id()只会找到一个 (2)find_element_by_name()会找到多个 (3)find_element_by_tag_name()根据标签名字 (4)find_element_by_link_text()根据超链接的文本 (5)find_element_by_partial_link_text()模糊匹配超链接文本 (6)find_element_by_xpath()根据xpath路径 (7)find_element_by_css_selector()根据样式选择器匹配(类似于xpath,input#kw,input[name='sb']) (8)find_element_by_class_name() (class="color:'red'")
代码编写
编写脚本--模块化脚本--参数化脚本--测试框架--生成报告 测试框架:unittest import导入 继承Case类 分为以下几个模块: test case:测试用例 test fixture:包含执行测试用例的测试准备工作、测试用例执行后的准备和测试清理。 test suite:测试套,是测试用例、测试套或者两者的集合。 test runner:负责执行测试,并且将结果展示给用户。
性能测试
基本概念
性能测试是在正常、峰值以及异常负载条件下、测试系统的各项性能指标。 目的:评估系统的能力、识别系统中的弱点、性能调优以及验证可伸缩性和可靠性。 种类:负责,压力,容量,网络性能测试.... 并发用户数量:正在与服务器进行数据交互的在线用户数量。 请求响应时间:从客户端发出请求开始计时,到客户端接收到从服务器端返回的响应结果结束计时。 事务请求响应时间:用户完成某个具体事务(比如:跨行取款事务)所需要的时间。 吞吐率:单位时间内在网络传输的数据量。 点击率:每秒用户向服务器提交的http请求数量。 资源利用率:对不同资源的实用程度,比如:服务器的CPU,内存等等。 CPU:0-75%(正常),85%不太好,超过90%异常需要进行性能调优。 内存:0-30%(优),30%-70%为基本满足应用的要求,大于80%表示系统内存紧缺,需要增加内存条。 磁盘:30%以内为优,85%以上需要进行性能调优。
loadrunner
基本概念
LoadRunner是什么? 是惠普公司收购MI(水星)公司,一套预测系统行为和性能工业标准级负载测试根据。 能做什么? 1.用于测试应用程序的性能。 2.在可控的峰值负载条件下测试系统。 怎么做? 通过模拟成千上万的用户对被测应用进行操作和请求,在实验环境下精确重现生产环境任意可能出现的业务压力。然后通过在测试过程中获取的信息和数据来确认和查找软件的性能问题,分析性能和瓶颈。 性能测试的流程: 先制定测试计划--创建测试脚本--创建测试场景--监控测试场景--分析测试结果。
脚本管理
选择脚本协议: 1.一般情况下B/S架构选择WEB(http/html)协议。 2.C/S架构就要根据后端数据库的类型来选择。 事务: 在Loadrunner中,把用户一系列的操作集合称为事务。 事务的作用:利用事务可以监听指定操作的性能问题。 事务的使用:插入事务起始点,结束点。(1.在录制过程中插入 2.所有操作录制完成之后再手动插入) 集合点:是一个并发访问的点。 检查点:是在回放脚本期间搜索特定的文本或者图片的内容,从而验证服务器响应内容的正确性
场景设置与执行
手工场景、自动场景(面向目标的场景) 手工场景: 可以自行设置虚拟用户的变化,通过设计用户的添加和减少的过程,来模拟真实的用户请求,完成负载的生成手工场景是“定量型”性能测试。 vuser:虚拟用户数 面向目标场景: 录制脚本--工具--创建controller场景--选择面向目标场景--就会自动跳转生成。 设置一个运行目标,通过controller的自动加载功能进行自动化负载,如果测试的结果达到目标,说明系统的性能符合测试目标。
执行结果分析
当场景运行完之后--点击result--analysis results项--打开analysis应用 自行添加各种图表到结果查看项,将所需要的图标信息选定之后,生成html报告。
jmeter
基本概念
jmeter是什么? 是apache开发基于java压力测试工具。 特点: 1.能够对http和ftp服务器进行压力和性能测试,也可以对任何数据库进行同样的测试。 2.完全的可移植性和100%的纯Java。 3.完全的多线程框架允许通过多个线程并发取样和通过单独的线程组对不同功能同时取样。 4.各种负载统计表和可链接的计时器可供选择。  Jemeter的组成结构: test plan:测试计划,用来描述一个性能测试,包含于本次性能测试所有相关的功能,相当于LR中的一个测试场景。 线程组:可以理解为一个虚拟用户组,线程中的每个线程都可以理解为虚拟用户。类似于LR中的Action() setup thread group:可用于执行预测试操作,这些线程的行为完全像一个正常的线程组元件。类似LR中的init() teardown thread group :用于执行测试后的动作。类似LR中的end() 测试片段:控制器上一种特殊的线程组。在测试树上与线程组处于一个层级。他与线程组有所不同,因为他不被执行。除非他是一个模块控制器,或者被控制器所引用才会执行。 配置元件:用于提供对静态配置的支持。(如:可以将本地数据文件形成池) 定时器:用于操作之间设置等待时间。 前置处理器:用于实际请求发出之前对即将发出的请求进行特殊处理。(比如:HTTP协议中当URL中有session信息时,可以通过前置处理器对session做一个预处理) 后置处理器:对发出请求后得到的服务器响应进行处理。 断言:检查点。 监听器:对测试结果数据进行处理和可视化展示的元件(图形结果,察看结果树.......) 取样器:当向服务器发送请求时记录响应信息的最小单元。