gpt4 book ai didi

Python unittest装饰器实现原理及代码

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章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 。

最后此篇关于Python unittest装饰器实现原理及代码的文章就讲到这里了,如果你想了解更多关于Python unittest装饰器实现原理及代码的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com