unittest初识

作者: summer_1a77 | 来源:发表于2019-03-31 16:46 被阅读0次

    unittest是python内置的一个单元测试框架,在学习怎么使用它之前,我们先来了解它的一些概念和原理。

    Test Case:测试用例,一个TestCase的实例就是一个测试用例。什么是测试用例呢?就是一个完整的测试流程,包括测试前准备环境的搭建(setUp),执行测试代码(run),以及测试后环境的还原(tearDown)。单元测试(unit test)的本质也就在这里,一个测试用例是一个完整的测试单元,通过运行这个测试单元,可以对某一个问题进行验证。

    Test Suite:测试套件,就是多个测试用例集合在一起

    Test Runner:测试执行,用来执行测试用例,其中的run(test)会执行TestSuite/TestCase

    Test Fixture:对一个测试用例环境的搭建和销毁,是一个fixture,通过覆盖TestCase的setUp()和tearDown()方法来实现。这个有什么用呢?比如说在这个测试用例中需要访问数据库,那么可以在setUp()中建立数据库连接以及进行一些初始化,在tearDown()中清除在数据库中产生的数据,然后关闭连接。注意tearDown的过程很重要,要为以后的TestCase留下一个干净的环境。】

    先看一下unittest基本框架

    import unittest

    class TestMethod(unittest.TestCase):

    @classmethod    #解释器

        def setUpClass(cls):

    print("类执行之前的方法=====================get==================================")

    @classmethod

        def tearDownClass(cls):

    print("类执行之后的方法===========================close=========================")

    #每次方法之前执行

        def setUP(self):

    print('test---->setup先决条件---------------------setup-------------------')

    #每次方法之后执行

        def tearDown(self):

    print('test---->tearDown最后执行-----------------tearDown--------------')

    def test_01(self):

    print("这是第一个测试方法---------------------test_01-------------------")

    def test_02(self):

    print("这是第2个测试方法-----------------test_02--------------------")

    if __name__ =='__main__':

    unittest.main()

    了解了概念后,我们来看一个登陆的测试脚本。

    # coding = utf-8

    import unittest

    import warnings

    from selenium import webdriver

    from time import sleep

    # 驱动文件路径

    driverfile_path = r'D:\coship\Test_Framework\drivers\IEDriverServer.exe'

    class CmsLoginTest(unittest.TestCase):

        def setUp(self):

            # 这行代码的作用是忽略一些告警打印

            warnings.simplefilter("ignore", ResourceWarning)

            print("test start!")

            self.driver = webdriver.Ie(executable_path=driverfile_path)

            self.driver.get("http://172.21.13.83:28080/")

        def tearDown(self):

            self.driver.quit()

            print("test end!")

        def test_login1(self):

            '''用户名、密码为空'''

            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, '密码不能为空')

            print("用例test_login1执行结束")

        def test_login3(self):

            '''用户名、密码正确'''

            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")

            print("用例test_login3执行结束")

        def test_login2(self):

            '''用户名正确,密码错误'''

            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, '密码错误,请重新输入!')

            print("用例test_login2执行结束")

        def login4(self):

            '''用户名不存在'''

            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, '用户不存在!')

            print("用例login4执行结束")

    if __name__ == "__main__":

        unittest.main()

    "C:\Program Files\Python36\python.exe" D:/Git/Test_Framework/utils/1.py

    test start!

    用例test_login1执行结束

    .test end!

    test start!

    用例test_login2执行结束

    .test end!

    test start!

    用例test_login3执行结束

    test end!

    .

    ----------------------------------------------------------------------

    Ran 3 tests in 34.044s

    OK

    Process finished with exit code 0

    从脚本和运行结果我们可以得到以下结论:

    要使用unittest这个测试框架时,需要先导入unittest

    定义一个测试类时,要继承unittest.TestCase这个类

    setUp()是测试用例执行前的环境准备,tearDown()是测试用例执行结束后的环境恢复,每个测试用例都会执行一次setUp()和tearDown()

    测试用例必须以test开头,否则不会被执行。

    测试用例执行顺序是根据用例名称顺序来执行的

    本文转载https://www.cnblogs.com/feng0815/p/8045850.html

    相关文章

      网友评论

        本文标题:unittest初识

        本文链接:https://www.haomeiwen.com/subject/irrubqtx.html