zoukankan      html  css  js  c++  java
  • (三十九)Unittest单元测试框架之认识unittest-组织单元测试用例

    随笔记录方便自己和同路人查阅。

    #------------------------------------------------我是可耻的分割线-------------------------------------------

      学习selenium自动化之前,最好先学习HTML、CSS、JavaScript等知识,有助于理解定位及操作元素的原理。关于python和selenium安装请自行搜索别的资料,这里就不多做介绍了,所有例子均使用python3.6+selenium执行的。

    #------------------------------------------------我是可耻的分割线-------------------------------------------

    组织单元测试用例

    当我们增加被测功能和相应的测试用例之后,再来看看unittest单元测试框架是如何扩展和组织新增的测试用例的。

    新建文件calculator.py文件

    #计算器
    class Count():
        def __init__(self,a,b):
            self.a = int(a)
            self.b = int(b)
    
        #计算加法
        def add(self):
            return self.a + self.b
    
        # 计算减法
        def add(self):
            return self.a - self.b

    因为对计算器(calculator)又新增了减法功能(sub),所以需要针对新功能编写测试用例,扩展后的test.py文件如下。

    import unittest
    from calculator import Count
    
    class TestAdd(unittest.TestCase):
        def setUp(self):
            print('test add start')
    
        def test_add(self):
            j = Count(2,3)
            self.assertEqual(j.add(),5)
    
        def test_add2(self):
            j = Count(10,5)
            self.assertEqual(j.add(),15)
    
        def tearDown(self):
            print('test add end')
    
    
    class TestSub(unittest.TestCase):
        def setUp(self):
            print('test sub start')
    
        def test_sub(self):
            j = Count(3, 2)
            self.assertEqual(j.sub(), 1)
    
        def test_sub2(self):
            j = Count(10,5)
            self.assertEqual(j.sub(), 5)
    
        def tearDown(self):
            print('test sub end')
    
    #执行测试类的测试方法
    if __name__ == '__main__':
        #构造测试集
        suite = unittest.TestSuite()
        suite.addTest(TestAdd("test_add"))
        suite.addTest(TestAdd("test_add2"))
        suite.addTest(TestSub("test_sub"))
        suite.addTest(TestSub("test_sub2"))
    
        #运行测试集合
        runner = unittest.TextTestRunner()
        runner.run(suite)

    上例中创建了TestAdd()和TestSub()两个测试类,分别测试calculator.py文件中的add()和sub()两个功能。通过TestSuite类的AddTest()方法把不同测试类中的测试方法组装到测试套件中,执行结果如下:

    通过测试结果可以看到,setUp()和tearDown()方法分别作用于每个测试用例的开始与结束。如果每个类中的setUp()和tearDown()所做的事情时一样的,那是不是可以封装一个自己的测试类呢?

    import unittest
    from calculator import Count
    
    class MyTest(unittest.TestCase):
        def setUp(self):
            print('test case start')
    
        def tearDown(self):
            print('test case end')
    
    class TestAdd(MyTest):
    
        def test_add(self):
            j = Count(2,3)
            self.assertEqual(j.add(),5)
    
        def test_add2(self):
            j = Count(10,5)
            self.assertEqual(j.add(),15)
    
    
    class TestSub(MyTest):
        def setUp(self):
            print('test sub start')
    
        def test_sub(self):
            j = Count(3, 2)
            self.assertEqual(j.sub(), 1)
    
        def test_sub2(self):
            j = Count(10,5)
            self.assertEqual(j.sub(), 5)
    
        def tearDown(self):
            print('test sub end')
    
    #执行测试类的测试方法
    if __name__ == '__main__':
        unittest.main()

    运行结果:

    创建MyTest()类的好处显而易见,对于测试类和测试方法来说,应将注意力放在具体用例的编写上,无须关心setUp()和tearDown()所做的事情。不过,前提条件时setUp()和tearDown()所做的事情是每个用例都需要的。

  • 相关阅读:
    de4dot 反混淆
    GreyMagic
    HearthBuddy 第一次调试
    dnSpy
    asp.net form submit 在Chrome里面看Form提交
    关于并发模型 Actor 和 CSP
    Go语言并发机制初探
    CyclicBarrier的工作原理及其实例
    Java并发编程--CyclicBarrier
    CountDownLatch的简单理解
  • 原文地址:https://www.cnblogs.com/lirongyang/p/11505060.html
Copyright © 2011-2022 走看看