单元测试unittest(基于数据驱动的框架:unittest+HTMLTestRunner/BeautifulReport+yaml+ddt)...
一、定義
unittest單元測試框架不僅可以適用于單元測試,還可以適用WEB自動化測試用例的開發與執行,該測試框架可組織執行測試用例,并且提供了豐富的斷言方法,判斷測試用例是否通過,最終生成測試結果。
unittest通過建立類并繼承父類unittest.TestCase將用例組織起來,統一執行
示例:
import unittest class Testcase(unittest.TestCase):#類繼承unittest.TestCasedef setUp(self):#每條用例運行前,運行。一般可用來做些準備工作print('我是setup,什么時候運行')def tearDown(self):#每條用例結束后,運行,一般可用來做些收尾工作print('teardown什么時候運行')def testa(self):print('測試用例a')self.assertEqual(1,2,'計算結果不正確')#assertEqual是父類unittest.TestCase的函數,用來驗證實際結果是否與預期結果相等#第一個參數是預期結果,第二個參數是實際結果,第三個參數是當前面兩個不相等時,回顯示的提示信息。第三個參數是非必填的def testb(self):'''這里是測試用例的描述,會最終顯示在測試報告中的,必須用三個單引號括起來才可以,用#d不行'''print('測試用例b')self.assertEqual(1,1)def c(self):print('c函數不是以test開頭的,所以不會當做用例被執行')# self.assertIn('a','abc') @classmethoddef setUpClass(cls):#所有的用例運行前,運行setupClassprint('什么時候運行setupClass')def tearDownClass(cls):#所有用例運行后,執行tearDownClassprint('什么時候運行tearDownClass')unittest.main()#執行當前python文件中的所有用例,會在控制臺顯示運行結果,不會產生測試報告 #運行的時候不要右鍵運行run unittest for...,這個是pycharm自己給運行的unittest,不會產生測試報告 # 應點擊菜單欄中Run--run,彈出提示框后,選擇自己要運行的文件進行run #函數名用例必須以test開頭,才會被執行二、用例集suite+HTMLTestRunner/BeautifulReport
用例集即測試套件,可以吧所有的用例放入用例集當中執行,并結合HTMLTestRunner或者BeautifulReport產生出直觀的漂亮的測試報告
#-------------------------------------------------------------------HTMLTestRunner寫報告(丑)
#將下載好的HTMLTestRunner.py 放到 pycharm的External Libraries目錄下的lib目錄下,然后導入:import HTMLTestRunner,緊接著上面的代碼:(把unittest.main注釋掉)
然后通過run-run選中要執行的當前文件,運行后,就會產生一個html格式的報告,可用瀏覽器打開,如下:
#--------------------------------------------------------BeautifulReport 報告(美)
#下載BeautifulReport ,解壓后運行setup.py。可以將解壓后的文件拷貝到pycharm中,然后運行setup.py也可。然后要導入:
from BeautifulReport import BeautifulReport as bf #bf就是個別名,方便使用
suite=unittest.TestSuite()#定義用例集,是個list suite.addTest(unittest.makeSuite(Testcase))#將類TestCase先變成一個用例集合,然后再加入到suite中 report=bf(suite)##先實例化這個類 report.report(description='用例描述',filename='用例文件名字') #description必填參數,log_path是非必寫的,默認在當前目錄下。也可以定義別的目錄 #filename可寫可不寫,回自動生成個名字。名字后綴默認就是html。可寫上也可不寫執行后,生成html格式報告:打開:
?
?三、用unittest測接口示例
1、接口數據:yaml格式文件,存有3條用例數據
2、用ddt自動讀取用例數據并傳遞給測試類中的測試用例函數
3、執行用例
4、寫報告
用例數據
- #用減號-區分不同的用例。最終是個list,然后每個list是個字典: [{}{}]url: /api/user/logindetail: 正常登錄method: postdata:username: aaapasswd: aA123456check:- userId- error_code-url: /api/user/logindetail: 密碼錯誤method: postdata:username: aaapasswd: aA1234check:- 密碼錯誤-url: /api/user/logindetail: 必填參數未填,用戶名不傳method: postdata:passwd: aA1234check:- 必填參數未填接口測試代碼:獲取數據,執行測試用例并發送測試結果報告
import unittest import ddt#自動讀取文件內容,該模塊需要先安裝pip install ddt import requests from BeautifulReport import BeautifulReport as bf from urllib import parse@ddt.ddt #聲明這個類要用ddt class Login(unittest.TestCase):base_url='http://100.20.20.40'@ddt.file_data('login1.yaml')#ddt自動讀取文件,并獲取內容傳給下面的函數,循環調用.運行如果出現字符編碼問題,就直接打開file_data源文件,搜索open,將打開文件的代碼中,加上encoding=utf-8def test_request(self,**kwargs):#**kwargs可以傳入字典參數,不限個數.此處用來接收從login1.yaml中讀出來的用例,是字典detail=kwargs.get('detail','沒寫用例描述')#如果沒有定義detail,默認給個值’沒寫用例描述‘self._testMethodDoc=detail#設置用例描述 url=kwargs.get('url')url=parse.urljoin(self.base_url,url)#自動拼接url,method=kwargs.get('method','get')#method默認給個get方法data=kwargs.get('data',{})#如果沒給data,默認給個空字典header=kwargs.get('header',{})#如果沒有header參數,默認給個空字典cookie=kwargs.get('cookie',{})check=kwargs.get('check')#獲取login1.yaml中的預期結果check,是listmethod=method.lower()# try:if method=='get':res=requests.get(url,params=data,cookies=cookie,headers=header).text#因為實際結果失敗的話,不會返回json串,所以不能轉成字典else:res=requests.post(url,data,cookies=cookie,headers=header).textexcept Exception as e:print('接口請求出錯')res=efor c in check:#循環遍歷check中的所有預期結果,判斷是否包含在實際結果中self.assertIn(c,res,msg='預期結果不符,預期結果%s,實際結果%s'%(c,res))#斷言,如果預期結果在實際結果中,pass.否則斷言失敗并給出錯誤信息msg suite=unittest.TestSuite() suite.addTest(unittest.makeSuite(Login)) run=bf(suite) run.report('login_test','登錄測試用例')#第一個是描述,第二個是文件名 print(run.success_count)#通過的次數 print(run.failure_count)#失敗次數)?
轉載于:https://www.cnblogs.com/bendouyao/p/9153557.html
總結
以上是生活随笔為你收集整理的单元测试unittest(基于数据驱动的框架:unittest+HTMLTestRunner/BeautifulReport+yaml+ddt)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mac Eclipse安装lombok
- 下一篇: vscode去除控制台ES6报错