一、如何用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點執行一次。