Web自動化測試:測試用例斷言


運行測試用例時,需要判斷用例是否執行成功,此時需要有一個我們期望的結果來進行驗證。這里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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM