單元測試unittest的用法

本文主要闡述了unittest 中的 TestSuite容器、assert斷言、裝飾器@unittest.skip的用法

port.py

import requests
import json
class RunMain:
    def __init__(self):
        #self.run_main(url,method,data=None)
        pass

    def send_get(self,url,data=None):
        print(data)
        res = requests.get(url=url,data=data).text
        print('res=%s'%res,type(res))
        return res

    def send_post(self,url,data=None):
        res = requests.post(url=url,data=data).text
        res = json.loads(res)
        #上面兩句可以合併爲一句 res = requests.post(url=url, data=data).json()
        # return json.dumps(res, indent=2, sort_keys=True)  #字典轉字符串序列化可以這麼寫
        return res

    def run_main(self,url,method,data=None):
        if method == 'GET':
            res = self.send_get(url,data)
        else:
            res = self.send_post(url,data)
        return res


if __name__ == '__main__':

    url = 'http://127.0.0.1:8001/login/'
    data = {
        'username':'jonathantfff',
        'password':'jack666666',
    }

    rm = RunMain().run_main(url,'POST',data=data)
    

testcase.py

import unittest
class TestMethod(unittest.TestCase):
    #每次方法之前執行,名字必須叫"setUpClass"
    @classmethod
    def setUpClass(cls):
        print("類執行之前的方法")
    #每次方法之前執行,名字必須叫"tearDownClass"
    @classmethod
    def tearDownClass(cls):
        print("類執行之後的方法")
    #每次方法之前執行,名字必須叫"tearDownClass"
    def setUp(self):
        print('setup ')
    #每次方法之後執行,名字必須叫"tearDown"
    def tearDown(self):
        print('teardown ')
    #測試方法必須以"test"開頭
    def test_01(self):
        print('this i test1')

    def test_02(self):
        print('this i test2')


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

以上代碼爲上面兩片文章的獨立代碼,下面我們整合一下。**重要

import unittest
import port
class TestMethod(unittest.TestCase):

    def setUp(self):
        self.url = 'http://127.0.0.1:8001/login/'
   		self.data = {
        'username':'jonathantfff',
        'password':'jack666666',
    				}
	    self.run = Runmain()

    def tearDown(self):
        print('teardown ')

    def test_01(self):
    	res = self.run.run_main(self.url,self.data)
        self.assertEqual(res['code']=101)  #斷言,斷言成功則跳過,否則報錯
        globals()['code'] =  res['code']  # globals()['code']定義全局變量(固定用法),這個全局變量可以給下一個測試的函數使用(集成測試)

    def test_02(self):
        print(code)  #直接使用變量就可以返回定義的全局變量【使用的時候儘量減少依賴執行,unittest執行的時候是按照test後面的字母順序執行的】

	#通過這種方式跳過 "test_03"這個測試
	@unittest.skip('test_03')
	def test_03(self):
		print('這是測試的第三個case')

if __name__ == '__main__':
    #unittest.main() 
    #那麼除了 "unittest"還有什麼方法可以啓動呢,unittest爲我們提供了一個容器
    suite = unittest.TestSuite()  #創建容易
    suite = addTest(TestMethod('test_01')) #向容器內添加測試
    suite = addTest(TestMethod('test_02')) 
    suite = addTest(TestMethod('test_03')) 
    unittest.TextTestRunner().run(suite)  #啓動容器
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章