運行測試用例時,需要判斷用例是否執行成功,此時需要有一個我們期望的結果來進行驗證。這里unittest中,如果一個case執行的過程中報錯,或者我們判斷結果不符合期望,就會判定此條用例執行失敗,判斷的條件主要是根據斷言來實現,這節主要學習下斷言的使用。
一、斷言的方法
1.1 TestCase類中的部分斷言方法
判斷條件是否成立
assert_(expr,msg)
- expr:判斷條件,返回Boolean值
- msg:判斷失敗后顯示的信息
判斷兩個數據的值是否相同
assertEqual(first,second,msg)
- first:第一個數據
- second:第二個數據
- msg:判斷失敗后顯示的信息
判斷兩個數據的值是否不相同
assertEqual(first,second,msg)
- first:第一個數據
- second:第二個數據
- msg:判斷失敗后顯示的信息
判斷條件是否為真
assertTrue(expr,msg)
- expr:判斷條件
- msg:判斷失敗后顯示的信息
判斷條件是否為假
assertFalse(expr,msg)
- expr:判斷條件
- msg:判斷失敗后顯示的信息
判斷兩個數據是否相同
assertIs(first,second,msg)
- first:第一個數據
- second:第二個數據
- msg:判斷失敗后顯示的信息
判斷兩個數據是否不相同
assertIsNot(first,second,msg)
- first:第一個數據
- second:第二個數據
- msg:判斷失敗后顯示的信息
判斷數據是否存在
assertIsNone(obj,msg)
- obj:所傳的數據
- msg:判斷失敗后顯示的信息
判斷數據是否不存在
assertIsNotNone(obj,msg)
- obj:所傳的數據
- msg:判斷失敗后顯示的信息
判斷數據a是否包含在數據b中
assertIn(a,b,msg)
- a:數據a
- b:數據b
- msg:判斷失敗后顯示的信息
判斷數據a是否不包含在數據b中
assertNotIn(a,b,msg)
- a:數據a
- b:數據b
- msg:判斷失敗后顯示的信息
1.2 直接使用assert斷言
習慣直接使用python中的assert斷言,替代unittest.TestCase中的斷言方法:
具體可以直接使用:
assert a == b
assert a != b
assert a in b
assert a not in b
assert a in None
assert a in not None
二、在框架中使用斷言
由於在使用unittest中,每個類都繼承了unittest.TestCase,所以使用時,直接在方法里使用self來調用斷言方法。
import unittest
class Demo(unittest.TestCase):
def test_01(self):
self.assertEqual("demo","demo","兩者不相等")
如果直接使用assert斷言,則可以直接調用。
import unittest
class Demo(unittest.TestCase):
def test_01(self):
assert "demo" == "demo"
三、實例演示
這里使用百度貼吧的例子,第一個case是打開新頁面,然后判斷新頁面的title是否是我們期望的,第二個case則是我們故意判斷一個錯誤的title,使得斷言失敗,這兩個case也分別使用上述的兩種斷言方法。
# -*- coding:utf-8 -*-
from selenium import webdriver
import unittest
from time import sleep
class PcLogin(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("所有測試開始")
def setUp(self):
print("測試開始")
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(30)
self.driver.set_page_load_timeout(30)
self.driver.get("https://tieba.baidu.com/")
def test_01_demo(self):
"""打開新頁簽"""
self.driver.find_element_by_css_selector("a[title = '娛樂明星']").click()
all = self.driver.window_handles
self.driver.switch_to.window(all[1])
sleep(5)
assert self.driver.title == "娛樂明星_百度貼吧", "斷言失敗,當前頁面title是%s " % self.driver.title
def test_02_demo2(self):
"""判斷首頁標題"""
# 這個例子會斷言失敗
self.assertEqual(self.driver.title, "娛樂明星_百度貼吧")
def tearDown(self):
print("測試完成")
self.driver.close()
@classmethod
def tearDownClass(cls):
print("所有測試結束")
if __name__ == '__main__':
unittest.main()
運行結果:(運行了兩條用例,其中失敗了一條;符合我們預期的結果)
所有測試開始
測試開始
測試完成
.測試開始
測試完成
F
======================================================================
FAIL: test_02_demo2 (__main__.PcLogin)
判斷首頁標題
所有測試結束
----------------------------------------------------------------------
Traceback (most recent call last):
File "D:/1git/uitest/test_case/demo.py", line 30, in test_02_demo2
self.assertEqual(self.driver.title, "娛樂明星_百度貼吧")
AssertionError: '百度貼吧——全球最大的中文社區' != '娛樂明星_百度貼吧'
- 百度貼吧——全球最大的中文社區
+ 娛樂明星_百度貼吧
----------------------------------------------------------------------
Ran 2 tests in 35.273s
FAILED (failures=1)
Process finished with exit code 1