1. 程式人生 > >使用mongodb+pytest+allure+jenkins構建api介面自動化測試

使用mongodb+pytest+allure+jenkins構建api介面自動化測試

一.介紹

        之前學習robotframework的時候,知乎上有人推薦這個框架,高呼pytest大法好,正好最近要重構一個專案的服務端介面自動化測試框架。

        學了一下,確實很好用,分享出來一個自己,希望有所幫助吧。

二.功能

          + 資料驅動

              -  針對介面測試的特點(同一業務場景對某一功能介面各種引數請求校驗介面的返回)Mongo基於文件儲存,省去json序列化轉換操作,測試類+測試方法對映到Mongo中一個集合,集合中每一條資料依次執行測試方法中的業務邏輯。例如,使用各種不同的組合資料登陸,或購買各種規格,數量的商品。

            - 下圖為專案中一組資料示例,利用pytest的pytest_generate_tests的hook 將資料庫中的對應的集合的資料賦值data和scm。

              data作為資料,scm作為返回的校驗模板。

         

           

  • 資料動態渲染

    • 支援資料動態替換,如‘{{ DevToken }}’,替換變數,{% int %}替換為函式。
    • {'tu': ['{{ val }}', {'newkey': '{{ val }}'}],
      'key': {'str': '{% fake.pystr(max_chars=10) %}',
      'phone': '{% fake.phone_number() %}',
      'company': '{% fake.company() %}'}
      }
      ------->
      {'tu': [456, {'newkey': 456}],
      'key': {'str': 'CxtMTqAhLY',
      'phone': '13319170599',
      'company': '精芯網路有限公司'}
      }
  • Schema 模板使用

    • 支援部分校驗,只校驗scm中有的key值
    • 規則支援函式 例如
      {
      "data" : "{% str %}", #校驗返回的data是個字串物件
      "traceID" : "{{ traceID }}", #校驗traceID相等
      "message" : "token錯誤", #校驗返回的message
      "code" : "00120112001",
      "success" : false #校驗布林值等於false
      }
  • 優化配置檔案,     

  • 將不同環境的配置資訊儲存到config檔案,執行時通過不同的env引數(--env=online --env=test)載入不同的配置資訊到不同的環境執行測試,如host地址,使用者名稱密碼,等

三.可維護性

這樣分層組織的好處,提高了程式碼的複用,模組化之後,是測試邏輯更加突出。後期迭代有的介面引數如果有變動,只需要在project_lib中或者fixture中進行修改。testcase只關注業務邏輯。

testcase

引用fixture組合出測試場景,針對特定介面功能的測試用例

scenario

測試用例場景模組,根據不同粒度組合一些場景,如:測試訂單的操作,商家登陸商家上架一個商品,使用者新增商品提交訂單生成一個訂單。基於這個場景進行訂單的取消,結算的測試。

fixture

Pytest中的類似xUnit的setUp和tearDown,配置scope=(session/class/function),使用起來更加靈活。

lib

依產品線定製,新增介面公共引數,簽名演算法

特殊介面資料處理。

Req

實現基本send方法,公共的資料渲染、返回校驗,列印日誌等方法

四.與jenkins結合

      jenkins就沒什麼可說的了,安裝一個Allure的外掛。配置生成報告命令。

csdn這個破編輯頁面真特麼難用。就這樣把不想寫了,fuck。

五.程式碼

簡單的demo上傳到github。https://github.com/Be5yond/pytest_demo.git

----------------------------------------  2018/10/27--------------------------------------------------

看到github有兄弟fork了這個專案,可能還是有點用的,更新一下吧。之前採用mongodb佐資料驅動是因為那個專案的開發設計的api引數巢狀太深,不好處理。結構比較好的介面一般都是格式差不多的,可以用excel來儲存測試資料,看起來更加直觀,對映方式也很簡單,測試類對應一個excel檔案,每一個方法對應一個sheet,sheet中的每一行就是一條testcase。

excel-datadriven

對於某些介面不需要關心的引數,在lib層使用DefaultData方法將預設引數填進去,避免測試資料檔案中很多重複的資料。

defaut_data

像呼叫get_test傳送請求parameter中會預設新增StartTIme,EndTime和Type引數。