unittest 知識問答題-也許面試會有用-歡迎補充


一、如何用python+unittest實現接口測試自動化。

1、unittest實現接口測試自動化的流程是怎樣的?

(1)如何獲取測試接口信息?

答:a/從研發人員處獲取,b/通過fiddler或charles或chrome的F12功能查看Network,並與研發人員確認后獲取,

      c/常見的接口測試文檔格式

     

(2)如何解決case間依賴?  比如獲取token

答:針對不同情況有不同處理方式。

      a/僅是當前case的前置依賴,則寫在當前case內

      b/多個case的共同前置依賴,可寫在公共方法中。則每次執行case時,僅需獲取class中已經獲取到前置。 比如登錄用戶token

         缺點是,公共方法會被多次調用,接口訪問頻繁。

         如下所示:

import unittest
import requests

"""
公共方法獲取token
"""
host = 'https://api.xxx.net'


class CommonToken(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        print("setUpClass")

    @classmethod
    def tearDownClass(cls):
        print("tearDownClass")

    def commonToken(self):
        url = host + '/web_login'
        data = {'phone': '12345678901', 'pwd': '123456'}
        headers = {'Content-Type': 'application/x-www-form-urlencoded'}
        response = requests.post(url, data=data, headers=headers).json()
        token = response['data']['token']
        return token

    def testUserDetail(self):
        url = host + '/user_info'
        access_token = self.commonToken()
        if access_token:
            data = {'token': '%s' % (access_token)}
            response = requests.get(url, data=data).json()
            self.assertEqual(response['code'], 0, '狀態碼錯誤')
        else:
            self.assertTrue(False, '未獲取到Token')

    def testMyOrder(self):
        url = host + '/find_orders'
        access_token = self.commonToken()
        if access_token:
            data = {'token': '%s' % (access_token)}
            response = requests.get(url, params=data).json()
            self.assertEqual(response['code'], 0, '狀態碼錯誤')
        else:
            self.assertTrue(False, '未獲取到Token')


if __name__ == '__main__':
    unittest.main()

 

        c/采用全局變量

           代碼與b/操作類似,只是access_token需要聲明為global 。 即:

global access_token

      

       d/【下策】按程序邏輯推算出每個接口的輸入數據,單獨執行接口測試,暫不考慮多個接口依賴的問題。      

(3)如何使用斷言?常用的斷言方法有哪些?

答:每個case都需要執行斷言,unittest通過執行case,判斷case是否執行成功。

      常用斷言方法有:asserEqual(a,b,reason) --a/b是否相等

                              assertIsInstance(a,#dict/list#,reason) --a是否是字典或列表

                              assertGreater(a,b,reason) --a是否大於b

                              assertTrue(x,reason)--x是否為真

                              assertFalse(x,reason)--x是否為假

                              assertIsNotNone(x,reason)--x是否為None

(4)如何生成測試報告?HTMLTestRunner類

答:python3可通過HTMLTestRunner類實現生成html的自動化測試報告,使用方法如下:

      a/在命令行中通過pip3 install html-testRunner下載

      b/執行測試用例的case中,寫:

 

          import HtmlTestRunner

          import unittest

          f = open("output_fir + output_file",'w')

          runner = HtmlTestRunner.HTMLTestRunner("output_dir",descriptions="描述信息" ,verbosity=2)

          runner.run()       

(5)如何配合Jenkins使用?

答:a/登錄官網下載安裝包

      b/在本地安裝完成, 默認8080端口 

         下載war包時,需先安裝java運行環境,命令行中執行java -jar  jenkins.war -httpPort=8080

      c/登錄本地jenkins服務,http://localhost:8080,通過腳本修改時區。

      d/解鎖jenkins-安裝插件-設置初始管理員賬號和密碼

      c/創建project

      d/system config中設置郵件通知協議和接收郵件和發送郵件方郵箱

      e/設置定時任務,進入項目,並設置jenkins構建觸發器build periodically 。 按*****設置  H 5*** 每天的凌晨5點執行一次。

         


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM