unittest详解 引入装饰器@classmethod

Posted eastonliu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unittest详解 引入装饰器@classmethod相关的知识,希望对你有一定的参考价值。

我们知道setUp()和setDown()的作用是在每条测试用例执行前准备测试环境以及用例测试结束后恢复测试环境,如果我们执行的测试类下所有测试用例的环境准备和环境复原的操作都是一样的,那么我们就没必要每条测试用例执行前都执行一次setUp()和setDown()的操作。在运行测试类前只执行一次环境的准备,测试类运行结束后只执行一次环境复原的操作,这时我们就可以引入装饰器@classmethod

代码:

# coding = utf-8
import unittest
import warnings
from selenium import webdriver
from time import sleep
# 驱动文件路径
driverfile_path = rD:\coship\Test_Framework\drivers\IEDriverServer.exe

class CmsLoginTest(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        print("test start!")
        # 这行代码的作用是忽略一些告警打印
        warnings.simplefilter("ignore", ResourceWarning)
        cls.driver = webdriver.Ie(executable_path=driverfile_path)
        cls.driver.get("http://172.21.13.83:28080/")

    @classmethod
    def tearDownClass(cls):
        cls.driver.quit()
        print("test end!")

    def test_login1(self):
        ‘‘‘用户名、密码为空‘‘‘
        self.driver.find_element_by_css_selector("[name=‘admin.loginName‘]").clear()
        self.driver.find_element_by_css_selector("[name=‘admin.password‘]").clear()
        self.driver.find_element_by_css_selector("#imageField").click()
        error_message1 = self.driver.find_element_by_css_selector("[for=‘loginName‘]").text
        error_message2 = self.driver.find_element_by_css_selector("[for=‘textfield‘]").text
        self.assertEqual(error_message1, 用户名不能为空)
        self.assertEqual(error_message2, 密码不能为空)


    def test_login2(self):
        ‘‘‘用户名正确,密码错误‘‘‘
        self.driver.find_element_by_css_selector("[name=‘admin.loginName‘]").clear()
        self.driver.find_element_by_css_selector("[name=‘admin.password‘]").clear()
        self.driver.find_element_by_css_selector("[name=‘admin.loginName‘]").send_keys("autotest")
        self.driver.find_element_by_css_selector("[name=‘admin.password‘]").send_keys("123456")
        self.driver.find_element_by_css_selector("#imageField").click()
        error_message = self.driver.find_element_by_css_selector(".errorMessage").text
        self.assertEqual(error_message, 密码错误,请重新输入!)

    def test_login3(self):
        ‘‘‘用户名不存在‘‘‘
        self.driver.find_element_by_css_selector("[name=‘admin.loginName‘]").clear()
        self.driver.find_element_by_css_selector("[name=‘admin.password‘]").clear()
        self.driver.find_element_by_css_selector("[name=‘admin.loginName‘]").send_keys("test007")
        self.driver.find_element_by_css_selector("[name=‘admin.password‘]").send_keys("123456")
        self.driver.find_element_by_css_selector("#imageField").click()
        error_message = self.driver.find_element_by_css_selector(".errorMessage").text
        self.assertEqual(error_message, 用户不存在!)

    def test_login4(self):
        ‘‘‘用户名、密码正确‘‘‘
        self.driver.find_element_by_css_selector("[name=‘admin.loginName‘]").clear()
        self.driver.find_element_by_css_selector("[name=‘admin.password‘]").clear()
        self.driver.find_element_by_css_selector("[name=‘admin.loginName‘]").send_keys("autotest")
        self.driver.find_element_by_css_selector("[name=‘admin.password‘]").send_keys("111111")
        self.driver.find_element_by_css_selector("#imageField").click()
        sleep(1)
        self.driver.switch_to.frame("topFrame")
        username = self.driver.find_element_by_css_selector("#nav_top>ul>li>a").text
        self.assertEqual(username,"autotest")


if __name__ == "__main__":
    unittest.main(verbosity=2)

执行结果:

"C:\Program Files\Python36\python.exe" D:/Git/Test_Framework/test_case/test_cmslogin.py
test start!
test_login1 (__main__.CmsLoginTest)
用户名、密码为空 ... ok
test_login2 (__main__.CmsLoginTest)
用户名正确,密码错误 ... ok
test_login3 (__main__.CmsLoginTest)
用户名不存在 ... ok
test_login4 (__main__.CmsLoginTest)
用户名、密码正确 ... ok
test end!

----------------------------------------------------------------------
Ran 4 tests in 22.462s

OK

Process finished with exit code 0

从执行结果中可以看到,整个测试类的运行过程中,只执行了一次setUpClass()和tearDownClass()

以上是关于unittest详解 引入装饰器@classmethod的主要内容,如果未能解决你的问题,请参考以下文章

unittest测试框架_4_装饰器

Python3+selenium-unittest之装饰器(@classmethod)

如何在 unittest 中的 setUpClass 上设置条件装饰器?

python+selenium+unittest测试框架2-装饰器@classmethod

python unittest框架装饰器

Selenium2+python-unittest之装饰器(@classmethod)