[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版本中頁面過於重複的問題。
  • 完成搜索功能
    搜索功能主要包括兩種。
    • 主頁中的搜索功能
      這一功能使用戶能夠根據本身的需求,按照關鍵詞搜索發佈標題,以尋找特定的發佈。
    • 點擊發布詳情中的標籤查看該分類下的發佈
      這一功能使用戶在瀏覽發佈時,能夠根據感興趣的標籤篩選發佈。
  • 完成推薦功能
    推薦功能也分爲兩類:
    • 根據瀏覽歷史,推薦相關招募信息
      根據用戶最近瀏覽歷史中發佈的標籤,進行統計與分析,並在主頁中從新排序,將用戶可能更感興趣的發佈類型優先顯示,提升用戶尋找招募的效率。
    • 智能排序申請者簡歷 在「發佈的申請者」頁面,對每一份簡歷,根據其獲獎記錄、實習記錄等信息進行評價,並根據其專業與發佈的類型進行匹配,將更可能知足用戶需求的申請者優先顯示。
相關文章
相關標籤/搜索