项目 | 内容 |
---|---|
班级:北航2020春软件工程 | 博客园班级博客 |
做业:Beta阶段测试报告 | 测试报告 |
在beta阶段,咱们的测试除了继续沿用alpha阶段的单元测试外,还采用了AB压力测试和Jmeter测试,直接从用户操做的角度和流程进行黑盒测试,模拟多用户并发场景,下面将分布介绍以下内容javascript
后端的单元测试较多,但在后期开展仍是存在一些困难。由于后端涉及不少相关的软件,如云盘、Docker容器等,这些内容自己不属于后端服务器,单从服务器代码难以获取这些内容的状态,于是致使一些测试的展开有必定的困难。html
基于MVC的设计,后端的核心功能代码和请求处理代码的耦合较低,因此后端主要针对核心功能代码进行了测试前端
同时,由于先后端分离的设计,后端实现的代码和API在前端开发过程当中会被一直调用,于是在开发使用过程当中前端也是在对相关的内容进行测试,在前端工做正常的条件下,有至关的把握认为后端代码工做正常java
AB全称是Apache Bench,是经过多线程发出请求对目标网站进行压力测试的工具,咱们在发布前使用了该工具对咱们的项目网站进行了相应的测试,具体内容以下docker
因为咱们项目的特性,致使网站的并发量并不会很高,同时,由于不一样于传统的OLTP应用,咱们的应用的核心压力也不在数据库,因此除非恶意为之,不然高并发场景通常不会出如今咱们的项目中。数据库
从上面的测试中,能够看出,在正常甚至高使用量下,前端内容分发过程不会成为软件的性能瓶颈。json
关于软件的性能瓶颈,在alpha阶段咱们也有说明,实际上是内存占用,虽然在beta阶段,经过云存储技术解决了硬盘占用的问题,可是多用户同时使用时的内存消耗仍是没法回避的。后端
固然,为了缓解上述问题,咱们也提出了一个更加轻量级的“草稿纸”概念,该子应用不依赖于docker技术,大大减小了一个用户的资源开销,同时,在设计上,该子应用更加吸引人,更容易成为用户点击的第一个按钮,从而经过用户行为引导的方式减小了不少没必要要的资源开销。也就是说,让那些只想进来瞧一瞧的用户不会占用过多的系统资源。浏览器
该项测试是使用的BlazeMeter配合Jmeter完成的,下面简单介绍一下这两项工具的功能服务器
该工具能够做为浏览器插件安装,功能是能够录制用户在浏览器上的操做并保存为.jmx文件(Jmeter的工程文件)
经过使用该工具,能够模拟录制用户使用咱们产品的全过程,并将操做过程保存下来,供Jmeter进行回放测试。
该工具能够定义一个工程组,其中能够包含一系列HTTP请求,同时能够设置相关的断言。一个工程组能够重复执行,从而使得测试变得可重复。
在这里,Jmeter能够用上一个工具录制获得的工程文件生成相应的测试计划,从而进行黑盒测试。
运行该测试计划,能够生成相应的HTML形式的测试报告
从中能够看出,整个流程的执行都是正常的,所有正确返回
同时还会生成一些统计数据,包括平均响应时间、最大响应时间、最小响应时间等内容。
能够看到,没有任何错误发生。
此外,咱们还对前端页面的性能进行了测试,重点关注了首页的加载时间方面的问题。
以下图所示,是在咱们优化首页性能前,首页的加载时间统计
其中,红线表明的文件占据了大量的加载和页面渲染的时间,对此,咱们作了文件压缩和一些没必要要的文件去除以及文件瘦身,通过一系列优化,最终的结果以下图所示。
和优化前相比,峰值被削去了,总体的响应时间都在40ms之内,首页的加载速度也获得了明显的提高。
对于功能性要求比较高的后端设计,咱们会在新增功能,或者改写旧逻辑后,在push到远程仓库前,会从新跑一遍以前进行过的单元测试,以确保旧功能不受影响:
例如对于后端的container-server,在beta阶段须要支持新建文件以及新建文件夹时支持多层目录建立。所以在拓展该接口功能时,须要测试原功能是否仍然有效,这里须要从新运行原单元测试,以检验是否存在bug:
describe('POST /dir/new', function() { it('response with json', function (done) { request(app) .post('/dir/new') .send('dir_path=' + encodeURIComponent('./test/tt/')) .expect(200) .end(function (err, res) { if (err) { done(err) } should.eql(fs.statSync('./test/tt/').isDirectory(), true) done() }) }) }) describe('POST /dir/new', function() { it('response with json', function (done) { request(app) .post('/dir/new') .send('dir_path=' + encodeURIComponent('./test/tt/')) .expect(200) .end(function (err, res) { if (err) { done(err) } res.data.message.should.eql("存在同名文件夹") done() }) }) })
在运行完单元测试后,结果以下:
说明新接口运行并不影响旧功能,所以可以上线,所以再将代码push到远程,而且在pr前提交单元测试经过的相关截图,以方便组员进行复审经过。
咱们项目的测试矩阵基本和Alpha阶段一致,选择和Alpha阶段的设备和环境进行测试,不一样的是对新增功能检测是否可以正常访问:
系统 | 浏览器 | 操做流程 | 登陆页面 | 首页 | IDE页下拉菜单栏 | IDE文件树 | IDE编译运行 | IDE的Terminal | 刷新 | 编辑器 | 草稿纸功能 | 分享功能 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Windows | Chrome | 基本流畅 | 功能正常 | 功能正常 | 排版不太对齐,功能正常 | 右键菜单栏不太灵敏,功能基本正常 | 正常 | 正常 | 正常 | 显示与功能均正常 | 正常 | 正常 |
Windows | Edge79如下版本 | 基本流畅 | 功能正常 | 功能正常 | 排版不太对齐,功能正常 | 显示正常,功能正常 | 不能使用 | 正常 | 正常 | 不能使用 | 不能使用 | 不能使用 |
Windows | Edge79以上版本 | 基本流畅 | 功能正常 | 功能正常 | 排版不太对齐,功能正常 | 显示正常,功能正常 | 正常 | 正常 | 正常 | 显示与功能均正常 | 正常 | 正常 |
MacOS | Chrome | 基本流畅 | 功能正常 | 功能正常 | 排版不太对齐,功能正常 | 显示正常,功能正常 | 正常 | 正常 | 正常 | 显示与功能均正常 | 正常 | 正常 |
MacOS | Safari | 基本流畅 | 功能正常,若是打开跨站追踪则不能正常登录 | 功能正常 | 排版不太对齐,功能正常 | 显示正常,功能正常 | 正常 | 正常 | 正常 | 显示正常,跳转到引用存在不显示的bug | 正常,但存在滚轮 | 正常 |
MacOS | Firefox | 基本流畅 | 功能正常 | 功能正常 | 排版不太对齐,功能正常 | 显示正常,功能正常 | 正常 | 正常 | 正常 | 显示与功能均正常,部分快捷键与浏览器冲突 | 正常 | 正常 |
Ubuntu | Chrome | 基本流畅 | 功能正常 | 功能正常 | 排版不太对齐,功能正常 | 显示正常,功能正常 | 正常 | 正常 | 正常 | 显示与功能均正常 | 正常 | 正常 |
咱们产品Beta阶段的出口条件主要有如下四个:
更多的优势请详见Beta阶段发布声明,这里再也不一一列举。