[Beta阶段]测试报告

[Beta阶段]测试报告

博客目录html

测试方法及过程

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

单元测试

单元测试的主要目的,是测试后端全部接口的工做是否正常。其内容主要包含两方面:
- 接口在正常状况下是否能发挥预期功能
- 接口在异常状况下是否能返回预期错误信息python

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

ios

为保证测试的全面性,咱们针对每个接口都设计了相应的单元测试。单元测试的总数高达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产生的缘由仍是参数的合法性问题。上述问题现已所有解决。json

压力测试

对服务器来讲,压力负载能力是评价其表现的重要指标之一。所以,咱们针对服务器进行了压力测试。
压力测试使用基于Python的压力测试工具locust进行。压力测试的一些基本参数以下:ubuntu

  • 并发用户数: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版本中页面过于重复的问题。
  • 完成搜索功能
    搜索功能主要包括两种。
    • 主页中的搜索功能
      这一功能使用户能够根据本身的需求,按照关键词搜索发布标题,以寻找特定的发布。
    • 点击发布详情中的标签查看该分类下的发布
      这一功能使用户在浏览发布时,能够根据感兴趣的标签筛选发布。
  • 完成推荐功能
    推荐功能也分为两类:
    • 根据浏览历史,推荐相关招募信息
      根据用户最近浏览历史中发布的标签,进行统计与分析,并在主页中从新排序,将用户可能更感兴趣的发布类型优先显示,提升用户寻找招募的效率。
    • 智能排序申请者简历 在“发布的申请者”页面,对每一份简历,根据其获奖记录、实习记录等信息进行评价,并根据其专业与发布的类型进行匹配,将更可能知足用户需求的申请者优先显示。
相关文章
相关标签/搜索