问题:一样的测试用例在一样的环境上,时而测试经过,时而测试失败;php
形成GUI测试不稳定的常见五种因素:css
非预计的弹出对话框html
新增异常场景恢复流程,一旦发现控件没法定位时,就走到该逻辑下,遍历知足的状况,执行相应的操做,缺点就是,不一样对话框须要更新到该进程了,存在维护成本;前端
页面控件属性的细微变化android
好比控件ID属性发生变化,也建议新增定位控件逻辑处理:ios
上面的方法只是一种思路,能够根据不一样业务特性归总必定适用的方法来在出错时定位控件,提升识别率;git
还能够使用xpath,但也同样存在属性被改的状况,只是相对控件元素,几率会少一点;github
被测系统的A/B测试web
在测试脚本内部对不一样的被测版本作分支处理,脚本须要可以区分 A
和 B
两个的不一样版本,并作出相应的处理;objective-c
随机的页面延迟形成控件识别失败
增长重试机制,当操做失败时,自动发起重试;
主要是说,好的测试报告,须要有截图
及高亮显示操做元素
功能;
若是使用selenium,须要扩展selenium原来的操做函数和hook函数实现;
web APP
和native APP
二者之间的一种形态,在原生内嵌webview
,经过webview
来访问网页,优势是具有跨平台,维护更新,是主流的开发模式;从业务功能测试的角度看,移动应用的测试用例设计和传统 PC
端的 GUI
自动化测试策略比较相似,只是测试框架不一样,数据驱动、页面对象模型和业务流程封装依旧适用;
交叉事件测试
也称场景测试,模拟各类交叉场景,手工测试为主;
兼容性测试
由于须要大量真实社保,因此使用第三方的云测平台较多;
流量测试
借助于Android
和 iOS
自带的工具进行流量统计,也能够利用 tcpdump
、Wireshark
和 Fiddler
等网络分析工具;
对于 Android 系统,网络流量信息一般存储在 /proc/net/dev 目录下,也能够直接利用 ADB 工具获取实时的流量信息。另外,推荐一款 Android 的轻量级性能监控小工具 Emmagee,相似于 Windows 系统性能监视器,可以实时显示 App 运行过程当中 CPU、内存和流量等信息;
对于 iOS 系统,能够使用 Xcode 自带的性能分析工具集中的 Network Activity,分析具体的流量使用状况;
复制代码
常见流量优化的方法:
耗电量测试
耗电量通常从三个方面思考:
检验方法,偏硬件的是耗电仪,软件则以下:
adb shell dumpsys battery
来获取应用的耗电量信息;Sysdiagnose
来收集耗电量信息,而后,能够进一步经过 Instrument
工具链中的 Energy Diagnostics
进行耗电量分析;弱网络测试
平常生活中,弱网的场景比较多,如地铁、隧道、车库,伴随着就是丢包、延迟、断线的异常场景;
文中做者推荐Augmented Traffic Control
,是Facebook的开源移动网络测试工具,详情请点击这里查阅;
而jb平常用的比较多的是fiddler来模拟弱网,感兴趣的点击这里查阅;
边界测试
意思就是找出程序的临界值场景,验证这些临界场景是否正常,常见的就是最大值最小值;
本文主要是介绍了Appium
及安装使用,网上也有不少,请自行查阅;
Appium 的内部原理能够总结为:
Appium 属于 C/S 架构,Appium Client 经过多语言支持的第三方库向 Appium Server 发起请求,基于 Node.js 的 Appium Server 会接受 Appium Client 发来的请求,接着和 iOS 或者 Android 平台上的代理工具打交道,代理工具在运行过程当中不断接收请求,并根据 WebDriver 协议解析出要执行的操做,最后调用 iOS 或者 Android 平台上的原生测试框架完成测试。
复制代码
经常使用的api测试工具备cURL
、postman
,还有jmeter跟soapui也算;
cURL
是一款命令行工具,须要安装,而后执行下面的命令发起api调用;
curl -i -H "Accept: application/json" -X GET "https://www.baidu.com"
复制代码
返回的内容如图:
常见的参数解析:
参数 | 含义 |
---|---|
-i | 显示response的header信息; |
-H | 设置request中的header; |
-X | 执行执行方法,如get、post、Put,不指定-X,则默认使用get; |
-d | 设置http参数,参数之间用&串接; |
-b | 须要cookie时,指定cookie文件路径; |
Session 的场景
curl -i -H "sessionid:XXXXXXXXXX" -X GET "http://XXX/api/demoAPI"
复制代码
Cookie 的场景 使用 cookie,在认证成功后,后端会返回 cookie给前端,前端能够把该 cookie 保存成为文件,当须要再次使用该 cookie 时,再用-b cookie_File
的方式在 request 中植入 cookie 便可正常使用;
// 将 cookie 保存为文件
curl -i -X POST -d username=robin -d password=password123 -c ~/cookie.txt "http://XXX/auth"
// 载入 cookie 到 request 中
curl -i -H "Accept:application/json" -X GET -b ~/cookie.txt "http://XXX/api/demoAPI"
复制代码
相对于cURL,postman用的比较频繁,官网地址点这里;
结果验证 点击Test
右侧的SNIPPETS
,挑选一些须要验证的场景,代码就会自动生成,固然也能够本身写;
基于postman的测试代码自动生成 点击右侧的code
,选择须要的语言,保存便可;
又或者,使用newman工具,直接执行postman
的collection
;
newman run examples/sample-collection.json;
复制代码
多个api调用协助
经过代码将上个 API 调用返回的response
中的某个值传递给下一个 API;
api依赖第三方
mock server;
异步api
异步 API 是指,调用后会当即返回,可是实际任务并无真正完成,而是须要稍后去查询或者回调的API;
早期的基于 Postman 的 API 测试在面临频繁执行大量测试用例,以及与 CI/CD
流水线整合的问题时,显得爱莫能助。
为此,基于命令行的 API 测试实践,也就是 Postman+Newman`,具备很好的灵活性,解决了这两个问题。
可是,Postman+Newman
的测试方案,只能适用于单个 API 调用的简单测试场景,对于连续调用多个 API 并涉及到参数传递问题时,这个方案就变得不那么理想和完美了。随后,API 测试就过渡到了基于代码的 API 测试阶段;
respons结果发生变化时自动识别
具体实现的思路是,在 API
测试框架里引入一个内建数据库,推荐采用非关系型数据库
(好比 MongoDB),而后用这个数据库记录每次调用的 request 和 response 的组合,当下次发送相同 request 时,API 测试框架就会自动和上次的 response 作差别检测,对于有变化的字段给出告警;
单体架构是将全部的业务场景的表示层、业务逻辑层和数据访问层放在同一个工程中,最终通过编译、打包,并部署在服务器上。
缺点:
在微服务架构下,一个大型复杂软件系统再也不由一个单体组成,而是由一系列相互独立的微服务组成;
庞大的测试用例数量
消费者契约的 API 测试的核心思想是: 只测试那些真正被实际使用到的 API 调用,若是没有被使用到的,就不去测试;
微服务之间的耦合关系
契约的本质就是 Request 和 Response 的组合,基于契约的 Mock Service 完美地解决了 API 之间相互依赖耦合的问题;
常见代码错误类型:
代码级测试经常使用方法:
这四类测试方法的特色,以及能够覆盖的错误类型,能够归纳以下:
评论里面有说起到,Facebook 开源的静态分析工具 Infer,感兴趣的能够看看;
常见的工具包括收费的企业级应用,好比Coverity。
其它免费的应用,好比Findbugs(Spotbugs), Java Checker Framework, PREfast, Splint, SPIN, Microsoft SLAM, PMD, Facebook Infer
;
自动的特色在于:
能发现不少小问题:
也就是单元测试,测试基本用不着,不展开;
基于代码自动生成边界测试用例并执行来捕捉潜在的异常、崩溃和超时的测试方法;
如何实现边界测试用例的自动生成?
根据被测函数的输入参数生成可能的边界值;
复制代码
用户在界面上完成一个操做开始,到系统把本次操做的结果以用户能察觉的方式展示出来的所有时间;
复制代码
软件性能除了包括单个用户的响应时间外,更要关注大量用户并发访问时的负载
,以及在负载下的系统健康状态、并发处理能力、当前部署的系统容量、可能的系统瓶颈、系统配置层面的调优、数据库的调优,以及长时间运行稳定性和可扩展性;
在软件设计开发人员眼中,软件性能一般会包含算法设计
、架构设计
、性能最佳实践
、数据库相关
、软件性能的可测试性
这五大方面;
三个最经常使用的指标:并发用户数
、响应时间
,以及系统吞吐量
;
并发用户数
并发用户数,包含了业务层面和后端服务器层面的两层含义;
获取用户行为模式的方法,主要分为两种:
系统日志分析法获取用户行为统计
和峰值并发量
等重要信息;响应时间
响应时间反映了完成某个操做所须要的时间,其标准定义是“应用系统从请求发出开始,到客户端接收到最后一个字节数据所消耗的时间”,是用户视角软件性能的主要体现;
复制代码
响应时间,能够分为前端展示时间和系统响应时间:
系统吞吐量
是直接体现软件系统负载承受能力的指标;
全部对吞吐量的讨论都必须以“单位时间”做为基本前提;
复制代码
以不一样方式表达的吞吐量能够说明不一样层次的问题:
Bytes/Second
和Pages/Second
表示的吞吐量,主要受网络设置、服务器架构、应用服务器制约,考察http或者业务层面;Requests/Second
表示的吞吐量,主要受应用服务器和应用自己实现的制约,考察系统层面或网络层面;一个优秀的性能测试工程师,通常须要具备如下技能:
最经常使用的指标:并发用户数,响应时间,系统吞吐量:
当系统并发用户数较少时,系统的吞吐量也低,系统处于空闲状态,这个阶段称为 “空闲区间”;
当系统总体负载并非很大时,随着系统并发用户数的增加,系统的吞吐量也会随之呈线性增加,称为 “线性增加区间”;
随着系统并发用户数的进一步增加,系统的处理能力逐渐趋于饱和,所以每一个用户的响应时间会逐渐变长。相应地,系统的总体吞吐量并不会随着并发用户数的增加而继续呈线性增加,称为系统的“拐点”;
随着系统并发用户数的增加,系统处理能力达到过饱和状态。此时,若是继续增长并发用户数,最终全部用户的响应时间会变得无限长;相应地,系统的总体吞吐量会降为零,系统处于被压垮的状态,称为“过饱和区间”;
复制代码
后端性能测试的测试负载,通常只会把它设计在线性增加区间
内;而压力测试的测试负载,则会将它设计在系统拐点
上下,甚至是过饱和区间
;
后端性能测试
也叫服务端性能测试,是经过性能测试工具模拟大量的并发用户请求,而后获取系统性能的各项指标,而且验证各项指标是否符合预期的性能需求的测试手段;
这里的性能指标,除了包括并发用户数、响应时间和系统吞吐量外,还应该包括各种资源的使用率,好比系统级别的 CPU 占用率、内存使用率、磁盘 I/O 和网络 I/O 等,再好比应用级别以及 JVM 级别的各种资源使用率指标等;
后端性能测试的场景设计主要包括如下两种方式:
前端性能测试
一般来说,前端性能关注的是浏览器端的页面渲染时间
、资源加载顺序
、请求数量
、前端缓存使用状况
、资源压缩
等内容,但愿借此找到页面加载过程当中比较耗时的操做和资源,而后进行有针对性的优化,最终达到优化终端用户在浏览器端使用体验的目的;
而业界广泛采用的前端测试方法,是根据雅虎前端团队总结的优化规则,能够点击这里查看;
如下列出做者以为重要的规则:
代码级性能测试
代码级性能测试,是指在单元测试阶段就对代码的时间性能和空间性能进行必要的测试和评估,以防止底层代码的效率问题在项目后期才被发现的尴尬;
最常使用的改造方法是:
压力测试
压力测试,一般指的是后端压力测试,通常采用后端性能测试的方法,不断对系统施加压力,并验证系统化处于或长期处于临界饱和阶段的稳定性以及性能指标,并试图找到系统处于临界状态时的主要瓶颈点,压力测试每每被用于系统容量规划的测试;
配置测试
用于观察系统在不一样配置下的性能表现,一般使用后端性能测试的方法:
这里的配置是广义,包含且不止:
并发测试
指的是在同一时间,同时调用后端服务,期间观察被调用服务在并发状况下的行为表现,旨在发现诸如资源竞争、资源死锁之类的问题;
可靠性测试
验证系统在常规负载模式下长期运行的稳定性,本质就是经过长时间模拟真实的系统负载来发现系统潜在的内存泄漏、连接池回收等问题;
这里“应用领域”主要包括能力验证、能力规划、性能调优、缺陷发现四大方面;
能力验证
主要是验证某系统可否在 A 条件下具备 B 能力
,一般要求在明确的软硬件环境下,根据明确的系统性能需求设计测试方案和用例;
能力规划
能力规划关注的是,如何才能使系统达到要求的性能和容量,一般状况下会采用探索性测试的方式来了解系统的能力;
能力规划解决的问题,主要包括如下几个方面:
性能调优
性能调优主要解决性能测试过程当中发现的性能瓶颈的问题,一般会涉及多个层面的调整,包括硬件设备选型、操做系统配置、应用系统配置、数据库配置和应用代码实现的优化等等;
缺陷发现
经过性能测试的各类方法来发现诸如内存泄露、资源竞争、不合理的线程锁和死锁等问题;
最经常使用的测试方法主要有并发测试、压力测试、后端性能测试和代码级性能测试;
完整的后端性能测试应该包括性能需求获取、性能场景设计、性能测试脚本开发、性能场景实现、性能测试执行、性能结果报告分析、性能优化和再验证;
使用性能测试工具得到性能测试报告只是性能测试过程当中的一个必要步骤而已,而得出报告的目的是让性能测试工程师去作进一步的分析,以得出最终结论,并给出性能优化的措施;
业内有不少成熟的后端性能测试工具,好比LoadRunner
、JMeter
、NeoLoad
等,还有不少云端部署的后端性能测试工具或平台,好比 CloudTest
、Loadstorm
、阿里的 PTS
等;
目前最主流的是jmeter,由于开源免费、灵活、功能也强大,适合互联网企业;
而LR是按照并发用户数收费的,并且LR对定制功能支持不是特别好,传统企业用的会比较多;
是前端性能测试的利器:
Filmstrip
视图、Waterfall
视图、Connection
视图、Request` 详情视图和页面加载视频慢动做;First Byte Time
指的是用户发起页面请求到接收到服务器返回的第一个字节所花费的时间。这个指标反映了后端服务器处理请求、构建页面,而且经过网络返回所花费的时间;
本次测试的结果,首次打开页面(First View)花费的时间是 999 ms,重复打开页面(Repeat View)花费的时间是 860 ms。这两个指标都在 1 s 如下,因此 WebPagetest 给出了 A 级的评分;
Keep-alive Enabled
要求每次请求使用已经创建好的连接,它属于服务器上的配置,不须要对页面自己进行任何更改,启用了 Keep-alive 一般能够将加载页面的时间减小 40%~50%,页面的请求数越多,可以节省的时间就越多;
Compress Transfer
若是将页面上的各类文本类的资源,好比 Html、JavaScript、CSS 等,进行压缩传输,将会减小网络传输的数据量,同时因为 JavaScript 和 CSS 都是页面上最早被加载的部分,因此减少这部分的数据量会加快页面的加载速度,同时也能缩短 First Byte Time。
Compress Images
为了减小须要网络传输的数据量,图像文件也须要进行压缩处理。显然本次测试结果显示(图 5),全部的 JPEG 格式图片都没有通过必要的压缩处理,而且全部的 JPEG 格式图片都没有使用渐进式 JPEG(Progressive JPEG)技术,因此 WebPagetest 给出了 D 级的评分;
Cache Static Content
页面上的静态资源不会常常变化,因此若是你的浏览器能够缓存这些资源,那么当重复访问这些页面时,就能够从缓存中直接使用已有的副本,而不须要每次向 Web 服务器请求资源。这种作法,能够显著提升重复访问页面的性能,并减小 Web 服务器的负载。
第一个问题是,若是被测网站部署在公司内部的网络中,那么处于外网的 WebPagetest 就没法访问这个网站,也就没法完成测试。
要解决这个问题,你须要在公司内网中搭建本身的私有 WebPagetest 以及相关的测试发起机。具体如何搭建,点击这里;
第二个问题是,用 WebPagetest 执行前端测试时,全部的操做都是基于界面操做的,不利于与 CI/CD 的流水线集成。
要解决这个问题,就必须引入 WebPagetest API Wrapper;
WebPagetest API Wrapper 是一款基于 Node.js,调用了 WebPagetest 提供的 API 的命令行工具。也就是说,你能够利用这个命令行工具发起基于 WebPagetest 的前端性能测试,这样就能够很方便地与 CI/CD 流水线集成了。具体的使用步骤以下:
npm install webpagetest -g
安装该命令行工具;https://www.webpagetest.org/getkey.php
获取你的 WebPagetest API Key
;webpagetest test -k API-KEY 被测页面 URL
发起测试,该调用是异步操做,会当即返回,并为你提供一个 testId
;webpagetest status testId
查询测试是否完成;webpagetest results testId
查看测试报告,可是会发现测试报告是个很大的 JSON 文件,可读性较差;npm install webpagetest-mapper -g
安装webpagetest-mapper
工具,这是为了解决测试报告可读性差的问题,将 WebPagetest
生成的 JSON 文件格式的测试报告转换成为 HTML 文件格式;Wptmap -key API-KEY --resultIds testId --output ./test.html
将 JSON 文件格式的测试结果转换成 HTML 格式;Virtual User Generator
用于生成模拟用户行为的测试脚本,生成的手段主要是基于协议的录制,也就是由性能测试脚本开发人员在经过 GUI 执行业务操做的同时,录制客户端和服务器之间的通讯协议,并最终转化为代码化的 LoadRunner 的虚拟用户脚本;
LoadRunner Controller
Controller 至关于性能测试执行的控制管理中心,负责控制 Load Generator 产生测试负载,以执行预先设定好的性能测试场景;
同时,还负责收集各种监控数据;
LoadRunner Analysis
Analysis
是 LoadRunner
中一个强大的分析插件;
不只能图形化展现测试过程当中收集的数据,还能很方便地对多个指标作关联分析,找出它们之间的因果关系;
最根本的目的就是,分析出系统可能的性能瓶颈点以及潜在的性能问题;
从宏观角度来说,基于 LoadRunner 完成企业级性能测试,能够划分为五个阶段:
性能基准测试
是每次对外发布产品版本前都须要作的类型;
是须要用上一个版本数据作基准,在同一操做环境下进行对比,目的是为了保证新版本总体性能不会降低;
稳定性测试
又称可靠性测试,主要是经过长时间(7*24 小时)模拟被测系统的测试负载,来观察系统在长期运行过程当中是否有潜在的问题;
移动端里面典型的就是monkey,通常来讲,稳定性是发布前的硬性要求;
并发测试
并发测试,是在高并发状况下验证单一业务功能的正确性以及性能的测试手段;
容量规划测试
是软件产品为知足用户目标负载而调整自身生产能力的过程;
容量规划的主要目的是,解决当系统负载将要达到极限处理能力时,应该如何经过垂直扩展(增长单机的硬件资源)和水平扩展(增长集群中的机器数量)增长系统总体的负载处理能力的问题;
复制代码
这4章都是讲测试数据相关,以前也单独提炼出一篇文章,这里不重复,直接点击这里查看;
本篇都在讲selenium grid
相关,以前jb看了虫师的selenium2的书籍,也作了一些笔记,里面也有说起到selenium grid
,所以这里不打算重复描述,内容类似,点击[这里]juejin.im/post/5bcd84…)查看;
广义的测试执行环境,也称测试基础架构;
测试基础架构能够解决的问题:
所以在设计测试基础架构,须要考虑几个方面:
可扩展性
;将测试用例存储在代码仓库中,而后是用 Jenkins Job
来pull
代码并完成测试的发起工做;
在这种架构下,自动化测试用例的开发和执行流程,是按照如下步骤执行的:
Pull
测试用例代码,并发起构建操做;而后,在远端或者本地固定的测试执行机上发起测试用例的执行;弊端是对测试执行机器信息不可知,好比ip等是否发生变化、环境是否一致;
利用selenium Grid
代替早期的远程或本地固定的测试执行机器;
每次发起测试时,就再也不须要指定具体的测试执行机器了,只要提供固定的 Selenium Hub
地址就行,而后 Selenium Hub
就会自动帮你选择合适的测试执行机;
在测试规模比较少的状况下,能够采用第一种方式,但一旦规模庞大起来,就须要调整了;
Selenium Grid
虽然能解决问题,可是随着测试用例的增长,须要维护多个Node
,所以引入docker代替原来的方案,能够下降维护成本:
随着项目数量增长,jenkins配置时间也会增长,所以做者提出实现一个GUI界面系统来管理和执行这些jenkins job;
restful api
的测试执行接口供CI/CD使用;单个 Jenkins
成了整个测试基础架构的瓶颈节点。由于,来自于统一测试执行平台的大量测试请求,会在 Jenkins
上排队等待执行,然后端真正执行测试用例的 Selenium Grid
中不少 Node 处于空闲状态;
引入了 Jenkins 集群后,整个测试基础架构已经很成熟了,基本上能够知足绝大多数的测试场景了;
可是,还有一个问题一直没有获得解决,那就是: Selenium Grid
中 Node 的数量到底多少才合适?
为了解决这种测试负载不均衡的问题,Selenium Grid
的自动扩容和收缩技术就应运而生了;
若是所在的企业若是规模不是很大,测试用例执行的总数量相对较少,并且短时间内也不会有大变化的状况,那么测试基础架构彻底就能够采用经典的测试基础架构,而不必引入 Docker 和动态扩容等技术;
若是是大型企业,测试用例数量庞大,同时还会存在发布时段大量测试请求集中到来的状况,那么此时就不得不采用 Selenium Gird
动态扩容的架构了,而一旦要使用动态扩容,那么势必你的 Node 就必须作到 Docker 容器化,不然没法彻底发挥自动扩容的优点;
所以根据不一样的状况而酌情选择,是由测试需求推进的;
大型全球化电商网站全局测试基础架构的设计思路,能够总结为测试服务化
;
也就是说,测试过程当中须要用的任何功能都经过服务的形式提供,每类服务完成一类特定功能,这些服务能够采用最适合本身的技术栈,独立开发,独立部署;
理想的测试基础架构,应该包含6种不一样的测试服务:
统一测试执行服务
经过 Spring Boot
框架提供 Restful API
,内部实现是经过调度 Jenkins Job
具体发起测试;
本质是统一测试执行平台;
统一测试数据服务
统一测试数据平台;
测试执行环境准备服务
这里测试执行环境
,特指具体执行测试的测试执行机器集群: 对于 GUI 自动化测试来讲,指的就是 Selenium Grid; 对于 API 测试来讲,指的就是实际发起API调用的测试执行机器集群;
被测系统部署服务
主要是被用来安装部署被测系统和软件;
被测报告服务
主要做用是为测试提供详细的报告;
全局测试配置服务
本质是要解决测试配置和测试代码的耦合问题;
探索性测试更多关注的就是按部就班,迭代深刻的过程;
测试驱动开发,也就是 Test-Driven Develop
,一般简称为 TDD
;
核心思想,是在开发人员实现功能代码前,先设计好测试用例的代码,而后再根据测试用例的代码编写产品的功能代码;
最终目的是让开发前设计的测试用例代码都可以顺利执行经过;
评论里有一套开发流程,能够参考下:
好处:
以上是评论区看到的,仅供参考;
借助必定的技术手段、经过算法的辅助对传统软件测试过程进行可视化、分析以及优化的过程,使得测试过程可视、智能、可信和精准;
拥有几个特征:
双向mapping关系
是经过代码覆盖率工具来实现的;
Class
,Method
,Line
等相关信息;mapping
信息记录表中,这样就造成了双向mapping
;class
,method
等信息,去数据库搜到关联的测试用例,就能实现精准测试了;渗透测试指的是,由专业安全人员模拟黑客,从其可能存在的位置对系统进行攻击测试,在真正的黑客入侵前找到隐藏的安全漏洞,从而达到保护系统安全的目的;
针对性测试
针对性的测试,属于研发层面的渗透测试;
参与这类测试的人员,能够获得被测系统的内部资料,包括部署信息、网络信息、详细架构设计,甚至是产品代码;
须要彻底了解系统内部状况的前提下开展;
外部测试
外部测试,是针对外部可见的服务器和设备(包括:域名服务器(DNS)、Web 服务器或防火墙、电子邮箱服务器等等),模拟外部攻击者对其进行攻击,检查它们是否可以被入侵,以及若是被成功入侵了,会被入侵到系统的哪一部分、又会泄露多少资料;
通常是不清楚系统内部状况下开展的;
内部测试
由测试工程师模拟内部人员,在内网(防火墙之内)进行攻击,所以测试人员会拥有较高的系统权限,也可以查看各类内部资料,目的是检查内部攻击能够给系统形成什么程度的损害;
盲测
盲测,指的是在严格限制提供给测试执行人员或团队信息的前提下,由他们来模拟真实攻击者的行为和上下文;
双盲测试
双盲测试能够用于测试系统以及组织的安全监控和事故识别能力,及其响应过程。通常来讲,双盲测试通常是由外部的专业渗透测试专家团队完成,因此实际开展双盲测试的项目并很少;
Nmap
是进行主机检测和网络扫描的重要工具。它不只能够收集信息,还能够进行漏洞探测和安全扫描,从主机发现、端口扫描到操做系统检测和 IDS 规避 / 欺骗;
Aircrack-ng
是评估 Wi-Fi
网络安全性的一整套工具。它侧重于 WiFi
安全的领域,主要功能有:网络侦测、数据包嗅探、WEP 和WPA/WPA2-PSK 破解;
sqlmap
是一种开源的基于命令行的渗透测试工具,可以自动进行 SQL 注入和数据库接入;
Wifiphisher
是一种恶意接入点工具,能够对 WiFi 网络进行自动钓鱼攻击;
AppScan
一款企业级商业 Web 应用安全测试工具,采用的是黑盒测试,能够扫描常见的 Web 应用安全漏洞;
原理:
MBT 是一种基于被测系统的模型,由工具自动生成测试用例的软件测试技术;
原理是经过创建被测系统的设计模型,而后结合不一样的算法和策略来遍历该模型,以今生成测试用例的设计;
开发者首先根据产品需求或者说明来构建模型,而后结合测试对象生成测试用例,测试用例针对测试对象执行完以后,生成测试报告比对测试结果;
有限状态机
有限状态机能够帮助测试人员根据选中的输入来评估输出,不一样的输入组合对应着不一样的系统状态;
状态图
状态图是有限状态机的延伸,用于描述系统的各类行为,尤为适用于复杂且实时的系统;
UML
UML 即统一建模语言,是一种标准化的通用建模语言;
UML 能够经过建立可视化模型,来描述很是复杂的系统行为;
BPM-X
BPM-X 根据不一样的标准(好比,语句、分支、路径、条件)从业务流程模型建立测试用例;
fMBT fMBT 是一组免费的、用于全自动测试生成和执行的工具,也是一组支持高水平测试自动化的实用程序和库,主要被应用在 GUI 测试中;
GraphWalker
GraphWalker
以有向图的形式读取模型,读取这些模型,而后生成测试路径,更适合于多状态以及基于事件驱动的状态转换的后台系统;
前端高性能架构比较直观易懂,其本质就是经过各类技术手段去优化用户实际感觉到的前端页面展示时间。
缓存
读取缓存的处理:
缓存主要用来存储那些相对变化较少,而且听从“二八原则”的数据;这里的“二八原则”指的是 80% 的数据访问会集中在 20% 的数据上;
缓存技术并不适用于那些须要频繁修改的数据;
与缓存相关的测试场景:
集群
网站高可用指的就是,在绝大多的时间里,网站一直处于能够对外提供服务的正常状态,业界一般使用有多少个“9”来衡量网站的可用性指标,具体的计算公式也很简单,就是一段时间内(好比一年)网站可用的时间占总时间的百分比;
服务器硬件故障
如宕机,须要保障的是即便出现了硬件故障,也要保证系统的高可用;
解决方案就是从硬件层面加入必要的冗余,同时充分发挥集群的牲口
优点;
这样就须要准备至少两台一样的服务器,当其中一台宕机的时候,另一台能正常对外服务;
那么,从测试人员的角度来看,咱们依旧能够针对这种状况设计出针对部分数据服务器发生故障时的测试用例,以完成系统应对故障的反应状况的测试。
发布新应用的过程
在发布过程,会由于部署新版本而重启服务器的状况,会致使短暂时间不可用;
解决方案就是灰度发布,前提是服务器必须采用集群架构;
假若有N个节点的集群须要更新新版本,这时候更新过程是这样的:
程序自己的问题
预发布的缘由是由于,常常出现测试环境没问题,生产环境有问题,多是由于网络、数据量、依赖的第三方库不同等各类缘由致使,而预发布环境的要求是跟生产环境如出一辙,只是不会对外暴露而已;
该内容文中没有说起到,是jb自行补充的,直接找了逼乎的例子;
分布式&集群:分散压力; 微服务:分散能力;
分布式通常部署到多台,而多台关联的机器,能够称为集群;
厨房例子
月嫂例子:
单体架构
家里生小宝宝啦,因为本身没有照顾小宝宝的经验,因此请了位经验丰富的月嫂。 这位月嫂从买菜,到作饭,洗衣,拖地,喂奶,哄睡,洗澡,换纸尿裤,擦屁股,作排气操,夜间陪护,给奶妈作月子餐等等,所有都作, 这种叫作单体架构。
集群
什么都作,一个月嫂怎么够呢,确定忙不过来呀,那就请两个月嫂吧,这叫作集群;
高可用
有一个月嫂过生日,想请假回去和亲戚打一天麻将。若是只有一个月嫂,她走了,就叫作服务中断了;
可是由于作了集群,有两个月嫂,走了一个,另外一个仍是能用,虽然相比较吃力一些,可是毕竟仍是能用的,这个现象叫作高可用;
分布式
一个月嫂,一个月的费用基本上都要1万多,还有房贷,还有车贷,生活费用还高,实在是请不起两位啊,那就仍是请一位吧;
但是事情那么多,她实在忙不过来,怎么办呢? 那就把爷爷请过来买菜,把奶奶请过来作饭。 这样服务原本仅仅是由月嫂一人提供的,变成了和宝宝相关的由月嫂负责,采购由爷爷负责,餐饮由奶奶负责。 这就叫作分布式了;
低耦合
作宝宝服务的月嫂去打麻将了,不影响作饭的奶奶。 作采购的爷爷去喝酒了,也不影响月嫂的宝宝服务,这叫作低耦合;
高内聚
和宝宝相关的事情都是月嫂在作,月嫂兑奶方式快慢,只会影响本身,对爷爷和奶奶的服务没影响. 这叫作高内聚;
集群+分布式
奶奶一我的作饭,作久了也烦啊,也累啊,也想打麻将呀。 那么就把姥姥也请过来吧。 这样作饭这个服务,就由奶奶和姥姥这个集群来承担啦。她们俩,谁想去汗蒸了,都有另外一位继续提供作饭服务。
这就叫作集群+分布式;
可伸缩性,指的是经过简单地增长硬件配置而使服务处理能力呈线性增加的能力,最简单直观的例子,就是经过在应用服务器集群中增长更多的节点,来提升整个集群的处理能力;
可扩展性,指的是网站的架构设计可以快速适应需求的变化,当须要增长新的功能实现时,对原有架构不须要作修改或者作不多的修改就可以快速知足新的业务需求;
从总体架构的角度来看,应用服务器、缓存集群和数据库服务器各自都有适合本身的可伸缩性设计策略:应用服务器主要经过集群来实现可伸缩性,缓存集群主要经过 Hash 一致性算法来实现,数据库能够经过业务分库、读写分离、分布式数据库以及 NoSQL 来实现可伸缩性;
从技术实现上来看,消息队列是实现可扩展性的重要技术手段之一;
其基本核心原理是各模块之间不存在直接的调用关系,而是使用消息队列,经过生产者和消费者模式来实现模块间的协做,从而保持模块与模块间的松耦合关系;
引入消息队列后,测试数据的建立和测试结果的验证工做,都须要经过读写消息队列来完成。同时,咱们还要考虑到消息队列满、消息队列扩容,以及消息队列服务器宕机状况下的系统功能验证;
全链路压测,是基于真实的生产环境来模拟海量的并发用户请求和数据,对整个业务链路进行压力测试,试图找到全部潜在性能瓶颈点并持续优化的实践;
全链路压测的应用场景,不只仅包括验证系统在峰值期间的稳定性,还会包含新系统上线后的性能瓶颈定位以及站点容量的精准规划;
都会涉及到流量模拟、数据准备、数据隔离等常规操做;
局限性:
海量并发请求的发起
这种状况通常会采用jmeter,由于LR是按并发用户数费用,费用高;
难点:
JMeter
方案,并发数量也会存在上限,所以会改用Jenkins Job
单独调用 JMeter
节点来控制和发起测试压力,由于jmeter
是相互独立,只有jenkins job
足够多,就能够发起足够大的并发;jmeter slave
;全链路压测流量和数据的隔离
须要对压测流量进行特殊的数据标记,以区别于真实的流量和数据;
实际业务负载的模拟
这里的难点主要体如今两个方面:
业界一般采用的策略是,采用已有的历史负载做为基准数据,而后在此基础上进行适当调整;
具体到执行层面,一般的作法是,录制已有的实际用户负载,而后在此基础上作如下两部分修改:
真实交易和支付的撤销以及数据清理
对这些交易的流量和数据进行了特定标记,能够比较方便地筛选出须要撤销的交易,而后经过自动化脚本的方式来完成批量的数据清理工做;