selenium - unittest 单元测试用例的执行
Posted xiaochongc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了selenium - unittest 单元测试用例的执行相关的知识,希望对你有一定的参考价值。
以下三种方法:
- 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码的顺序加载测试用例
语法:discover(start_dir, pattern=‘test*.py‘, top_level_dir=None)
start_dir:要测试的模块名或测试用例目录
pattern=‘test*.py‘:用例名的匹配规则。此处匹配文件名以‘test’开头的‘.py’类型的文件,星号‘*’表示任意多个字符
top_level_dir=None:测试模块的顶层目录,如果没有顶层目录,默认为None
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)
以上是关于selenium - unittest 单元测试用例的执行的主要内容,如果未能解决你的问题,请参考以下文章
第 6 章 unittest 单元测试框架 - Selenium3 自动化测试