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 自动化测试

Selenium3自动化测试36单元测试Unittest

selenium - unittest 单元测试用例的执行

Python+Selenium ----unittest单元测试框架

selenium unittest单元测试框架2

Python + selenium之unitest