selenium

以下三种方法:

  • main()方法,执行当前文件中所有用例
  • TestSuite的addTest()方法,加载指定的测试用例
  • defaultTestLoader的discover()方法,加载指定目录下的指定文件

下面分别举例说明:

待测文件:

 1 class Count:
 2     def __init__(self, a, b):
 3         self.a = a
 4         self.b = b
 5 
 6     def add(self):
 7         return self.a + self.b
 8 
 9     def sub(self):
10         return self.a - self.b

1. main()方法

可以直接运行,会执行当前文件中的所有测试用例

执行顺序:按照ASCII码顺序(下例中,会先执行test_add_1,虽然test_sub_1写在前面)

 1 from calculate import Count
 2 import unittest
 3 
 4 class TestAdd(unittest.TestCase):
 5     def setUp(self):
 6         print('start')
 7 
 8     def tearDown(self):
 9         print('end')
10 
11     def test_sub_1(self):
12         print('sub 1')
13         self.assertEqual(Count(2, 4).sub(), -2)
14 
15     def test_add_1(self):
16         print('add 1')
17         self.assertEqual(Count(2, 4).add(), 6)
18 
19 
20 if __name__ == '__main__':
21     unittest.main()      # unittest提供全局的main()方法,将一个单元测试模块,变成可以直接运行的脚本
main()方法使用TestLoader类来搜索所有包含在该模块中,以“test”命名开头的测试方法,并自动执行它们。

ps:此文件中,因为继承了unittest的TestCase类,所以即使没有下面的main,也可以执行,如下:

 1 from calculate import Count
 2 import unittest
 3 
 4 class TestAdd(unittest.TestCase):
 5     def setUp(self):
 6         print('start')
 7 
 8     def tearDown(self):
 9         print('end')
10 
11     def test_sub_1(self):
12         print('sub 1')
13         self.assertEqual(Count(2, 4).sub(), -2)
14 
15     def test_add_1(self):
16         print('add 1')
17         self.assertEqual(Count(2, 4).add(), 6)

2. TestCase的addTest()方法

仅执行addTest()方法加载的测试用例

执行顺序:按照加载顺序执行,谁在前谁先执行(下例中,会先执行test_sub_1,因为它先被加载)

 1 from calculate import Count
 2 import unittest
 3 
 4 class TestAdd(unittest.TestCase):
 5     def setUp(self):
 6         print('start')
 7 
 8     def tearDown(self):
 9         print('end')
10 
11     def test_sub_1(self):
12         print('sub 1')
13         self.assertEqual(Count(2, 4).sub(), -2)
14 
15     def test_add_1(self):
16         print('add 1')
17         self.assertEqual(Count(2, 4).add(), 6)
18 
19 
20 if __name__ == '__main__':
21     suite = unittest.TestSuite()
22     suite.addTest(TestAdd('test_sub_1'))   # 添加测试用例test_sub_1()
23     suite.addTest(TestAdd('test_add_1'))
24 
25     runner = unittest.TextTestRunner()     # 执行测试用例
26     runner.run(suite)

ps:若不按该顺序执行,参考另一篇文章

3. defaultTestLoader的discover()方法

当测试用例达到成百上千条时,通过addTest()方法添加测试用例就变得非常麻烦。TestLoader类提供的discover()方法可以自动识别测试用例。

找到指定目录下所有测试模块,并可递归查到子目录下的测试模块

执行顺序:测试目录-->测试文件-->测试类-->测试方法(用例),按照ASCII码的顺序加载测试用例。

我们可以通过测试用例的命名来提高被执行的优先级。例如:test_a、test_c

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

          start_dir:要测试的模块名或测试用例目录

          pattern='test*.py':用例名的匹配规则。此处匹配文件名以‘test’开头的‘.py’类型的文件,星号‘*’表示任意多个字符

          top_level_dir=None:测试模块的顶层目录,如果没有顶层目录,默认为None

文件名和测试用例名,需以test开头;目录名和类名,不用

如果在设计测试用例时,不产生相互依赖,那么测试用例的执行顺序就没那么重要了

1 import unittest
2 
3 
4 if __name__ == '__main__':
5     test_dir = './'
6     discover = unittest.defaultTestLoader.discover(test_dir, pattern='test*.py')  # discover()方法会自动根据test_dir匹配查找测试用例文件test*.py,并将查找到的测试用例组装到测试套件中,因此,可以直接通过run()方法执行discover,大大简化了测试用例的查找与执行
7 
8     runner = unittest.TextTestRunner()
9     runner.run(discover)
原文地址:https://www.cnblogs.com/xiaochongc/p/12591010.html