zoukankan      html  css  js  c++  java
  • Selenium实战(四)——unittest单元测试2(断言方法+discover()多测试用例的执行)

    一、断言方法

    方法

    检查 版本
    assertEqual(a,b) a==b  
    assertNotEqual(a,b) a!=b  
    assertTrue(x) bool(x) is True  
    assertFalse(x) bool(x) is False  
    assertIs(a,b) a is b 3.1
    assertIsNot(a,b) a is not b 3.1
    assertIsNone(x) x is None 3.1
    assertIsNotNone(x) x is not None 3.1
    assertIn(a,b) a in b 3.1
    assertNotIn(a,b) a not in b 3.1
    assertIsInstance(a,b) isinstance(a,b) 3.2
    assertNotIsInstance(a,b) not isinstance(a,b) 3.2
     1 import unittest
     2 
     3 
     4 class TestAssert(unittest.TestCase):
     5 
     6     def test_equal(self):
     7         self.assertEqual(2+2, 4)
     8         self.assertEqual("python", "python")
     9         self.assertNotEqual("hello", "python")
    10 
    11     def test_in(self):
    12         self.assertIn("hello", "hello world")
    13         self.assertNotIn("hi", "hello")
    14 
    15     def test_true(self):
    16         self.assertTrue(True)
    17         self.assertFalse(False)
    18 
    19 
    20 if __name__ == '__main__':
    21     unittest.main()

     二、测试用例的组织与discover()方法

      要执行多个不同文件下的测试用例,可以使用unittest中的TestLoader类提供的discover()方法查找要用到的测试用例。该类根据各种标准加载测试用例,并将它们返回给测试套件。正常情况下,不需要创建这个类的实例。unittest提供了可以共享的defaultTestLoader类,可以使用其子类或方法创建实例,discover()方法就是其中之一。

      discover(start_dir, pattern='test*.py', top_level_dir=None)

       找到指定目录及其子目录下的所有测试模块,只有匹配的文件名才能被加载。如果启动的不是顶层目录,那么顶层目录必须单独指定。

    • start_dir:待测试的模块名或测试用例目录。
    • pattern='test*.py':测试用例文件名的匹配原则。
    • top_level_dir=None:测试模块的顶层目录,如果没有顶层目录,则默认为None

      一个单元测试的文件目录如下:

     两个不相关的判断闰年功能(leap_year.py)和计算器功能(calculator.py)的代码文件分别对应两个测试文件,calculator.py:

     1 # 计算器类
     2 class Calculator:
     3     def __init__(self, a, b):
     4         self.a = int(a)
     5         self.b = int(b)
     6 
     7     def add(self):
     8         return self.a + self.b
     9 
    10     def sub(self):
    11         return self.a - self.b
    12 
    13     def mul(self):
    14         return self.a * self.b
    15 
    16     def div(self):
    17         return self.a / self.b

    test_calculator.py文件:

     1 import unittest
     2 
     3 
     4 class TestAssert(unittest.TestCase):
     5 
     6     def test_equal(self):
     7         self.assertEqual(2+2, 4)
     8         self.assertEqual("python", "python")
     9         self.assertNotEqual("hello", "python")
    10 
    11     def test_in(self):
    12         self.assertIn("hello", "hello world")
    13         self.assertNotIn("hi", "hello")
    14 
    15     def test_true(self):
    16         self.assertTrue(True)
    17         self.assertFalse(False)
    18 
    19 
    20 if __name__ == '__main__':
    21     unittest.main()

    leap_year.py文件:

     1 class LeapYear:
     2 
     3     def __init__(self, year):
     4         self.year = int(year)
     5 
     6     def answer(self):
     7         year = self.year
     8         if year % 100 == 0:
     9             if year % 400 == 0:
    10                 # 整百年能被400整除的是闰年
    11                 return "{0}是闰年".format(year)
    12             else:
    13                 return "{0}不是闰年".format(year)
    14         else:
    15             if year % 4 == 0:
    16                 # 非整百年能被4整除的是闰年
    17                 return "{0}是闰年".format(year)
    18             else:
    19                 return "{0}不是闰年".format(year)

    test_leap_year.py文件:

     1 import unittest
     2 
     3 from files.unit_test.leap_year import LeapYear
     4 
     5 
     6 class TestLeapYear(unittest.TestCase):
     7     def test_2000(self):
     8         ly = LeapYear(2000)
     9         self.assertEqual(ly.answer(), "2000是闰年")
    10 
    11     def test_2004(self):
    12         ly = LeapYear(2004)
    13         self.assertEqual(ly.answer(), "2004是闰年")
    14 
    15     def test_2017(self):
    16         ly = LeapYear(2017)
    17         self.assertEqual(ly.answer(), "2017不是闰年")
    18 
    19     def test_2100(self):
    20         ly = LeapYear(2100)
    21         self.assertEqual(ly.answer(), "2100不是闰年")
    22 
    23 
    24 if __name__ == '__main__':
    25     unittest.main()

    最后,用一个执行文件对这两个测试文件进行执行run_tests.py文件:

    1 import unittest
    2 
    3 # 定义测试用例的目录为当前目录中的unit_test
    4 test_dir = './'
    5 suits = unittest.defaultTestLoader.discover(test_dir, pattern='test*.py')
    6 if __name__ == '__main__':
    7     runner = unittest.TextTestRunner()
    8     runner.run(suits)

    discover()方法会自动根据测试用例目录(unit_test下)查找测试用例文件(test*.py),并将找到的测试用例添加到测试套件中,因此,可以直接通过run()方法执行测试套件suits.这种方式极大地简化了测试用例的查找,我们需要做的是按照文件的匹配规则创建测试文件即可。

  • 相关阅读:
    Xcode 构建规则
    创建带阴影,有圆角的UIView的正确方式
    EffectiveC#12,13,14--成员初始化
    EffectiveC#11--选择foreach循环
    EffectiveC#9--明白几个相等运算之间的关系
    EffectiveC#8--确保0对于值类型数据是有效的(初始化问题)
    NET基础课--泛型(NET之美)
    NET基础课-- 类型基础(NET之美)
    EffectiveC#7--选择恒定的原子值类型数据
    EffectiveC#6--区别值类型数据和引用类型数据
  • 原文地址:https://www.cnblogs.com/pegawayatstudying/p/12176611.html
Copyright © 2011-2022 走看看