激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python unittest裝飾器實現原理及代碼

Python unittest裝飾器實現原理及代碼

2020-09-09 00:00多測師_鄭sir Python

這篇文章主要介紹了Python unittest裝飾器實現原理及代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

1、前言

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

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

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

  • setUp():每個測試 case 運行之前運行
  • tearDown():每個測試 case 運行完之后執行
  • setUpClass():必須使用 @classmethod 裝飾器, 所有 case 運行之前只運行一次
    • @是修飾符,classmethod 是 python 里的類方法
  • tearDownClass():必須使用 @classmethod 裝飾器, 所有 case 運行完之后只運行一次
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import unittest
 
class Test(unittest.TestCase):
 
  @classmethod
  def setUpClass(cls) -> None:
    print("-----開始執行用例-----")
 
  def setUp(self) -> None:
    print("執行用例準備動作...")
  def test01(self):
    print("第一條用例正在執行...")
  def test02(self):
    print("第二條用例正在執行...")
  def tearDown(self) -> None:
    print("用例執行完結動作...")
    
  @classmethod
  def tearDownClass(cls) -> None:
    print("-----用例執行結束-----")
    
if __name__ == '__main__':
  unittest.main()
 
#執行結果如下:
"""
-----開始執行用例-----
執行用例準備動作...
第一條用例正在執行...
用例執行完結動作...
執行用例準備動作...
第二條用例正在執行...
用例執行完結動作...
-----用例執行結束-----
"""

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
from selenium import webdriver
import unittest
from time import sleep
 
class DymLogin(unittest.TestCase):
 
  @classmethod
  def setUpClass(cls) -> None:
    """
    所有的用例只需要執行一次打開瀏覽器操作
    """
    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()
#執行結果如下
"""
Test start...
...
Test end...
----------------------------------------------------------------------
Ran 3 tests in 25.253s
 
OK
"""

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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---

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

原文鏈接:https://www.cnblogs.com/ZhengYing0813/p/12343875.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美亚洲一区二区三区四区 | 欧美一级免费视频 | 久久国产精 | 成人羞羞视频在线观看免费 | 日韩视频二区 | china对白普通话xxxx | 羞羞视频免费入口网站 | 成年人黄色片视频 | 免费看国产视频 | 黄色视屏免费看 | 久久久久久中文字幕 | 久久久久久99 | 精品国产一区二区在线 | 欧美一级毛片免费观看视频 | 99麻豆久久久国产精品免费 | 黄色网页在线观看 | 日本精品久久久一区二区三区 | 在线成人免费观看www | 一级片a| 日韩大片在线永久观看视频网站免费 | 亚洲生活片 | 欧美精品黄色 | 欧美a视频 | 牛牛a级毛片在线播放 | 欧美国产精品一区二区 | 成人福利视频导航 | 中文字幕在线观看视频一区 | 国产91精品久久久久久久 | 午夜精品老牛av一区二区三区 | 久久艹艹艹 | 欧美一级做一级爱a做片性 91在线视频观看 | 女人裸体让男人桶全过程 | 日韩精品久久久久久久电影99爱 | h视频在线免费看 | av在线免费看网址 | 免费国产一区二区视频 | 国产精品久久久久久238 | hd极品free性xxx一护士 | 91高清完整版在线观看 | 欧美特黄a | 一级大黄毛片免费观看 |