溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python接口自動化實例分享

發(fā)布時間:2021-08-24 20:21:39 來源:億速云 閱讀:248 作者:chen 欄目:開發(fā)技術

本篇內(nèi)容介紹了“Python接口自動化實例分享”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

目錄
  • 1、什么是接口?

    • 那么,接口測試和功能測試的區(qū)別在哪呢?

  • 2、如何開展接口測試?

    • 3、如何設計接口用例?

      • 1.獲取接口文檔

        • Fiddler

      • 2.分析接口文檔的接口,提取測試點

        • 3.接口測試用例設計思路

          • 4.接口測試其他范圍

            • 接口業(yè)務測試

            • 接口的性能測試

            • 接口安全測試

            • 在項目下新建一個文件夾common

            • 編寫登錄接口用例,調(diào)用封裝的請求類。

            • 對于用例的一些總結:

        • 4、接口測試用例實戰(zhàn)

          在上一篇Python接口自動化測試系列文章:Python接口自動化淺析unittest單元測試原理,主要介紹單元測試,unittest模塊特性、大致流程、源碼及實戰(zhàn)例子。

          以下主要介紹接口概念、接口用例設計及登錄接口測試實戰(zhàn)。

          1、什么是接口?

          接口:檢測外部系統(tǒng)與系統(tǒng)之間以及內(nèi)部各個子系統(tǒng)之間的交互點。

          通俗來說,接口就是連接前后端的橋梁,接口測試可以簡單理解為脫離了前端的功能測試。

          一個又一個的接口就對應功能測試內(nèi)一個又一個的功能。

          但注意,一個功能有可能不是一個接口就能實現(xiàn)。

          那么,接口測試和功能測試的區(qū)別在哪呢?

          其實功能測試就是在頁面上輸入我們的參數(shù)值,點點點;

          而接口測試沒有前端,而是通過接口文檔上的調(diào)用地址、請求參數(shù)等,校驗返回的結果值,

          也就是說,接口可以看成沒有界面的功能測試。

          因此,可以分析,系統(tǒng)間的接口包含三部分:輸入、處理邏輯、輸出。

          Python接口自動化實例分享

          2、如何開展接口測試?

          接口測試流程如下:

          1.需求評審,熟悉業(yè)務和需求;

          2.開發(fā)提供API接口文檔;

          3.根據(jù)開發(fā)交付的接口文檔,編寫接口測試用例;

          4.接口測試用例評審;

          5.開始執(zhí)行接口測試;

          6.提交測試報告;

          Python接口自動化實例分享

          3、如何設計接口用例?

          1.獲取接口文檔

          一般公司的開發(fā)會提供接口文檔,沒有接口文檔的自行抓包吧(摸摸頭),不知道怎么抓包的小伙伴,可以看看之前的Fiddler系列文章。

          Fiddler

          接口文檔是我們測試時最重要的一個依據(jù),一個規(guī)范的接口文檔至少包括:

          1.接口說明;

          2.調(diào)用URL;

          3.請求方法(get、post等);

          4.請求參數(shù)、參數(shù)類型、請求參數(shù)說明等;

          5.返回參數(shù)說明;

          如下為一個簡單的登錄接口文檔:

          Python接口自動化實例分享

          2.分析接口文檔的接口,提取測試點

          接口測試用例跟常規(guī)的功能測試用例基本一樣,

          可以從接口功能測試、接口業(yè)務測試、接口性能測試、接口安全測試等角度考慮。

          接口的邏輯校驗,可以參照接口流程圖來進行設計,一個分支需要作為一個場景去進行測試,需要覆蓋到流程圖里面所有的邏輯分支。

          接口的參數(shù)校驗,可以參照接口文檔中的參數(shù)定義去進行驗證,需要覆蓋到所有參數(shù)對應的枚舉值以及錯誤碼等信息。

          3.接口測試用例設計思路

          接口功能的關注點是:

          1.接口參數(shù)正確與否:接口傳入的參數(shù)是否有正確填寫;

          2.接口參數(shù)缺失:接口參數(shù)有必填、選填參數(shù),傳參時,測試參數(shù)缺失對結果的影響;

          3.接口參數(shù)邊界值:比如用戶名、密碼有長度限制,需要測試不同長度的參數(shù)對結果的影響;

          4.接口參數(shù)類型:比如接口文檔中用戶名為String類型,測試傳入其他數(shù)據(jù)類型對結果的影響。

          4.接口測試其他范圍

          接口業(yè)務測試

          主要是從業(yè)務的角度出發(fā),把接口組合成一條業(yè)務鏈,比如登錄之后充值,在數(shù)據(jù)庫中金額是否正確等等

          接口的性能測試

          是指接口是否滿足業(yè)務的要求,比如業(yè)務要求系統(tǒng)可以滿足50個人同時下單,那么下單這個接口就要可以承擔50 TPS,目前業(yè)內(nèi)一般使用JMETER去做接口性能測試,jmeter接口性能后續(xù)會單獨在Jmeter系列文章里介紹。

          接口安全測試

          接口的安全性主要圍繞Token、Timestamp和Sign三個機制展開設計,保證接口的數(shù)據(jù)不會被篡改和重復調(diào)用。

          注意:本文主要涉及接口功能測試,相信做過功能測試的童鞋,設計接口測試用例也是沒問題的。

          Python接口自動化實例分享

          4、接口測試用例實戰(zhàn)

          以下,我們以登錄接口進行實戰(zhàn)。

          隨著代碼模塊越來越多,混在一起,雜亂無章,這時我們考慮架構分層了,上篇文章:Python接口自動化之requests請求封裝,封裝的requests請求類,每個用例都要調(diào)用,可以放在公共模塊里。

          在項目下新建一個文件夾common

          放入請求模塊requests_handler.py

          Python接口自動化實例分享

          requests_handler.py

          import requests
          class RequestsHandler:
              def __init__(self):
                  """session管理器"""
                  self.session = requests.session()
              def visit(self, method, url, params = None, data= None, json= None, headers= None):
                  result = self.session.request(method,url,params=params,data=data,json=json,headers=headers)
                  try:
                      # 返回json結果
                      return result.json()
                  except Exception:
                      return 'not json'
              def close_session(self):
                  self.session.close()
          編寫登錄接口用例,調(diào)用封裝的請求類。

          登錄用例,新建一個test_cases文件夾,用來存放用例模塊。

          Python接口自動化實例分享

          test_Login.py

          import unittest
          from common.requests_handler import RequestsHandler
          class LoginTest(unittest.TestCase):
              def setUp(self):
                  # 請求類實例化
                  self.req = RequestsHandler()
              def tearDown(self):
                  self.req.close_session()
              def test_login_success(self):
                  login_url = 'http://127.0.0.1:8000/user/login'
                  payload = {
                      "mobile_phone": "1530272****",
                      "pwd": "12345678"
                  }
              
                  res = self.req.visit('post',login_url,json=payload)
                  self.assertEqual(0, res['code'])
          if __name__ == '__main__':
              unittest.main()

          運行結果為:

          Ran 1 test in 0.213s
          OK

          對于用例的一些總結:
          setUp, tearDown

          前置條件,后置條件,setUp實例化,在運行測試用例前獲取session管理器, tearDown,在測試用例執(zhí)行結束后關閉session管理器。

          對于斷言

          小伙伴們可能不知道到底用返回結果中的哪個字段斷言。個人意見,如果code、msg比較詳細的話,可以利用code、msg其中一個來斷言,當然code、msg一起做斷言也可以,甚至你覺得返回結果中某個數(shù)據(jù)符合你的預期,也是可以拿來斷言,斷言手段是靈活多變的,自行選擇最優(yōu)方案。

          小伙伴們看到總結,退出微信,打開王者榮耀,一氣呵成,其實還沒完呢,我們寫了正向用例,還有異常用例也寫兩條,更多的異常用例可以自行擴展下。

          import unittest
          from common.requests_handler import RequestsHandler
          class LoginTest(unittest.TestCase):
              def setUp(self):
                  # 請求類實例化
                  self.req = RequestsHandler()
              def tearDown(self):
                  # 關閉session
                  self.req.close_session()
              def test_login_success(self):
                  """
                  正確手機號,正確密碼
                  """
                  login_url = 'http://127.0.0.1:8000/user/login'
                  payload = {
                      "mobile_phone": "1530272****",
                      "pwd": "12345678"
                  }
           
                  res = self.req.visit('post',login_url,json=payload)
                  # 根據(jù)請求結果中的code進行斷言
                  self.assertEqual(0, res['code'])
              def test_phone_is_null(self):
                  """
                  手機號為空,密碼正確
                  """
                  login_url = 'http://127.0.0.1:8000/user/login'
                  payload = {
                      "mobile_phone": "",
                      "pwd": "12345678"
                  }
                 
                  res = self.req.visit('post', login_url, json=payload)
                  # 根據(jù)返回結果中的msg進行斷言
                  self.assertEqual("手機號碼為空", res['msg'])
              def test_pwd_is_null(self):
                  """
                  正確用戶名,密碼為空
                  """
                  login_url = 'http://127.0.0.1:8000/user/login'
                  payload = {
                      "mobile_phone": "1530272****",
                      "pwd": ""
                  }
              
                  res = self.req.visit('post', login_url, json=payload)
                  # 根據(jù)返回結果中的msg進行斷言
                  self.assertEqual("密碼為空", res['msg'])
          if __name__ == '__main__':
              unittest.main()

          測試結果為:

          Ran 3 tests in 0.259s
          OK

          以上代碼如下痛點:

          • 用例和數(shù)據(jù)未分離,維護成本大??梢詳?shù)據(jù)與測試腳本分離,使用Excel存放測試用例,方便維護。

          • 仔細研究發(fā)現(xiàn)正向用例、異常用例,只是傳入的數(shù)據(jù)不一樣,其他都是通用
            這種情況下,我們可以引入ddt數(shù)據(jù)驅動,減少代碼量。

          “Python接口自動化實例分享”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注億速云網(wǎng)站,小編將為大家輸出更多高質量的實用文章!

          向AI問一下細節(jié)

          免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

          AI