[Beta阶段]测试报告

博客目录

测试方法及过程

在正式发布前,为检验后端各接口功能的正确性,后端服务器对压力的耐受程度,以及前端各页面、功能的运行情况,我们对我们的服务器及小程序进行了多种测试。除去随开发进行的基本正确性测试外,针对上述三种情形,我们分别进行了单元测试、压力测试以及功能测试。

单元测试

单元测试的主要目的,是测试后端所有接口的工作是否正常。其内容主要包含两方面:

- 接口在正常情况下是否能发挥预期功能

- 接口在异常情况下是否能返回预期错误信息

Beta阶段的所有单元测试与Alpha阶段相同,在pycharm下使用Coverage工具进行测试。经过修改后已经通过了所有单元测试。所进行的一些测试如下图:



为保证测试的全面性,我们针对每一个接口都设计了相应的单元测试。单元测试的总数高达140个



在运行完所有单元测试后,单元测试的代码覆盖率高达96%,切实确保了所有接口的正确性。

单元测试中发现的bug如下:

后端单元测试Bug汇总

接口 现象 原因 是否解决
p/<int:post_id>/modify/ 发送正确信息时会返回错误3,但发送携带错误label的信息时会正常返回 对label的合法性判断条件反了
f/processing/<str:label>/ 发送错误label是仍能正常返回 检验label时调用相应检验函数时未将label分隔成数组传入
my/<int:user_id>/apply/ 无论发送什么信息都会报错 错误的调用了推荐算法
f/processing/ 无法获取发布信息 通过后台管理界面增加数据时没有指定发帖人,导致获取信息时崩溃
f/processing/ history参数为空时报错 对空字符串调用split方法并不会得到一个空列表
login/wechat/ 微信登录接口无法获取openid 腾讯提供的auth.code2Session接口返回值与文档不一致
login/wechat/ 改用MySQL数据库后含有特殊字符的微信昵称无法登陆 MySQL数据库的默认编码问题,需要将编码改为utf8mb4
p/<int:post_id>/delete/ 删除post后与该post相关的apply并未删除 相关的apply需要手动删除或者将对应的外键参数on_delete设置为models.CASCADE
c/post/ post_title字段超过20个字符时无法创建post 前后端约定不一致,后端限制最大长度为20,而前端为50
服务器端设置的默认图片路径无法访问 在Windows系统上可以将默认图片路径设为绝对路径,但在ubuntu系统上似乎只能用相路径
微信机器人无法正常登陆 没有将之前运行生成的wxpy.pkl删除

可以看见,大部分bug产生的原因还是参数的合法性问题。上述问题现已全部解决。

压力测试

对服务器来说,压力负载能力是评价其表现的重要指标之一。因此,我们针对服务器进行了压力测试。

压力测试使用基于Python的压力测试工具locust进行。压力测试的一些基本参数如下:

  • 并发用户数:500
  • 总请求数 :5412

进行压力测试后的结果如下:



可以看到,对于上述参数下的压力测试,总请求数量为5412个的情况下,失败请求数为3,表现良好。

平均响应时间为1.539s,作为高峰期的响应时间,仍可以接受。

吞吐率为17.4req/s

在压力测试结束时,针对云服务器端的监控如下:



在途中可以看到,在压力测试期间,CPU的占用率峰值约在62%左右,仍有一定资源剩余。但是,在监控图的第一行外网出带宽中可以看到,压力测试期间的对外带宽达到了最大限制1Mbps,因此,可以发现性能的瓶颈主要在于云服务器的带宽限制(1Mbps)。

前端功能测试

对于前端的功能测试,仍采用与Alpha阶段相同的方式,即在不同的机型、不同的操作系统下,对每个页面的每个功能进行一一测试,以检测其功能的正确性。前端功能测试的测试矩阵如下:

测试矩阵 功能测试 页面显示
测试机型 测试环境 登录 搜索 查看分类标签 首页智能推荐 修改个人信息 修改简历 查看招募 发布招募 查看我的发布 采纳申请 申请招募 查看我的申请 页面排版
Mi5 Android 8.0 wifi 无问题 无问题 无问题 无推荐效果 后端问题导致无法修改 无问题 无问题 无问题 无问题 无法查看申请者 无问题 查看我的简历无法显示 无问题
Mi6 Android 9.0 wifi 无问题 无问题 无问题 无推荐效果 后端问题导致无法修改 无问题 无问题 无问题 无问题 无法查看申请者 无问题 查看我的简历无法显示 无问题
Mi9 Android 9.0 wifi 无问题 无问题 无问题 无推荐效果 后端问题导致无法修改 无问题 无问题 无问题 无问题 无法查看申请者 无问题 查看我的简历无法显示 无问题
iphonoe xr ios12 第一次需要退出重进 无问题 无问题 无推荐效果 后端问题导致无法修改 无问题 无问题 无问题 无问题 无法查看申请者 无问题 查看我的简历无法显示 无问题
iphonoe 8 ios12 第一次需要退出重进 无问题 无问题 无推荐效果 后端问题导致无法修改 无问题 无问题 无问题 标签选择时偶然产生失去焦点问题 无问题 无问题 查看我的简历无法显示 无问题
华为荣耀 安卓 8.0 第一次需要退出重进 无问题 无问题 无推荐效果 后端问题导致无法修改 无问题 无问题 无问题 标签选择时偶然产生失去焦点问题 无问题 无问题 无问题 无问题

前端Bug汇总

BUG 现象 原因 是否解决
标签页下拉菜单显示异常 输入刚一结束,还未选择标签,下拉菜单页消失 控件绑定函数的触发事件有问题
当用户没有标签时,修改发布页面崩溃 页面无法正常显示信息 当没有标签的时候,标签之前无分隔符,调用分割函数时报错
个人中心我的简历页面退出登陆有误 退出到了一个不用的界面 上个版本遗漏的bug,现已经解决
待审核简历数有误 一直显示同一个数字 前端设计页面时设置的默认变量未更换
申请招募时,对简历合法性检测出问题 输入合法的简历信息但是无法提交申请 判断简历信息是否合法的信息出了问题
获取头像后无法立即登录 点击获取头像以后无反应然后无法登陆 获取用户信息与登陆功能交叉
无推荐效果 主页页面不会随用户点击而变 推荐算法不完善,帖子数目太少
后端问题,无法修改个人信息 后端检查格式问题 后端检查错误
无法查看申请者 点击查看申请者无反馈结果 原因未知
查看我的简历无法显示 IOS上无法显示简历 安卓和ios 数据不互通
主页有时候加载不出来 加载提示结束时未显示主页面 原因未知
无法查看申请者简历 点击申请者无法显示简历 原因未知

场景测试

场景测试1

  • 典型用户:冰哥

  • 用户需求

    冰哥是计算机系的大三学生。临近毕业,冰哥想在学校的实验室中寻找实习机会,以增加自己的实践经验。冰哥对计算机视觉方面尤其感兴趣,因此希望能寻找到与计算机视觉相关的招募。

  • 场景描述1

    • 冰哥打开微信,进入小小易校园小程序,并通过微信登录
    • 进入首页,点击屏幕正上方的搜索框,在搜索框中输入“计算机视觉”,点击搜索
    • 浏览全部含有关键词“计算机视觉”的招募,找到符合冰哥心中预期的实习
    • 进入相应招募详情,点击申请,并修改自己的简历,等待申请结果。
  • 场景描述2

    • 冰哥打开微信,进入小小易校园小程序,并通过微信登录
    • 进入首页,浏览发布列表,找到了一个含有“计算机类“标签的招募
    • 点击招募,进入招募详情,点击标签“计算机类”,浏览所有含有“计算机类”标签的发布
    • 在这些发布中,找到符合冰哥心中预期的实习
    • 进入相应招募详情,点击申请,并修改自己的简历,等待申请结果。

场景测试2

  • 典型用户:航哥
  • 用户需求

    航哥是一名大三的学生,本科专业是计算机专业,但是对经济学又特别感兴趣。因此,航哥想趁着大三开始学业任务轻松下来的机会,寻找计算机与经济学交叉的实习。
  • 场景描述
    • 航哥打开微信,进入小小易校园小程序,并通过微信登录
    • 进入首页,在所有发布中寻找与计算机、经济学都有关的招募
    • 找到符合要求的招募,进入招募详情,可惜时间与上课时间冲突
    • 返回首页,发现包含计算机类、经济学类标签的招募优先显示在了最上方,航哥因此迅速找到了符合自己要求的招募
    • 进入招募详情申请招募并等待结果。

回归测试

对于前端的回归测试,我们在测试前端功能时,对所有新旧页面都进行了一一测试,确保了原有功能的正确性(详情见测试矩阵)。

对于后端的回归测试,我们随着开发,更新了上一阶段的单元测试,对于有改动的接口,修改了其相应的单元测试使其满足最新功能。下面给出一个原有接口的单元测试用例代码:

class GetApplyTest(TestCase):
def setUp(self): # 测试所用数据库为空,需手动插入数据
user = User.objects.create(account='bsh_test', password=gen_md5('admin_admin', SECRET_KEY)) # 数据库中插入用户
self.post2 = Post.objects.create(title="test_apply", post_detail="test_test2", request_num=4, accept_num=1,
deadline="2019-5-20", if_end=False, poster=user)
resume = Resume.objects.create(name='asd', sex='s', age=10, degree='dasd', phone='1234', email='1@2', city='32',
edu_exp='bei', awards='das', english_skill='dasd', project_exp='dasda',
self_review='dasd') self.apply_exp = Apply.objects.create(resume=resume, post=self.post2, applicant=user)
self.token = create_token(user.id).decode()
self.url = '/apply/' + str(self.apply_exp.id) + '/'
self.post_ID = self.post2.id def test_get_apply(self):
'''
成功获取
'''
response = self.client.get(self.url, HTTP_AUTHORIZATION=self.token)
ret_data = response.json()
self.assertTrue(ret_data['ret'])
# self.assertEqual(ret_data['error_code'], 3) def test_get_apply_err1(self):
'''
不是 get 方法
'''
response = self.client.post(self.url, HTTP_AUTHORIZATION=self.token, content_type='application/json')
ret_data = response.json()
self.assertFalse(ret_data['ret'])
self.assertEqual(ret_data['error_code'], 1) def test_get_apply_err2(self):
'''
用户登陆已过期
'''
response = self.client.get(self.url, HTTP_AUTHORIZATION='')
ret_data = response.json()
self.assertFalse(ret_data['ret'])
self.assertEqual(ret_data['error_code'], 5) def test_get_apply_err3(self):
'''
该申请不存在
'''
uuu = '/apply/666/'
response = self.client.get(uuu, HTTP_AUTHORIZATION=self.token)
ret_data = response.json()
self.assertFalse(ret_data['ret'])
self.assertEqual(ret_data['error_code'], 2) def test_get_apply_err4(self):
'''
当前登陆的用户 既不是申请者 也不是发布者
'''
user_a = User.objects.create(account='bsh_adsad', password=gen_md5('admin_admin', SECRET_KEY))
tt = create_token(user_a.id).decode()
response = self.client.get(self.url, HTTP_AUTHORIZATION=tt)
ret_data = response.json()
self.assertFalse(ret_data['ret'])
self.assertEqual(ret_data['error_code'], 3)

该单元测试类GetApplyTest对应的接口设计规格如下:

  • setUp方法:

    setUp方法用于填充用于测试的数据。测试所用数据库与实际后台服务器数据库是分离的,每次运行测试时,测试数据库都为空,因此需要先向测试数据库中填充测试所需要的数据。此方法中还用于初始化一些其他测试常用的变量,如用户token,访问的后端url等。

  • test_get_apply方法:

    test_get_apply方法用于测试正常获取到该申请的情况。在这种情况下,返回值ret_data的值应为true

  • test_get_apply_error1方法:

    test_get_apply_error1方法测试的是error_code为1,即前端访问该url时,请求类型不是get的情况。判断返回的ret_data是否为false,返回的错误代码error_code是否为1,作为测试的正确性判断。

  • test_get_apply_error2方法:

    test_get_apply_error2方法测试的是error_code为5,即前端访问该url时,用户登录已过期,未能获取到token的情况。同样判断返回的ret_data是否为false,返回的错误代码error_code是否为5。

  • test_get_apply_error3方法:

    test_get_apply_error3方法测试的是error_code为2,即前端访问该url时,给出的apply_id不存在的情况。这种情况返回的错误代码error_code应为2。

  • test_get_apply_error4方法:

    test_get_apply_error4方法测试的是error_code为3,即前端访问该url时,当前用户既不是该申请的发布者或接受者,即用户没有权限查看该申请的情况。返回错误代码error_code应为3。

出口条件

Beta版本主要进行的工作是页面的重新设计以及实现,因此,出口条件设定如下:

  • 完成主要页面的重新绘制

    包含主页、导航栏、发布详情页面、新建发布页面、我的发布页面、我的申请页面、发布的申请页面、个人中心页面的重新绘制。重新绘制的主要目的是,修改页面配色,添加更多图标与图片,解决Alpha版本中页面过于重复的问题。

  • 完成搜索功能

    搜索功能主要包括两种。

    • 主页中的搜索功能

      这一功能使用户可以根据自己的需求,按照关键词搜索发布标题,以寻找特定的发布。
    • 点击发布详情中的标签查看该分类下的发布

      这一功能使用户在浏览发布时,可以根据感兴趣的标签筛选发布。
  • 完成推荐功能

    推荐功能也分为两类:

    • 根据浏览历史,推荐相关招募信息

      根据用户最近浏览历史中发布的标签,进行统计与分析,并在主页中重新排序,将用户可能更感兴趣的发布类型优先显示,提高用户寻找招募的效率。
    • 智能排序申请者简历

      在“发布的申请者”页面,对每一份简历,根据其获奖记录、实习记录等信息进行评价,并根据其专业与发布的类型进行匹配,将更可能满足用户需求的申请者优先显示。

[Beta阶段]测试报告的更多相关文章

  1. [BUAA软工]Beta阶段测试报告

    Beta阶段测试报告 Bug发现与报告 BUG 出现原因 解决方案 将shell加上编辑器UI以后,两边显示的文件不同步 两边的根目录不一致 修改编辑器获取根目录的函数,使其与shell的/home目 ...

  2. [敏杰开发]Beta阶段测试报告

    [敏杰开发]Beta阶段测试报告 这是一篇软工课程博客 项目 内容 课程:北航-2020-春-软件工程 博客园班级博客 作业要求 Beta阶段测试报告 我们在这个课程的目标是 测试项目 这个作业在哪个 ...

  3. 【BUAA软工】Beta阶段测试报告

    项目 内容 班级:北航2020春软件工程 博客园班级博客 作业:Beta阶段测试报告 测试报告 发现的bug Beta阶段的bug [已解决]CPP项目无法进行调试 [已解决] 注册界面注册后不能够自 ...

  4. [敏捷软工团队博客]Beta阶段测试报告

    项目 内容 2020春季计算机学院软件工程(罗杰 任健) 博客园班级博客 作业要求 Beta阶段测试报告 我们在这个课程的目标是 在团队合作中锻炼自己 这个作业在哪个具体方面帮助我们实现目标 对Bet ...

  5. [软工顶级理解组] Beta阶段测试报告

    在测试过程中发现了多少Bug? 测试阶段发现并已修复的bug: 尚且存在,但是难以解决或者不影响使用的bug: 计算重修课程的时候,如果重修课程的课程号和原课程号不同,则GPA计算会出现误差.但我们无 ...

  6. 北航学堂Android客户端Beta阶段测试报告

    我们已经知道的bug如下: 1.在没有网络的情况下,我们的程序会直接崩溃,没有弹出提醒网络异常的错误,这是个比较严重的bug,我们在6号7号 考试结束之后会进行修改: 有待进行的优化: 1.UI界面的 ...

  7. Beta阶段测试报告

    前端测试计划 具体测试项如下: 注册测试 登录测试 忘记密码测试 一次登录后自动登录测试 退出登录测试 编辑资料测试 查看好友测试 搜索好友测试 添加好友测试 获取当前正在游戏的房间测试 创建房间测试 ...

  8. 公客网beta阶段项目展示

    课程评价网站--公客网 为大学生选课排忧解难 公正客观的评课网站 为大学生提供发表自己看法的平台 为每一门课程打出公正的评分 beta阶段的新功能 beta阶段发布说明 评价的增删改 对课程发表评价 ...

  9. 老师说的都对 - Beta阶段博客作业

    第二小组Beta冲刺阶段博客目录 github 地址:PCES-Github 一.Scrum Meeting 1.第十周会议记录 2.第十一周会议记录 3.第十二周会议记录 二.测试报告 Beta阶段 ...

随机推荐

  1. IDEA 环境下更改Maven的仓库镜像提高下载速度

    Maven把所有常用的jar包存放在一个集中的仓库(repository)中,项目需要什么jar包和他相关的依赖,只要在pom.xml文件中声明就可了,还是很方便的.repository分两种,一个是 ...

  2. VC 在桌面上绘制一些图形

    注意:这是在桌面上绘制图形.如果想在VC++ MFC工程的视窗口上绘制图形.可以这么来,在工程View类的一个菜单响应(或者鼠标单击等事件的的响应)函数中添加下面main 中的代码,只需要将“红色字体 ...

  3. android的子线程切换到主线程

    在子线程中,如果想更新UI,必须切换到主线程,方法如下: if (Looper.myLooper() != Looper.getMainLooper()) { // If we finish mark ...

  4. Dubbo 几个很实用但是很少人知道的功能

    dubbo功能非常完善,很多时候我们不需要重复造轮子,下面列举一些你不一定知道,但是很好用的功能; 直连Provider 在开发及测试环境下,可能需要绕过注册中心,只测试指定服务提供者,这时候可能需要 ...

  5. Java 7 NIO.2学习(Ing)

    Path类 1.Path的基本用法 Path代表文件系统中的位置,即文件的逻辑路径,并不代表物理路径,程序运行的时候JVM会把Path(逻辑路径)对应到运行时的物理位置上. package com.j ...

  6. Vue.js学习-组件注册与使用

    Vue.js学习文档 地址:https://cn.vuejs.org/v2/guide/ 关于自定义组件注册: 建议将<script></script>放在body标签之后 H ...

  7. Shell 编程 基础

    本篇主要写一些shell脚本的基础知识,编程规范. 第一个shell脚本 [root@localhost ~]# vim first.sh #!/bin/bash # This is first Sh ...

  8. (八)Kubernetes Ingress资源

    前言 Kubernetes提供了两种内建的云端负载均衡机制(cloud load balancing)用于发布公共应用,一种是工作于传输层的Service资源,它实现的是“TCP负载均衡器”,另一种是 ...

  9. 【IIS】跨域(转)

    Access to XMLHttpRequest at 'http://*****/.dae' from origin 'http://192.168.198.21:22222' has been b ...

  10. 传统ELK分布式日志收集的缺点?

    传统ELK图示: 单纯使用ElK实现分布式日志收集缺点? 1.logstash太多了,扩展不好. 如上图这种形式就是一个 tomcat 对应一个 logstash,新增一个节点就得同样的拥有 logs ...