標籤:htm ble down sele 運行 體驗 斷言 路徑 error
#練習1:import randomimport unittestfrom TestCalc import TestCalcFunctionsclass TestSequenceFunctions(unittest.TestCase): def setUp(self): self.seq = range(10) def tearDown(self): pass def test_choice(self): # 從序列seq中隨機選取一個元素 element = random.choice(self.seq) # 驗證隨機元素確實屬於列表中 self.assertTrue(element in self.seq) def test_sample(self): # 驗證執行的語句是否拋出了異常 with self.assertRaises(ValueError): random.sample(self.seq, 20) for element in random.sample(self.seq, 5): self.assertTrue(element in self.seq)class TestDictValueFormatFunctions(unittest.TestCase): def setUp(self): self.seq = range(10) def tearDown(self): pass def test_shuffle(self): # 隨機打亂原seq的順序 random.shuffle(self.seq) self.seq.sort() self.assertEqual(self.seq, range(10)) # 驗證執行函數時拋出了TypeError異常 self.assertRaises(TypeError, random.shuffle, (1, 2, 3))if __name__ == ‘__main__‘: # 根據給定的測試類別,擷取其中的所有以“test”開頭的測試方法,並返回一個測試套件 suite1 = unittest.TestLoader().loadTestsFromTestCase(TestSequenceFunctions) suite2 = unittest.TestLoader().loadTestsFromTestCase(TestDictValueFormatFunctions) suite3 = unittest.TestLoader().loadTestsFromTestCase(TestCalcFunctions) # 將多個測試類別載入到測試套件中 suite = unittest.TestSuite([suite2, suite1,suite3]) #通過調整suit2和suite1的順序,可以設定執行順序 # 設定verbosity = 2,可以列印出更詳細的執行資訊 unittest.TextTestRunner(verbosity = 2).run(suite)
#練習2:#會產生一個test.html檔案import unittestimport HTMLTestRunnerimport math#被測試類別class Calc(object): def add(self, x, y, *d): # 加法計算 result = x + y for i in d: result += i return result def sub(self, x, y, *d): # 減法計算 result = x - y for i in d: result -= i return result#單元測試class SuiteTestCalc(unittest.TestCase): def setUp(self): self.c = Calc() @unittest.skip("skipping") def test_Sub(self): print "sub" self.assertEqual(self.c.sub(100, 34, 6), 61, u‘求差結果錯誤!‘) def testAdd(self): print "add" self.assertEqual(self.c.add(1, 32, 56), 89, u‘求和結果錯誤!‘)class SuiteTestPow(unittest.TestCase): def setUp(self): self.seq = range(10) # @unittest.skipIf() def test_Pow(self): print "Pow" self.assertEqual(pow(6, 3), 216, u‘求冪結果錯誤!‘) def test_hasattr(self): print "hasattr" # 檢測math模組是否存在pow屬性 self.assertTrue(hasattr(math, ‘pow1‘), u"檢測的屬性不存在!")if __name__ == "__main__": suite1 = unittest.TestLoader().loadTestsFromTestCase(SuiteTestCalc) suite2 = unittest.TestLoader().loadTestsFromTestCase(SuiteTestPow) suite = unittest.TestSuite([suite1, suite2]) #unittest.TextTestRunner(verbosity=2).run(suite) filename = "c:\\test.html" # 定義個報告存放路徑,支援相對路徑。 # 以二進位方式開啟檔案,準備寫 fp = file(filename, ‘wb‘) # 使用HTMLTestRunner配置參數,輸出報告路徑、報告標題、描述,均可以配 runner = HTMLTestRunner.HTMLTestRunner(stream = fp, title = u‘測試報告‘, description = u‘測試報告內容‘) # 運行測試集合 runner.run(suite)
#練習3:import unittestimport random# 被測試類別class MyClass(object): @classmethod def sum(self, a, b): return a + b @classmethod def div(self, a, b): return a / b @classmethod def retrun_None(self): return None# 單元測試類class MyTest(unittest.TestCase): # assertEqual()方法執行個體 def test_assertEqual(self): # 斷言兩數之和的結果 try: a, b = 1, 2 sum = 3 self.assertEqual(a + b, sum, ‘宣告失敗,%s + %s != %s‘ %(a, b, sum)) except AssertionError, e: print e # assertNotEqual()方法執行個體 def test_assertNotEqual(self): # 斷言兩數之差的結果 try: a, b = 5, 2 res = 1 self.assertNotEqual(a - b, res, ‘宣告失敗,%s - %s != %s‘ %(a, b, res)) except AssertionError, e: print e # assertTrue()方法執行個體 def test_assertTrue(self): # 斷言運算式的為真 try: self.assertTrue(1 == 1, "運算式為假") except AssertionError, e: print e # assertFalse()方法執行個體 def test_assertFalse(self): # 斷言運算式為假 try: self.assertFalse(3 == 2, "運算式為真") except AssertionError, e: print e # assertIs()方法執行個體 def test_assertIs(self): # 斷言兩變數類型屬於同一對象 try: a = 12 b = a self.assertIs(a, b, "%s與%s不屬於同一對象" %(a, b)) except AssertionError, e: print e # test_assertIsNot()方法執行個體 def test_assertIsNot(self): # 斷言兩變數類型不屬於同一對象 try: a = 12 b = "test" self.assertIsNot(a, b, "%s與%s屬於同一對象" %(a, b)) except AssertionError, e: print e # assertIsNone()方法執行個體 def test_assertIsNone(self): # 斷言運算式結果為None try: result = MyClass.retrun_None() self.assertIsNone(result, "not is None") except AssertionError, e: print e # assertIsNotNone()方法執行個體 def test_assertIsNotNone(self): # 斷言運算式結果不為None try: result = MyClass.sum(2, 5) self.assertIsNotNone(result, "is None") except AssertionError, e: print e # assertIn()方法執行個體 def test_assertIn(self): # 斷言對象B是否包含在對象A中 try: strA = "this is a test" strB = "is" self.assertIn(strA, strB, "%s不包含在%s中" %(strB, strA)) except AssertionError, e: print e # assertNotIn()方法執行個體 def test_assertNotIn(self): # 斷言對象B不包含在對象A中 try: strA = "this is a test" strB = "Selenium" self.assertNotIn(strA, strB, "%s包含在%s中" %(strB, strA)) except AssertionError, e: print e # assertIsInstance()方法執行個體 def test_assertIsInstance(self): # 測試對象A的類型是否是指定的類型 try: x = MyClass y = object self.assertIsInstance(x, y, "%s的類型不是%s".decode("utf-8") %(x, y)) except AssertionError, e: print e # assertNotIsInstance()方法執行個體 def test_assertNotIsInstance(self): # 測試對象A的類型不是指定的類型 try: a = 123 b = str self.assertNotIsInstance(a, b, "%s的類型是%s" %(a, b)) except AssertionError, e: print e # assertRaises()方法執行個體 def test_assertRaises(self): # 測試拋出的指定的異常類型 # assertRaises(exception) with self.assertRaises(ValueError) as cm: random.sample([1,2,3,4,5], "j") # 列印詳細的異常資訊 #print "===", cm.exception # assertRaises(exception, callable, *args, **kwds) try: self.assertRaises(ZeroDivisionError, MyClass.div, 3, 0) except ZeroDivisionError, e: print e # assertRaisesRegexp()方法執行個體 def test_assertRaisesRegexp(self): # 測試拋出的指定異常類型,並用Regex具體驗證 # assertRaisesRegexp(exception, regexp) with self.assertRaisesRegexp(ValueError, ‘literal‘) as ar: int("xyz") # 列印詳細的異常資訊 #print ar.exception # 列印Regex #print "re:",ar.expected_regexp # assertRaisesRegexp(exception, regexp, callable, *args, **kwds) try: self.assertRaisesRegexp(ValueError, "invalid literal for.*XYZ‘$",int,‘XYZ‘) except AssertionError, e: print eif __name__ == ‘__main__‘: # 執行單元測試 unittest.main()
【Python】unittest-4