在執行測試用例時,有時候有些用例是不需要執行的,那我們怎么辦呢?難道刪除這些用例?那下次執行時如果又需要執行這些用例時,又把它補回來?這樣操作就太麻煩了。
unittest提供了一些跳過指定用例的方法
- @unittest.skip(reason):強制跳轉。reason是跳轉原因
- @unittest.skipIf(condition, reason):condition為True的時候跳轉
- @unittest.skipUnless(condition, reason):condition為False的時候跳轉
- @unittest.expectedFailure:如果test失敗了,這個test不計入失敗的case數目
# coding = utf-8 import unittest import warnings from selenium import webdriver from time import sleep # 驅動文件路徑 driverfile_path = r'D:\coship\Test_Framework\drivers\IEDriverServer.exe' class CmsLoginTest(unittest.TestCase): def setUp(self): # 這行代碼的作用是忽略一些告警打印 warnings.simplefilter("ignore", ResourceWarning) self.driver = webdriver.Ie(executable_path=driverfile_path) self.driver.get("http://172.21.13.83:28080/") def tearDown(self): self.driver.quit() @unittest.skip("用戶名密碼都為空用例不執行") def test_login1(self): '''用戶名、密碼為空''' self.driver.find_element_by_css_selector("#imageField").click() error_message1 = self.driver.find_element_by_css_selector("[for='loginName']").text error_message2 = self.driver.find_element_by_css_selector("[for='textfield']").text self.assertEqual(error_message1, '用戶名不能為空') self.assertEqual(error_message2, '密碼不能為空') @unittest.skipIf(3 > 2, "3大於2,此用例不執行") def test_login3(self): '''用戶名、密碼正確''' self.driver.find_element_by_css_selector("[name='admin.loginName']").send_keys("autotest") self.driver.find_element_by_css_selector("[name='admin.password']").send_keys("111111") self.driver.find_element_by_css_selector("#imageField").click() sleep(1) self.driver.switch_to.frame("topFrame") username = self.driver.find_element_by_css_selector("#nav_top>ul>li>a").text self.assertEqual(username,"autotest") @unittest.skipUnless(3 < 2,"2沒有大於3,此用例不執行") def test_login2(self): '''用戶名正確,密碼錯誤''' self.driver.find_element_by_css_selector("[name='admin.loginName']").send_keys("autotest") self.driver.find_element_by_css_selector("[name='admin.password']").send_keys("123456") self.driver.find_element_by_css_selector("#imageField").click() error_message = self.driver.find_element_by_css_selector(".errorMessage").text self.assertEqual(error_message, '密碼錯誤,請重新輸入!') @unittest.expectedFailure def test_login4(self): '''用戶名不存在''' self.driver.find_element_by_css_selector("[name='admin.loginName']").send_keys("test007") self.driver.find_element_by_css_selector("[name='admin.password']").send_keys("123456") self.driver.find_element_by_css_selector("#imageField").click() error_message = self.driver.find_element_by_css_selector(".errorMessage").text self.assertEqual(error_message, '用戶名不存在!') def test_login5(self): '''用戶名為空''' self.driver.find_element_by_css_selector("[name='admin.password']").send_keys("123456") self.driver.find_element_by_css_selector("#imageField").click() error_message = self.driver.find_element_by_css_selector("[for='loginName']").text self.assertEqual(error_message, '用戶不存在!') def test_login6(self): '''密碼為空''' self.driver.find_element_by_css_selector("[name='admin.loginName']").send_keys("autotest") self.driver.find_element_by_css_selector("#imageField").click() error_message = self.driver.find_element_by_css_selector("[for='textfield']").text self.assertEqual(error_message, '密碼不能為空') if __name__ == "__main__": unittest.main(verbosity=2)
執行結果:
"C:\Program Files\Python36\python.exe" D:/Git/Test_Framework/utils/cmslogin.py test_login1 (__main__.CmsLoginTest) 用戶名、密碼為空 ... skipped '用戶名密碼都為空用例不執行' test_login2 (__main__.CmsLoginTest) 用戶名正確,密碼錯誤 ... skipped '2沒有大於3,此用例不執行' test_login3 (__main__.CmsLoginTest) 用戶名、密碼正確 ... skipped '3大於2,此用例不執行' test_login4 (__main__.CmsLoginTest) 用戶名不存在 ... expected failure test_login5 (__main__.CmsLoginTest) 用戶名為空 ... FAIL test_login6 (__main__.CmsLoginTest) 密碼為空 ... ok ====================================================================== FAIL: test_login5 (__main__.CmsLoginTest) 用戶名為空 ---------------------------------------------------------------------- Traceback (most recent call last): File "D:/Git/Test_Framework/utils/cmslogin.py", line 71, in test_login5 self.assertEqual(error_message, '用戶不存在!') AssertionError: '用戶名不能為空' != '用戶不存在!' - 用戶名不能為空 + 用戶不存在! ---------------------------------------------------------------------- Ran 6 tests in 32.663s FAILED (failures=1, skipped=3, expected failures=1) Process finished with exit code 1