• Python+selenium 【第七章】Unittest学习


    • Python+selenium 【第七章】Unittest学习
      unittest是python内置的单元测试框架,具备编写用例、组织用例、执行用例、功能,可以结合selenium进行UI自动化测试,也可以结合appium、requests等模块做其它自动化测试。
    使用unittest前需要熟悉该框架的五个概念:
      testcase,testsuite,testLoader,testrunner,testfixture。
      
    1. testcase:一个完整的测试单元,执行该测试单元可以完成对某一个问题的验证,完整体现在测试前环境准备(setUp),执行测试代码(run),以及测试后环境还原(tearDown);
    2. testsuite:多个测试用例的集合,测试套件或测试计划;
    3. testLoader:加载TestCase到TestSuite中的,其中loadTestsFrom__()方法用于寻找TestCase,并创建它们的实例,然后添加到TestSuite中,返回TestSuite实例;
    4. testrunner:执行测试用例,并将测试结果保存到TextTestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息;
    5. testfixture:一个测试用例的初始化准备及环境还原,主要是setUp()和setDown()方法
     

    unittest基本使用步骤:

    • a)用import语句引入unittest模块
    • b)让所有执行测试的类都继承于TestCase类,可以将TestCase看成是对特定类进行测试的方法的集合
    • c)setUp()方法中进行测试前的初始化工作,teardown()方法中执行测试后的清除工作,它们都是TestCase中的方法
    • d)编写测试的方法最好以test开头(可以直接运行)deftest_add(self)、deftest_sub(self)等,可以编写多个测试用例对被测对象进行测试
    • e)在编写测试方法过程中,使用TestCaseclass提供的方法测试功能点,比如:assertEqual等
    • f)调用unittest.main()方法运行所有以test开头的方法
     
     

    unittest常用断言介绍:

    断言即进行预期结果和实际结果比对。

    assertEqual(a,b)  a==b  #是否相等

    assertNotEqual(a,b)  a!=b  #是否不相等

    assertTrue(x)    bool(x) is True #是否为True

    assertFalse(x)   bool(x) is False #是否为False

    assertIn(a,b)     a  in b #是否包含

    assertGreater(a,b)  a>b  #大于

    assertGreaterEqual(a,b)  a >= b #大于等于

    assertLess(a,b)  a<b#小于

    assertLessEqual(a,b)  a<=b #小于等于

    可以在断言最后一个参数中加入自定义的测试失败信息,如:

    assertEqual(10,20,”10!=20测试失败”) 当断言失败时,显示该消息。

     
    • 代码示例
     
    • unittest_demo_14.py
    # -*- coding: utf-8 -*-
    # @Time : 2021/12/30 14:24
    # @Author : Limusen
    # @File : unittest_demo_14
    
    
    import unittest
    
    class TestCase01(unittest.TestCase):
    
        def setUp(self) -> None:
            print("执行前置")
    
        def tearDown(self) -> None:
            print("执行后置信息")
    
        def test_case01(self):
            '''加法'''
            self.assertEqual(1 + 2, 3)
    
        def test_case02(self):
            self.assertEqual(1 + 2, 2)
    
    
    if __name__ == "__main__":
        TestCase01().test_case01()
    • 代码示例

    unittest_demo_15.py

    # -*- coding: utf-8 -*-
    # @Time : 2021/12/30 14:35
    # @Author : Limusen
    # @File : unittest_demo_15
    
    #  断言练习
    
    import time
    import unittest
    
    
    class TestCase02(unittest.TestCase):
    
        def setUp(self) -> None:
            # print("执行前置")
            pass
    
        def tearDown(self) -> None:
            # print("执行后置信息")
            pass
    
        def test_case01(self):
            a = 1 == 1
            self.assertTrue(a, '断言失败,不是True')
    
        # def test_case02(self):
        #     a =1 ==3
        #     self.assertTrue(a,'断言失败,不是True')
    
        def test_case03(self):
            str = "你有梦想吗"
            self.assertTrue(str.__contains__("梦想"))
    
        def test_case04(self):
            name = ['张三', '李四', '王五']
            self.assertIn('李四', name)
            print("范围测试")
    
        def test_case05(self):
            self.assertIsInstance('lishou', str)
            print("类型判定")
    
    
    if __name__ == "__main__":
        unittest.main()
    • 改变代码执行顺序

    demo_unittest_15.py

    # -*- coding: utf-8 -*-
    # @Time : 2021/12/30 14:35
    # @Author : Limusen
    # @File : unittest_demo_15
    
    
    import unittest
    
    
    class TestCase03(unittest.TestCase):
    
        def test_case01_aaa(self):
            print("执行用例:test_aaa")
    
        def test_case02_ddd(self):
            print("执行用例:test_ddd")
    
        def test_case03_ccc(self):
            print("执行用例:test_ccc")
    
        def test_case04_bbb(self):
            print("执行用例:test_bbb")
    
    
    if __name__ == "__main__":
        # unittest.main()
    
        # # 改变执行顺序方法
        # suite = unittest.TestSuite()
        # suite.addTest(TestCase03('test_bbb'))
        # suite.addTest(TestCase03('test_ccc'))
        # unittest.main(defaultTest='suite')
        pass
    
        # 改名字 test_case04_bbb
        unittest.main()
    • 是否跳过用例
    # -*- coding: utf-8 -*-
    # @Time : 2021/12/30 14:35
    # @Author : Limusen
    # @File : unittest_demo_15
    
    
    import unittest
    
    
    class TestCase04(unittest.TestCase):
    
        def test_case01(self):
            print("正在运算test_case01")
            self.assertEqual(3 + 4, 7, "求和失败")
    
        @unittest.skip("无条件跳过")
        def test_case02(self):
            print("正在运算test_case02")
            self.assertEqual(4 + 4, 8, "求和失败")
    
        @unittest.skipIf(True, '条件为真跳过')
        def test_case03(self):
            print("正在运算test_case03")
            self.assertEqual(4 + 4, 8, "求和失败")
    
        @unittest.skipIf(False, '条件为假不跳过')
        def test_case04(self):
            print("正在运算test_case04")
            self.assertEqual(4 + 4, 9, "求和失败")
    
        @unittest.skipUnless(False, '条件为假跳过')
        def test_case05(self):
            print("正在运算test_case05")
            self.assertEqual(4 + 4, 9, "求和失败")
    
        @unittest.expectedFailure  # 失败不记录失败数量
        def test_case06(self):
            print("正在运算test_case06")
            self.assertEqual(4 + 4, 9, "求和失败")
    
        @unittest.expectedFailure
        def test_case07(self):
            print("正在运算test_case07")
            self.assertEqual(4 + 4, 9, "求和失败")
    
    
    if __name__ == "__main__":
        unittest.main()
    • 收集用例进行运行
    # -*- coding: utf-8 -*-
    # @Time : 2021/12/30 14:35
    # @Author : Limusen
    # @File : unittest_demo_15
    
    
    
    import unittest
    
    
    class TestCase05(unittest.TestCase):
    
        def test_case01(self):
            print("正在运算test_case01")
            self.assertEqual(3 + 4, 7, "求和失败")
    
        @unittest.skip("无条件跳过")
        def test_case02(self):
            print("正在运算test_case02")
            self.assertEqual(4 + 4, 8, "求和失败")
    
        @unittest.skipIf(True, '条件为真跳过')
        def test_case03(self):
            print("正在运算test_case03")
            self.assertEqual(4 + 4, 8, "求和失败")
    
        @unittest.skipIf(False, '条件为假不跳过')
        def test_case04(self):
            print("正在运算test_case04")
            self.assertEqual(4 + 4, 9, "求和失败")
    
        @unittest.skipUnless(False, '条件为假跳过')
        def test_case05(self):
            print("正在运算test_case05")
            self.assertEqual(4 + 4, 9, "求和失败")
    
        @unittest.expectedFailure  # 失败不记录失败数量
        def test_case06(self):
            print("正在运算test_case06")
            self.assertEqual(4 + 4, 9, "求和失败")
    
        @unittest.expectedFailure
        def test_case07(self):
            print("正在运算test_case07")
            self.assertEqual(4 + 4, 9, "求和失败")
    
    
    if __name__ == "__main__":
        testsuite = unittest.TestSuite(unittest.makeSuite(TestCase05))
        unittest.main(defaultTest='testsuite')
    • 执行
    # -*- coding: utf-8 -*-
    # @Time : 2021/12/30 14:35
    # @Author : Limusen
    # @File : unittest_demo_19
    
    import unittest
    
    
    class TestCase06(unittest.TestCase):
    
        def test_case01(self):
            print("正在运算test_case01")
            self.assertEqual(3 + 4, 7, "求和失败")
    
        @unittest.skip("无条件跳过")
        def test_case02(self):
            '''无条件跳过'''
            print("正在运算test_case02")
            self.assertEqual(4 + 4, 8, "求和失败")
    
        @unittest.skipIf(True, '条件为真跳过')
        def test_case03(self):
            '''条件为真跳过'''
            print("正在运算test_case03")
            self.assertEqual(4 + 4, 8, "求和失败")
    
        # @unittest.skipIf(False, '条件为假不跳过')
        @unittest.skip("无条件跳过")
        def test_case04(self):
            '''无条件跳过'''
            print("正在运算test_case04")
            self.assertEqual(4 + 4, 9, "求和失败")
    
        @unittest.skipUnless(False, '条件为假跳过')
        def test_case05(self):
            '''条件为假跳过'''
            print("正在运算test_case05")
            self.assertEqual(4 + 4, 9, "求和失败")
    
        @unittest.expectedFailure  # 失败不记录失败数量
        def test_case06(self):
            print("正在运算test_case06")
            self.assertEqual(4 + 4, 9, "求和失败")
    
        @unittest.expectedFailure
        def test_case07(self):
            print("正在运算test_case07")
            self.assertEqual(4 + 4, 9, "求和失败")
    
    
    if __name__ == "__main__":
        # # 方法一:加载测试类下面的所有用例
        # suite01 = unittest.TestLoader().loadTestsFromTestCase(TestCase06)
        # unittest.main(defaultTest='suite01')
        #
        # # 方法二:加载测试模块下面的所有用例
        # #  先导入模块 自己
        # suite02 = unittest.TestLoader().loadTestsFromModule(test_case6)
        # unittest.main(defaultTest="suite02")
        #
        # # 方法三:使用字符串的方式加载用例
        # suite03 = unittest.TestLoader().loadTestsFromName('test_case6.TestCase06.test_case01')
        # # 整个模块
        # suite04 = unittest.TestLoader().loadTestsFromName('test_case6.TestCase06')
        # suite05 = unittest.TestLoader().loadTestsFromName('test_case6')
        #
        # # 单个加载全部测试用例
        # all_suite = unittest.TestSuite()
        # all_suite.addTests(suite01)
        # all_suite.addTests(suite02)
        # all_suite.addTests(suite03)
        # all_suite.addTests(suite04)
        # all_suite.addTests(suite05)
        pass
  • 相关阅读:
    面试经验
    二叉树和递归
    优先队列
    队列问题
    书法学习资料
    栈的问题
    Git常用命令
    字母大小写转换
    深入类中的方法[8] - 抽象方法与抽象类
    深入类中的方法[7] - 关于 inherited
  • 原文地址:https://www.cnblogs.com/yushengaqingzhijiao/p/15748729.html
Copyright © 2020-2023  润新知