#1:測試執行
"""這類方法用於測試的執行過程,比如在測試之前連線資料庫,測試之後用於清除增加的字段,
跳過某個測試用例等。利用這些方法,可以降低測試用例**的複雜度,減少 耦合度,結構也更加清晰。
setup()與teardown()。顧名思義。setip和teardown分別是安裝和解除安裝的意思。setup()方法用於初始化工作,
比如在執行測試用例之前進行的系統連線。身份認證等。相反teardown()方法用於測試後的清理工作,比如資料還原,、
斷開連線等。
"""# import unittest
# class testdemo(unittest.testcase):
# def setup(self): #執行每個用例前都會呼叫setup()方法
# print("******setup********")
# def teardown(self): #每個測試用例後都呼叫了teardown()方法
# print("*******teardoen**********")
# def test01(self):
# print("this is tese01")
# def test02(self):
# print("this is test02")
# def test03(self):
# print("this is test03")
## if __name__ == "__main__":
# unittest.main()
"""setupclass()和teardownclass().setup()he teardown()方法對比,
加了乙個單詞class,相對應的初始化和清理工作不是針對每乙個測試用例,而是針對於整個類
"""# import unittest
# class testdemo(unittest.testcase):
# @classmethod
# def setupclass(cls):
# print("******setup********")
# @classmethod
# def teardownclass(cls):
# print("*******teardoen**********")
# def test01(self):
# print("this is tese01")
# def test02(self):
# print("this is test02")
# def test03(self):
# print("this is test03")
# if __name__ == "__main__":
# unittest.main()
"""從執行後的結果看,初始化方法執行後,緊接著執行所有的測試用例,最後執行清理方法
整個過程中,初始化和清理方法均只執行一次,與內部測試方法的個數無關。
""""""run(result = none) 方法可以幫助執行某個測試用例,與前面的例子不同的是,該方法提供了引數result
來儲存測試的結果,主要執行了一下兩種方法;
"""#1:如果為預設值none,會將測試結果到後續提到的defaulttestresult()方法中,通俗的說,即直接輸出到控制台中。
# import unittest
# class testdemo(unittest.testcase):
# def test01(self):
# print("this is test01")
# # def test02(self):
# print("this is test02")
## def test03(self):
# print("this is test03")
# if __name__ == "__main__":
# testdemo('test02').run()
"""將測試結果儲存到unittest.testresult()例項化的物件中,輸出該物件的字典,
結果顯示出是失敗、錯誤、已執行、跳過、執行字符集等詳細資訊"""
# import unittest
## class testdemo(unittest.testcase):
# def test01(self):
# print("this is test01")
## def test02(self):
# print("this is test02")
## def test03(self):
# print("this is test03")
## if __name__ == "__main__":
# r = unittest.testresult()
# testdemo('test01').run(result = r)
# print(r.__dict__) #__dict__是用來儲存物件屬性的乙個字典,其鍵為屬性名,值為屬性的值。
""" 執行結果:
this is test01
{'failfast': false, 'failures': , 'errors': , 'testsrun': 1, 'skipped': , 'expectedfailures': ,
'unexpectedsuccesses': , 'shouldstop': false, 'buffer': false, 'tb_locals': false, '_stdout_buffer': none, '
"""#斷言:
# def asseerttrue(self,expr,msg= none):
# """check that the expression is true"""
# if not expr:
# msg = self._formatmessag(msg,"%s is not true" % safe_repr(expr))
# raise self.failureexception(msg)
#使用adderttest 的簡單例項。「1==10」是乙個表示式,結果是false,會導致斷言失敗
# import unittest
# class testdemo(unittest.testcase):
# def test01(self):
# self.asserttrue(1==10 , msg ='this is a test msg')
## if __name__ =="__main__":
# if __name__ == '__main__':
# if __name__ == '__main__':
# unittest.main()
# """執行結果,上述**展現了斷言失敗的情況,還是輸出了「this is a test msg」。事實上每個斷言的方法都有msg引數,
# 靈活的使用此引數可以在測試失敗時向團隊提供更多的資訊和線索"""
"""比如assertisinstance(a,b)。從字面意思理解為判斷例項,即a如果為b例項化出來的物件,則結果為true,否則為false。下面的
例子中定義了三個類,testdemo為測試類,繼承於unittest.testcase,內部有兩個測試方法,每個方法均先例項化乙個隊形,再判斷
該物件和某個類的關係"""
import unittest
class demo1:
pass
class demo2:
pass
class testdemo(unittest.testcase):
def test01(self):
d = demo1()
self.assertisinstance(d,demo1,msg='##tis is test01 ##') #這一步是斷言
def test02(self):
d = demo2()
self.assertisinstance(d,demo1,msg='##tis is test02 ##')
#由於物件d不是demo1例項化出來的,所以test02測試不通過
#換成demo2就對了。
if __name__ == "__main__":
unittest.main()
"""在unittest框架中,assert斷言的方法遠遠不止以上所述,但其核心的原理和用法都是想通的。"""
測試執行分層
測試執行分層 v模型體現了測試設計分層和測試執行分層的概念,本文以作者自身的理解談談測試執行分層,不過從實際專案運作情況來看,真正做到測試執行分層的並不多,這裡原因有很多種,暫且不論。1.ut 單元測試的物件是lld中所劃分定義的程式單元或模組,它也是單元測試用例設計中可測試的最大單元。該測試物件可...
談談測試執行分層
v模型體現了測試設計分層和測試執行分 層的概念,本文以作者自身的理解談談測試執行分層,不過從實際專案運作情況來看,真正做到測試執行分層的並不多,這裡原因有很多種,暫且不論。1.ut 單元測試的物件是lld中所劃分定義的程式單元或模組,它也是 單元測試用例設計中可測試的最大單元。該測試物件可能由乙個或...
Junit 測試執行順序
junit 單元測試中設定測試執行順序 junit中 的測試中,有些資料有依賴性,比如 註冊使用者後,才能執行編輯 操作之類的,所以需要測試用例 按照一定順序執行。乙個簡單的例項,見如下 引入了 testsuite,import junit.framework.test import junit.f...