測試執行 setup tearDown

2021-09-26 09:08:44 字數 4546 閱讀 1376

#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...