最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python unittest裝飾器實現(xiàn)原理及代碼

 更新時間:2020年09月08日 10:09:57   作者:多測師_鄭sir  
這篇文章主要介紹了Python unittest裝飾器實現(xiàn)原理及代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

1、前言

前面講到unittest里面setUp可以在每次執(zhí)行用例前執(zhí)行,這樣有效的減少了代碼量,但是有個弊端,比如打開瀏覽器操作,每次執(zhí)行用例時候都會重新打開,這樣就會浪費很多時間。

于是就想是不是可以只打開一次瀏覽器,執(zhí)行完用例再關閉呢?這就需要用到裝飾器(@classmethod)來解決了。

2、@classmethod 裝飾器中的 setUpClass() 和 tearDownClass() 與 setUp() 和 tearDown() 的區(qū)別

  • setUp():每個測試 case 運行之前運行
  • tearDown():每個測試 case 運行完之后執(zhí)行
  • setUpClass():必須使用 @classmethod 裝飾器, 所有 case 運行之前只運行一次
    • @是修飾符,classmethod 是 python 里的類方法
  • tearDownClass():必須使用 @classmethod 裝飾器, 所有 case 運行完之后只運行一次
import unittest

class Test(unittest.TestCase):

  @classmethod
  def setUpClass(cls) -> None:
    print("-----開始執(zhí)行用例-----")

  def setUp(self) -> None:
    print("執(zhí)行用例準備動作...")
  def test01(self):
    print("第一條用例正在執(zhí)行...")
  def test02(self):
    print("第二條用例正在執(zhí)行...")
  def tearDown(self) -> None:
    print("用例執(zhí)行完結動作...")
    
  @classmethod
  def tearDownClass(cls) -> None:
    print("-----用例執(zhí)行結束-----")
    
if __name__ == '__main__':
  unittest.main()

#執(zhí)行結果如下:
"""
-----開始執(zhí)行用例-----
執(zhí)行用例準備動作...
第一條用例正在執(zhí)行...
用例執(zhí)行完結動作...
執(zhí)行用例準備動作...
第二條用例正在執(zhí)行...
用例執(zhí)行完結動作...
-----用例執(zhí)行結束-----
"""

from selenium import webdriver
import unittest
from time import sleep

class DymLogin(unittest.TestCase):

  @classmethod
  def setUpClass(cls) -> None:
    """
    所有的用例只需要執(zhí)行一次打開瀏覽器操作
    """
    print("Test start...")
    cls.dr = webdriver.Chrome()
    cls.dr.get("http://www.duoyoumi.com/")
    cls.dr.implicitly_wait(10)
    cls.dr.maximize_window()
    cls.dr.find_element_by_class_name("login").click()
    sleep(1)

  @classmethod
  def tearDownClass(cls) -> None:
    sleep(2)
    cls.dr.quit()
    print("Test end...")

  def test_login01(self):
    """
    賬號密碼都為空
    """
    self.dr.find_element_by_name("loginName").clear()
    self.dr.find_element_by_name("loginPwd").clear()
    self.dr.find_element_by_xpath('//*[@id="loginForm"]/div/div/div/div[2]/div[1]/div[2]').click()   #登錄操作
    TipsMsg = self.dr.find_element_by_class_name("promptLogin").text
    self.assertEqual(TipsMsg,"-請輸入登錄賬號!",msg="Test_login01 login exception")

  def test_login02(self):
    """
    賬號正確,密碼為空
    """
    self.dr.find_element_by_name("loginName").clear()
    self.dr.find_element_by_name("loginPwd").clear()
    self.dr.find_element_by_name("loginName").send_keys("17779828887")
    self.dr.find_element_by_xpath('//*[@id="loginForm"]/div/div/div/div[2]/div[1]/div[2]').click() # 登錄操作
    TipsMsg = self.dr.find_element_by_class_name("promptLogin").text
    self.assertEqual(TipsMsg, "-請輸入密碼!", msg="Test_login02 login exception")

  def test_login03(self):
    """
    賬號密碼都正確
    """
    self.dr.find_element_by_name("loginName").clear()
    self.dr.find_element_by_name("loginPwd").clear()
    self.dr.find_element_by_name("loginName").send_keys("17779828887")
    self.dr.find_element_by_name("loginPwd").send_keys("zy295240???")
    self.dr.find_element_by_xpath('//*[@id="loginForm"]/div/div/div/div[2]/div[1]/div[2]').click()   #登錄操作
    sleep(2)
    TipsMsg = self.dr.find_element_by_css_selector("#w_nav_temp_1000 > div.fr.dl > a:nth-child(4)").text
    self.assertEqual(TipsMsg,"[退出]",msg="Test_login03 login exception")

if __name__ == '__main__':
  unittest.main()
#執(zhí)行結果如下
"""
Test start...
...
Test end...
----------------------------------------------------------------------
Ran 3 tests in 25.253s

OK
"""

3、通過裝飾器跳過某條用例

添加裝飾器(@unittest.skip(""))

import unittest

class Test(unittest.TestCase):

  def setUp(self) -> None:
    print("---start---")

  def tearDown(self) -> None:
    print("---end---")

  def testbbb(self):
    print("case testbbb")

  @unittest.skip("testaaa 被跳過")
  def testaaa(self):
    print("case testaaa")

if __name__ == '__main__':
  unittest.main()

# 結果如下
s.
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK (skipped=1)

---start---
case testbbb
---end---

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • python 實現(xiàn)mysql增刪查改示例代碼

    python 實現(xiàn)mysql增刪查改示例代碼

    python中可以通過pymysql實現(xiàn)MySQL數(shù)據(jù)庫的連接,并實現(xiàn)數(shù)據(jù)庫的各種操作,這篇文章主要給大家介紹了關于pymsql實現(xiàn)增刪改查的示例代碼,需要的朋友可以參考下
    2021-11-11
  • python爬蟲教程之bs4解析和xpath解析詳解

    python爬蟲教程之bs4解析和xpath解析詳解

    這篇文章主要給大家介紹了關于python爬蟲教程之bs4解析和xpath解析的相關資料,bs4、xpath比較容易上手但是功能有限,正則比較晦澀難懂但是功能超級強大,需要的朋友可以參考下
    2022-02-02
  • python pytest進階之conftest.py詳解

    python pytest進階之conftest.py詳解

    這篇文章主要介紹了python pytest進階之conftest.py詳解,如果我們在編寫測試用的時候,每一個測試文件里面的用例都需要先登錄后才能完成后面的操作,那么們該如何實現(xiàn)呢?這就需要我們掌握conftest.py文件的使用了,需要的朋友可以參考下
    2019-06-06
  • Python裝飾器知識點補充

    Python裝飾器知識點補充

    本篇文章給大家補充了關于Python裝飾器的相關知識點內容,大家可以跟著學習參考下。
    2018-05-05
  • 10分鐘用python搭建一個超好用的CMDB系統(tǒng)

    10分鐘用python搭建一個超好用的CMDB系統(tǒng)

    這篇文章主要介紹了10分鐘用python搭建一個超好用的CMDB系統(tǒng),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • 詳解使用django-mama-cas快速搭建CAS服務的實現(xiàn)

    詳解使用django-mama-cas快速搭建CAS服務的實現(xiàn)

    這篇文章主要介紹了詳解使用django-mama-cas快速搭建CAS服務的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • 對python實現(xiàn)模板生成腳本的方法詳解

    對python實現(xiàn)模板生成腳本的方法詳解

    今天小編就為大家分享一篇對python實現(xiàn)模板生成腳本的方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python列表insert()函數(shù)用法詳解

    Python列表insert()函數(shù)用法詳解

    這篇文章主要介紹了Python列表insert()函數(shù)的使用方法,文章通過代碼示例介紹的非常詳細,對我們學習或工作有一定的參考價值,需要的朋友可以參考下
    2023-07-07
  • 使用Python和GDAL給圖片加坐標系的實現(xiàn)思路(坐標投影轉換)

    使用Python和GDAL給圖片加坐標系的實現(xiàn)思路(坐標投影轉換)

    這篇文章主要介紹了使用Python和GDAL給圖片加坐標系的實現(xiàn)思路(坐標投影轉換),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Python+Socket實現(xiàn)基于UDP協(xié)議的局域網(wǎng)廣播功能示例

    Python+Socket實現(xiàn)基于UDP協(xié)議的局域網(wǎng)廣播功能示例

    這篇文章主要介紹了Python+Socket實現(xiàn)基于UDP協(xié)議的局域網(wǎng)廣播功能,結合實例形式分析了Python+socket實現(xiàn)UDP協(xié)議廣播的客戶端與服務器端功能相關操作技巧,需要的朋友可以參考下
    2017-08-08

最新評論

凉山| 崇信县| 玛纳斯县| 镇远县| 阳朔县| 泊头市| 教育| 东乡族自治县| 丁青县| 东安县| 和顺县| 盐亭县| 澜沧| 桑日县| 合作市| 永顺县| 元阳县| 泾阳县| 汉源县| 阿尔山市| 南阳市| 云林县| 卓资县| 娱乐| 长顺县| 临夏市| 廉江市| 拜泉县| 六枝特区| 栾川县| 丹巴县| 鸡西市| 磐安县| 库车县| 石屏县| 灵宝市| 科尔| 万盛区| 太仆寺旗| 织金县| 灵武市|