软件测试学习
编辑时间:2024/5/17
0.理论学习
第一单元
Q开发工程师和测试工程师的关系理解
Q软件测试的目的和原则,识记、理解
为什么要进行软件测试
软件产品最终具备哪些功能由客户需求决定,客户需求如何转化为最终的软件产品要经过一系列的开发过程。在软件开发过程中,软件设计方案与需求说明书一样,可能会存在片面、多变、理解与沟通不足的情况,导致软件出现问题。
软件测试的目的
就是以最少的人力、物力和时间找出软件中潜在的各种错误和缺陷,通过修正各种错误和缺陷提高软件质量,避免软件发布后由于潜在的软件缺陷和错误造成的隐患所带来的商业风险
软件测试
就是在规定的条件下对程序进行操作,以发现错误及对软件质量
进行评估
软件测试的原则
1.所有的软件测试都应追溯到用户需求2.尽早开展测试3.测试需要终止准则4.充分注意测试中的群集现象5.程序员应避免检查自己的程序
软件缺陷
- 软件缺陷(software defect):软件缺陷是存在于软件(文档、数据、程序)之中的那些不希望或不可接受的偏差。其结果是软件运行于某一特
定条件时出现软件故障。 - 软件错误(software error):软件错误是指在软件生命周期内的不希望或不可接受的人为错误,其结果是导致软件缺陷的产生,这种错误也称Bug。
- 软件故障(software fault):软件故障是指软件运行过程中出现的一种不希望或不可接受的内部状态。
- 软件失效(software failure):软件失效是指软件运行时产生的一种不希望或不可接受的外部行为结果。
Q软件缺陷报告包括内容,识记、理解
缺陷报告
缺陷报告的重要组成
1.缺陷的严重性和优先级2…缺陷的严重性和优先级3.缺陷的类型和来源
缺陷的管理
Q软件缺陷生命周期的主要几个状态理解
缺陷的生命周期可以简单地描述为“打开(open)→ 修正(fixed或solved)→ 关闭(close)”。
第二单元
常见应用系统的基本特征
1.功能:增加,修改,删除,查询,导入/导出,计算2.业务流程
拓展:
软件测试的基本思路
1.增加功能的测试思路2. 修改功能的测试思路. 3.删除功能的测试思路4.查询功能的测试思路5. 导入/导出功能的测试思路6. 计算功能的测试思路7. 业务流程
Q测试用例的概念识记、理解
为什么需要测试用例
设计测试用例是为了更有效、更快地发现软件缺陷;测试用例具有很高的有效性和可重复性,依据测试用例进行测试可以节约测试时间,提升测试效率;测试用例具有良好的组织性和可跟踪性,有利于测试的管理
什么是测试用例
测试用例就是为特定目标而开发的一组测试输入、执行条件和预期结果,其目标可以是测试某个程序路径或核实是否满足某个特定的需求。
第三单元
软件测试类型
1.功能测试:功能测试一般是在整个软件产品开发完成后,通过直接运行软件的方式,对前端(用户界面)的输入与输出功能进行测试,来检验软件能否正常使用各项功能、业务逻辑是否清楚、是否满足用户需求。功能测试所涉及的软件产品可能是Web程序、手机APP,也可能是微信小程序。
2.接口测试:接口测试最重要的一个意义就是可以使得测试提前切入。测试人员可以在界面没有开发完成之前就可以开始测试,以便提早发现问题。一般来说,软件后台接口开发基本完毕之后,就需要开始接口测试。接口其实就是前端与后端做沟通交互的桥梁。接口测试除了可以将测试工作前置外,还可以解决下面的一些问题。比如在用户注册功能中,需求规定用户名为6~18个字符,可以包含字母(区分大小写)、数字和下划线。
3.性能测试:性能测试是指通过模拟生产运行的业务压力或用户使用场景来测试系统的性能是否满足生产性能的要求,其目的时为软件产品的使用者提高高质量、高效率的软件产品。
Q单元测试概念的理解
单元测试:单元测试是对已实现的软件的最小单元进行测试,以保证构成软件的各个单元的质量。
Q集成测试的两种集成策略,识记、理解
-
集成测试:
1.集成测试的模式
•非渐增式测试模式:先分别测试每个模块,再把所有模式按设计要求放在一起结合成所要的程序,也常被称为大棒模式。
•渐增式模式:把下一个要测试的模块同已经测试好的模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合进来测试。
业界普遍采用渐增式测试模式,也就是持续集成的策略。使用持续集成,绝大多数模块之间的接口缺陷,在其引入的第一天可能就会被发现。软件开发中各个模块可能不是同时完成的,测试人员可以尽可能早地集成已完成的模块,有利于尽早发现缺陷,避免像大棒模式那样一下子涌现大量的缺陷。
2.自顶向下集成测试
自顶向下集成法是从主控模块开始,沿着软件的控制层次向下移动,逐渐把各个模块结合起来。在自顶向下组装过程中,可以使用深度(先子后兄弟)优先策略或宽度(先兄弟后子)优先策略。
3.自底向上集成测试
自底向上集成测试是指从底层模块(即软件模块结构图中最低层的模块)开始,逐步向上不断集成模块进行测试的方法。
4.混合策略
在实际测试过程中,一般会将自顶向下集成测试和自底向上集成测试有机地结合起来,形成混合测试策略来完成软件系统的集成测试,这种混合测试策略可以发挥自顶向下集成测试和自底向上集成测试的优点,避免其缺点,从而有效地提高测试效率。 -
系统测试
系统测试是验证软件产品是否符合这些质量特性要求的测试。系统测试包括性能测试、安全测试和兼容性测试等。 -
验收测试
验收测试是在软件产品完成了功能测试和系统测试之后、产品发布之前所进行的软件测试活动,它是技术测试的最后一个阶段,也称为交付测试。
验收测试按照项目任务书或合同、供需双方约定的验收依据文档对整个系统进行测试与评审,验收测试决定用户是否接收系统。验收测试结束后,根据验收通过准则分析验收测试结果,做出测试评价及是否通过验收。
Q测试方法中的技术角度分类
测试方法
- 黑盒测试:黑盒测试通过软件的外部表现来发现缺陷和错误。黑盒测试方法把测试对象看成一个黑盒子,完全不考虑程序内部结构和处理过程,仅针对程序是否能适当地接收输入数据、是否能产生正确的输出信息等进行测试。
- 白盒测试:通过对程序内部结构的分析与检测来寻找软件问题的方法称为白盒测试,又称结构测试。白盒测试可以把程序看成是一个装在透明的白盒子里的代码,测试人员清楚地了解程序的内部结构和处理过程,通过检查程序的内部结构及逻辑路径是否正确、检查软件内部动作是否符合软件设计说明书的规定来发现程序中的缺陷
- 灰盒测试:灰盒测试是介于白盒测试与黑盒测试之间的测试。灰盒测试关注输出对于输入的正确性,同时也关注程序内部表现,但这种关注不像白盒测试那样详细和完整,只是通过一些表面的现象、事件和标志来判断程序内部的运行状态。因此,可以这样定义灰盒测试,灰盒测试是基于程序运行时的外部表现同时又结合程序内部逻辑结构来设计用例、执行程序并采集程序路径执行信息和外部用户接口结果的测试技术。
测试手段
1.手工测试
手工测试有其不可替代的地方,因为人具有很强的判断能力,而工具没有。
手工测试不可替代的地方至少包括以下几点:
◆测试用例的设计:测试人员的经验和对错误的判断能力是工具不可替代的。
◆界面和用户体验测试:人类的审美观和心理体验是工具不可模拟的。
◆正确性检查:人们对是非的判断、逻辑推理能力是工具不具备的。
2.自动化测试
自动化测试通过编写测试代码来代替手工的重复性测试工作,对经常需要多次回归的测试用例进行代码化,可以提高测试效率、解放人力。为了使线上环境更加稳定,可以将软件的核心功能与业务脚本化,进行线上巡检,使线上生产环境更加稳定。
Q常见测试工具Postman、JMeter、Selenium、LoadRunner、Microsoft Project、MantisBT的应用场景
第四单元
Q软件测试的一般流程、整体流程
软件测试的整体流程
Q不同开发阶段的测试目的,测试活动的软件测试级别
软件测试各阶段的工作任务
- 测试计划:为了规范软件测试的内容、方法和过程,在对软件进行测试之前,必须创建测试计划。
- 测试需求分析:测试需求分析需要做两方面的事情,一是详细了解并深挖需求,二是进行测试范围分析,确定测试范围。一般可依据软件产品需求说明书或产品原型确定功能测试范围。软件产品需求说明书清楚地描述了产品的功能特性。
- 测试建模:测试建模是将测试思路或测试内容形成条理清晰、系统全面的模型的过程。一般地,可以针对系统中复杂的业务逻辑和功能进行建模,通过业务建模的方式来梳理这些复杂的业务逻辑和功能。
- 用例设计:复杂的功能与业务在完成业务建模后,可以通过覆盖基本业务路径进行测试用例的编写。采用路径覆盖法设计测试用例,可以降低测试用例设计的难度,只要搞清了各种业务流程,就可以设计出高质量的测试用例来,而不需要测试人员有太多的测试方面的经验。
Q冒烟测试、修正条件判定覆盖、回归测试、功能测试、自动化测试的理解
-
测试执行:代码提交测试之后,测试工程师就可以在测试环境中开始测试,这时往往先会执行冒烟测试。
-
1.冒烟测试:在一个编译版本发布后,先运行其最基本的功能,例如启动、登录、退出等。如果这些简单的功能运行都错误的话,测试人员没有必要进行下一步的深入测试,直接把编译版本退回给开发人员进行修改。
冒烟测试通过后,测试人员就可以针对自己所负责的模块,根据测试用例进行详细测试。如果发现缺陷,则将缺陷提交至缺陷管理系统,当缺陷被开发人员修改后,测试人员再进行回归测试,以确认旧代码在修改后没有引入新的错误或导致其他代码产生错误。
2.回归测试:测试执行过程中,回归测试往往要重复进行多次,在不断修复缺陷的过程中,测试工程师经常需要对主要流程及功能进行再次测试。为了提高测试人员的工作效率,可以将回归测试进行自动化处理,这也是自动化测试应用很重要的一个方面。 -
测试总结
-
系统上线与运维
第五单元
白盒测试:
白盒测试方法根据模块内部结构,基于程序内部逻辑结构,针对程序语句、路径、变量状态等来进行测试。 单元测试主要采用白盒测试方法,辅以黑盒测试方法。白盒测试方法应用于代码评审、单元程序之中,而黑盒 测试方法则应用于模块、组件等大单元的功能测试之中。
Q白盒测试中各种逻辑覆盖理解,分析与设计测试用例以满足某些逻辑覆盖(应用)
逻辑覆盖法:
逻辑覆盖是通过对程序逻辑结构的遍历实现对程序的覆盖,它是一系列测试过程的总称,这组测试过程逐渐实现越来越完整的通路测试。逻辑覆盖标准包括以下不同的覆盖标准:语句覆盖(Statement Coverage,SC)、判定覆盖(Decision Coverage,DC)、条件覆盖(Condition Coverage,CC)、条件判定组合覆盖(Condition/Decision Coverage,DC)、多条件覆盖(Multiple Condition Coverage,MCC)和修正条件判定覆盖(modified condition decision coverage,MCDC)。
Q基本路径测试法应用,包括程序流程图与控制流图的转换、控制流图理解、环路复杂度的三种计算方法、基本路径集导出、测试用例设计等(应用)
基本路径测试法
MaCabe方法-计算环形复杂度
根据程序控制流的复杂程度定量度量程序的复杂程度,这样度量出的结果称为程序的环形复杂度.
计算环形复杂度的方法
1.流图中线性无关的区域数等于环形复杂度
2.流图G的环形复杂度V(G)=E-N+2,其中E是流图中的边的条数,N是节点数.
3.流图G的环形复杂度V(G)=P+1,其中,P是流图中判定节点的数目
基本路径测试法示例
第六单元 黑盒用例设计及应用
Q黑盒测试各种方法(等价类划分法、边界值分析法、因果图法、决策表法、场景法)理解
Q学会利用等价类划分法分析与设计测试用例(应用)
等价类划分法
-
等价类划分法的定义:等价类划分法是把所有可能的输入数据,即程序的输入数据集合划分成若干个子集(即等价类),然后从每一个等价类中选取少量具有代表性的数据作为测试用例
-
有效等价类和无效等价类:“有效等价类”是指完全满足产品规则说明的输入数据,即有效的、有意义的输入数据所构成的集合。利用有效等价类可以检验程序是否满足规则说明所规定的功能性要求。•“无效等价类”和有效等价类相反,即不满足程序输入要求或者无效的输入数据构成的集合。
-
划分等价类的规则
边界值分析法
- 如何确定边界值
组合测试用例设计技术
- 全面测试:全面测试需要对所有输入的各个取值之间的各种组合情形均进行相应的测试。对于软件测试而言,假设被测功能有m个输入,且每个输入有多个离散但有限的取值N、N……N (其中N的值可以不等,1≤i≤m),为了覆盖1 2 m i输入参数的全部取值组合,需要N *N…N个测试用例。
- 单因素覆盖:若测试用例集中的数据包含了每个因素的所有取值,则称测试用例集符合单因素覆盖标准。
- 正交试验法:正交试验设计是从大量的试验点挑选适量的、有代表性的点,合理安排试验的一种科学的试验设计方法。
- 两两组合:使用两两组合法设计测试用例会进一步减少测试用例数量,并且该方法也能够达到全面覆盖参数取值两两组合的测试需要。
- 具有约束关系的组合测试:在实际问题中,某些参数之间的取值是有一定的约束关系的,这反映在组合测试问题上就是测试用例集中的某些组合是无效的或没有意义的。(1)软约束•软约束又称非强制性约束,测试用例集中是否出现软约束不会影响测试用例集的错误检测能力,如果在生成测试用例时考虑这种约束,就会在保证错误检测能力的前提下进一步减少测试用例集的大小,从而降低测试成本。(2)硬约束•硬约束又称强制性约束,一般情况下是不允许测试用例集出现硬约束的,否则将会影响到测试用例集的错误检测能力。
因果图法
- 因果图的基本符号
- 输入或输出的约束关系
- 因果图法实例分析
决策表法
- 决策表的构成
- 决策表法实例分析
场景法
- 场景法实例分析
测试方法选择的综合策略
第七单元 接口测试基础
HTTP工作原理
接口测试需要模拟浏览器发送Request至服务器和服务器返回Response到浏览器的整个过程
URL
统一资源定位符(Uniform Resource Locator,URL)是因特网的万维网服务程序上用于指定信息位置的表示方法。统一资源定位符URL用来标识万维网上的各种资源,使每一个资源在整个因特网的范围内具有唯一的标识符。URL的一般形式是:HTTP://<主机>:<端口>/路径,各部分含义如下:
◆ HTTP:表示使用HTTP协议;
◆主机:存放资源的主机域名或主机IP地址;
◆端口:HTTP的默认端口号是80,通常可省略;
◆路径:访问资源的路径。
QHTTP请求报文和响应报文的组成部分,响应报文的各种状态码含义,识记。
报文
- 请求报文:客户端向服务器发送请求时,会给服务器发送一个请求报文。请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。URL只是标识资源的位置,而HTTP报文用来提交和获取资源。客户端发送的HTTP请求消息,包括请求行、请求头部、空行和请求体4个部分。
- 响应报文:HTTP响应报文由4个部分组成,分别是:状态行、响应头部、空行、响应体
第八单元 接口测试
为什么要做接口测试
接口测试不但可以将测试工作前置,它还可以解决其他方面的问题,相对UI测试来说,接口测试比较稳定,容易实现自动化持续集成,可以减少人工回归测试的人力成本与时间,缩短测试周期,支持后端快速发版需求。
接口测试的定义
接口测试主要用于检测外部系统与系统之间以及系统内部各个子系统之间的交互点。测试的重点是检查数据的交换、传递和控制管理过程,以及系统间的相互逻辑依赖关系等。简单地说,接口测试就是通过测试不同情况下的输入参数与相对应的返回结果,来判断软件系统前后端之间的接口是否符合或满足相应的功能性、安全性要求。
接口测试实例分析
在做接口测试前,测试人员需要先拿到开发人员提供的接口文档。测试人员可以根据这个文档编写接口测试用例。要做好接口测试,首先要学会解析接口文档。一般接口文档会包含接口的地址、使用的方法(GET/POST/PUT)等、必填参数、非必填参数、参数长度、返回结果等,只有了解这些信息才能设计测试用
例。
- 接口文档解析 从接口文档可以得到如下信息:(1)接口的URL地址;(2)接口的方法是post;(3)接口有2个必填的参数,一个是手机号,一个是活动;(4)对于手机号参数,其数据类型是数字,且限定为11个数字;(5)对于活动ID参数,其数据类型也是数字,且是小于1000的数字;(6)接口返回3个参数,用户手机号码、剩余抽奖次数、抽奖结果;(7)返回的用户手机号码就是参与抽奖的用户手机号码;(8)每天只有3次抽奖机会,抽一次少一次,当没有抽奖次数时,返回Number=0,并且抽奖结果不能为True;(9)抽奖结果只能是True或者是False。解析完接口文档后,测试人员基本上可以明确测试点和预期结果,为之后的测试用例设计做好准备。
- 测试用例设计:接口功能比较单一,不需要很复杂的测试用例,只要准备好正常数据和异常数据及对应的各种返回结果即可。
Q接口自动化测试特点以及主要工具
接口测试工具
- 安装Postman工具
- 使用Postman的基础功能:在Postman界面中选择创建Request基础请求。除基础请求外还可以创建Collection(请求集合文件夹)、Environment(环境变量)、API Documents(API文档)、Mock Server(模拟服务器)以及Monitor(监视器)。Tests选项卡是处理断言的地方,Postman很人性化的提供了断言所需用的函数
跳转到postman的教程
第九单元 认识Unittest
认识Unittest
Unittest模块是Python标准库中的模块,该模块提供了许多类和方法以方便处理各种测试工作。
⚫测试用例基类(TestCase)
⚫测试套件(TestSuite)
⚫测试运行器(TestRunner)
⚫测试报告(TestReport)
python安装
集成开发环境—PyCharm
使用ddt创建数据驱动测试
断言
- 基本断言方法列表
测试套件:如果只有一个测试文件要运行,则直接执行该文件即可。但如果有多个测试文件要运行,那么就需要组织测试、批量执行。
生成HTML格式的测试报告
测试完成后需要生成测试报告,虽然unittest没有相应的内置模块可以生成格式友好的报告,但测试人员可以应用unittest的扩展HTMLTestRunner来实现。访问https://pypi.python.org/pypi/HTMLTestRunner,下载HTMLTestRunner扩展,下载
的文件放在项目根目录下。
第十单元 Newman的使用
Newman的使用:
• Newman是一款基于Node.js开发的工具,作为Postman的命令行运行器,Newman可直接从命令行运行和测试Postman集合。它以可扩展性为基础构建,便于将其与持续集成服务器进行集成并构建系统。
• Postman与Newman的结合可以实现批量运行API、实现API自动化测试的目的。Newman是为Postman而生,专门用来运行Postman编写好的脚本。
与持续集成工具Jenkins结合
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
一般做接口自动化测试时,需要最后通过Jenkins做构建。Jenkins可以用于搭建自动化测试环境,实现接口自动化测试在无人值守的情况下按照预定的时间调度运行,或每次代码变更提交至版本控制系统时实现自动运行的效果。
第11单元 WEB UI自动化测试
Selenium介绍
Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作网站一样。Selenium支持的浏览器包括IE(7, 8, 9, 10, 11)、Mozilla Firefox、Safari、Google Chrome、Opera等。这个工具的主要功能包括:
•测试与浏览器的兼容性•测试系统功能在普遍的经验中,一般会对具有下列特征的项目开展UI自动化测试:
◆软件需求变动不频繁
◆项目周期较长
**Selenium WebDriver **
Selenium WebDriver的常用方法WebDirver通过一些方法来实现与浏览器窗口、网页和页面元素的交互。
WebDriver的功能
WebElement接口
自动化测试模型介绍
自动化测试模型介绍:一个自动化测试框架就是一个集成体系,在这一体系中包含测试功能的函数库、测试数据源、测试对象识别标准,以及种可重用的模块。自动化测试框架在发展过程中经历了三个阶段:模块驱动测试、数据驱动测试、对象驱动测试。自动化测试模型是自动化测试架构的基础,在自动化测试发展的不同阶段,不断有新的模型(概念)被提出。了解和使用这些自动化测试模型将帮助测试人员构建一个灵活的、可维护的自动化架构。
Selenium轻量级UI自动化 测试框架
框架梳理
第12单元 性能测试
Q性能测试的概念识记以及常见的性能测试指标
认识性能测试
- 性能测试定义:性能测试工程师的主要目标就是确保系统能够在一定的硬件、软件环境下达到一定的性能指标。
- 性能测试的定义为:在一定的负载情况下,系统的响应时间等特性是否满足特定的性能需求。
- 什么是负载?对于基于网络架构(如C/S架构或者B/S架构)的系统,当众多终端用户对系统进行访问时,用户越多,那么服务器需要处理的客户请求也越多,从而形成负载。
- 性能测试分层模型
- 性能指标
- 性能测试的流程
LoadRunner脚本开发实战
场景设计精要
性能测试分析思路
- 观察现象
- 层层递进:Client层,Web Server层,DB Server层,OS层,代码层
- 缩小范围
第13单元 移动APP非功能测试
移动APP启动时间测试
移动APP流量测试
移动APPCPU测试
移动APP电量测试
第14单元 渗透性测试
Web应用安全基础
QSQL注入原理,注入SQL语句理解
SQL注入漏洞
- SQL注入原理:
- SQL注入的后果
- SQL注入漏洞攻击流程
- 注入点类型
- SQL注入的防范措施:SQL注入攻击的风险最终落脚于用户可以控制输入,SQL注入、XSS、文件包含、命令执行等风险都可归于此。
XSS跨站脚本漏洞
- XSS原理解析:JavaScript可以用来获取用户的Cookie 、改变网页内容、URL调转等,存在XSS漏洞的网站,就可能会被盗取用户Cookie,、黑掉页面、导航到恶意网站等,而攻击者需要做的仅仅是利用网页开发时留下的漏洞,通过巧妙的方法向Web页面中注入恶意JavaScript代码。
QXSS攻击的主要类型
- XSS类型-反射型XSS:XSS主要被分为三类,分别是:反射型、存储型和DOM型。反射型XSS也被称为非持久性XSS。当用户访问一个带有XSS代码的URL请求时,服务器端接收数据后处理,然后把带有XSS代码的数据发送到浏览器,浏览器解析这段带有XSS代码的数据后,最终造成XSS漏洞。这个过程就像一 次反射,故称为反射型XSS。下面举例说明反射型XSS跨站漏洞。
- XSS类型-存储型XSS:存储型XSS又被称为持久性XSS,存储型XSS是最危险的一种跨站脚本。允许用户存储数据的Web应用程序都可能会出现存储型XSS漏洞,当攻击者提交一段XSS代码后,被服务器端接收并存储。当攻击者再次访问某个页面时,这段XSS代码被程序读出来响应给浏览器,造成XSS跨站攻击,这种攻击就是存储型XSS。存储型XSS与反射型XSS、DOM型XSS相比,具有更高的隐蔽性,危害性也更大。它们之间最大的区别在于反射型XSS与DOM型XSS的执行都必须依靠用户手动去触发,而存储型XSS却不需要。
- XSS类型-存储型XSS
- XSS类型-DOM XSS:DOM-based XSS漏洞是基于文档对象模型的一种漏洞,它是通过修改页面的DOM节点而形成的。DOM XSS也是一种反射型。
- 查找XSS漏洞过程
- XSS防御
CSRF
CSRF(Cross-Site Request Forgery)跨站请求伪造,也被称成为“one click attack”或者“session riding”,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。这听起来很像跨站脚本(XSS),但是它与XSS非常不同。XSS利用站点内的信任用户,而CSRF则通过伪装成受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。可以这么理解CSRF攻击:某甲是某网站的合法用户,某攻击者盗用了某甲的身份,以某甲的名义向服务器提交某些非法操作,而对服务器而言,这些请求操作都是合法的。CSRF的攻击者能够使用网站合法用户的账户发送邮件、获取被攻击者的敏感信息、甚至盗走被攻击者的财产。
- CSRF攻击原理
- CSRF攻击场景
- 查找CSRF漏洞
- 预防CSRF
文件上传漏洞
- 文件上传漏洞的测试流程
- 文件上传防御
1.postman
0.下载安装
1.get
2.post&&post加token值
3.mock server
server实际上是我们要定义这个server所支持的接口请求类型。
创建server:
复制server地址:
示例url:https://4bfe594d-3545-4f18-8285-e149f0156418.mock.pstmn.io/test_hello4
注意格式:url/名字
示例成功返回
2.Unitest
3.JMeter
来源:黑马程序员
免费接口https://www.showapi.com/
01认识性能测试
什么是性能,性能测试
性能:就是如阿健质量属性中的“效率”特性。
性能测试:使用自动化工具,模拟不同场景,对软件各项性能指标(时间,资源)进行测试和评估的过程。
性能测试的作用是什么
- 系统上线时,评估当前系统能力
- 系统上线后,寻找性能瓶颈,优化性能
- 评估是否满足未来的需要
02项目介绍
项目背景
项目类型:轻商城项目是一个电商项目
选择理由:长时间使用,超大用户使用,超大用户同时使用
项目的功能介绍
前台商城:
项目的技术框架
前台商城:登录、搜素、加入购物车、下订单、支付、抢购等。
后台管理系统:商品管理、会员管理、商场管理、推广管理等。
项目技术架构
前端:vue技术框架,支持小程序,手机移动端,web界面
后端:SpringBoot框架开发,MySql数据库
03性能测试的流程
性能测试的流程
- 性能测试需求分析:熟悉需求,获取需求指标
- 性能测试计划及方案:测试码,谁来测,怎么测
- 性能测试用例设计:设计用力来验证系统是否符合需求
- 性能测试执行:建立测试环境、编写测试脚本、性能测试监控、执行测试脚本
- 性能分析和调优:分析性能结果、足底性能bug调优
- 性能测试报告总结:测试结果总结
0405性能测试需求分析
指标:预期目标,用于衡量事物的达成情况
性能测试的指标:一组数据,用来衡量某种操作的性能的好坏,包括:响应时间、并发数、吞吐量、错误里、资源使用率。
响应时间:定义指用户从客户端发起一个请求,到客户端收到从服务器端返回的结果,整个过程所耗费的时间。通来说是用户在系统界面操作后,多久收到响应,是用户感受到的性能指标。包括:服务器处理时间+网络传输时间
并发数:定义:单位时间内发送给服务器的请求数,由于客户端发送的请求一般为用户操作行为,并发数也可理解为并发用户数。
吞吐量:定义:指的是单位时间内处理的客户端的请求数量。直接提现软件系统性能的承载能力。
TPS:每秒事务(业务)数,即控制服务器每秒处理的事务请求的数量。
RPS:每秒请求数,即控制服务器每秒处理的指定请求数据。
错误率:指系统在负载情况下,失败业务的概率。错误率=(失败业务数/业务总户数)100%
资源使用率:指系统各种资源的使用情况,一般用:资源已使用量/总的资源可用量100%形成资源利用率的数据
0607获取性能需求指标
方法:
- 需求直接给出
- 根据历史运营数据分析(一般采用TPS=总请求数80%/(总时间20%),如果是峰值则计算压力测试 的并发数:TPS:=峰值请求数*系数/峰值时间)
- 竞品分析
08 性能测试计划介绍
09案例:登录接口测试用例
怎么做负载测试?
- 逐步增加系统负载
- 满足系统的性能指标要求
- 测试系统能够承受的最大负载量是否满足产品设计要求
10.主流测试工具介绍
Loadrunner
JMeter
11.JMeter安装及初始环境
11.JMeter元件和组件
元件:多个类似功能组件的容器(类似于类)
组件:实现独立的某个功能(类似于方法)
13.JMeter发送HTTP请求
- HTTP的请求组成:请求行、请求头、请求体
- 使用JMeter的什么组件/元件可以生成HTTP请求?
请求行、请求体:HTTP请求取样器
请求头:HTTP信息头管理器
HTTP请求取样器
HTTP信息头管理器
练习JMeter脚本,访问百度
案例1
查看结果树
案例2
查看结果树
案例3
查看结果树
案例4
返回响应的效果如图:
这个时候我们要添加信息头管理器
修改后的结果如图
总结
如何配置来发送HTTP请求?
发送GET请求(请求参数在路径中):
- (取样器)请求URL:协议,服务器域名或IP,端口,方法(GET),路径,编码格式
- (取样器)请求参数:1.在路径后添加参数。格式:?键名=键值&键名=键值2.在参数列表中添加参数。格式:名称(键名)、值(键值)
- (消息体管理器)请求头:请求头名称,值
发生POST请求(请求参数在消息体数据中): - (取样器)请求参数:1.在消息体数据中添加请求体(form/json)2.在参数列表添加参数(form)
- (消息体管理器)请求头:请求头名称、值
14.响应中乱码问题的解决
15.json断言
查看结果树
小结
(1)什么时候可以使用JSON断言?
对HTTP请求的响应结果为JSON格式时,可以使用JSON断言
(2)使用JSON断言的操作步骤
- 添加线程组
- 添加HTTP请求
- 添加json断言
3.1编写Assert JSON Path exists (实际结果-json路径)
3.2勾选Additionaly assert value
3.3填写Expected Value(期望结果) - 添加查看结果树
16响应断言
JSON格式的响应数据检查?
–JSON断言
如果并不是JSON格式的响应数据检查?
–响应断言
响应断言
小结
(1)什么时候使用响应断言?
任意HTTP请求的响应结果,都可以使用响应断言
(2)使用响应断言的操作步骤
- 添加线程组
- 添加HTTP请求
- 添加响应断言
3.1测试子墩:要检查的项目(实际结果)
3.2模式匹配规则:比较方式
3.3测试模式:预期结果 - 添加查看结果树
17案例:JMeter实现登录脚本
18性能测试指标监控
查看结果树只能记录单次的的响应结果数据。性能指标测试一般时间比较长,我们采用聚合报告获取测试过程中的系统性能指标数据(响应时间,吞吐量,错误率)。
聚合报告
作用:手机性能测试结束后,系统各项性能指标,如:响应时间、吞吐量、错误率等
位置:测试计划->右键->监听器->聚合报告
效果图
总结
(1)如何监控监控响应时间、吞吐量、错误率
聚合报告:收集性能测试结束后,系统各项性能指标
- 响应时间:平均响应时间
- 吞吐量:吞吐量
- 错误率:异常
第三方插件安装监控系统cpu、内存、磁盘、网络
perfMon组件资源指标