Selenium实战(四)——unittest单元测试2(断言方法+discover()多测试用例的执行)

时间:2020-01-14
本文章向大家介绍Selenium实战(四)——unittest单元测试2(断言方法+discover()多测试用例的执行),主要包括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.这种方式极大地简化了测试用例的查找,我们需要做的是按照文件的匹配规则创建测试文件即可。

$flag 上一页 下一页