概述

利用python进行测试时,测试用例的加载方式有2种:

一种是通过unittest.main()来启动所需测试的测试模块,上篇文章就是使用的这种方式;

一种是添加到testsuite集合中再加载所有的被测试对象,而testsuit里存放的就是所需测试的用例,下面具体介绍这种方式。

通过suit.addTest()/suit.addTests()加载用例到suit

suit.addTest()用于添加单个测试类或者测试类中的单个方法,suit.addTests()用于添加一个列表。

案例1:通过class("test_xxx")来加载测试用例,如下:

 1 # coding:utf-8
2
3 import unittest
4
5 #被测试方法
6 def cal(a,b):
7 return a+b
8
9 class singletest(unittest.TestCase):
10
11 def setUp(self):
12 print "setUp"
13 pass
14
15 def tearDown(self):
16 print "tearDown"
17 pass
18
19 def test_01(self):
20 print ("test_01")
21 expected = 6
22 result = cal(2, 4)
23 self.assertEqual(expected, result)
24
25 def test_02(self):
26 print ("test_02")
27 expected = 3
28 result = cal(2, 1)
29 self.assertEqual(expected, result)
30
31 if __name__ == '__main__':
32 suite = unittest.TestSuite()
33 suite.addTest(singletest("test_01"))
34 suite.addTest(singletest("test_02"))
35 runner = unittest.TextTestRunner()
36 runner.run(suite)

运行结果如下:

 1 setUp
2 test_01
3 tearDown
4 setUp
5 test_02
6 tearDown
7 ..
8 ----------------------------------------------------------------------
9 Ran 2 tests in 0.000
10
11 OK
12
13 Process finished with exit code 0

全部运行通过!

案例2:将class("test_xxx")格式的方法定义为列表,如下:

 1 # coding:utf-8
2
3 import time,random
4 import HTMLTestRunner
5 import unittest
6 import os
7
8 #被测试方法
9 def cal(a,b):
10 return a+b
11
12 class singletest(unittest.TestCase):
13
14 def setUp(self):
15 print "setUp"
16 pass
17
18 def tearDown(self):
19 print "tearDown"
20 pass
21
22 def test_01(self):
23 print ("test_01")
24 expected = 6
25 result = cal(2, 4)
26 self.assertEqual(expected, result)
27
28 def test_02(self):
29 print ("test_02")
30 expected = 3
31 result = cal(2, 1)
32 self.assertEqual(expected, result)
33
34 if __name__ == '__main__':
35 suite = unittest.TestSuite()
36 tests = [singletest("test_01"),singletest("test_02")]
37 suite.addTests(tests)
38 runner = unittest.TextTestRunner()
39 runner.run(suite)

运行结果如下:

 1 setUp
2 test_01
3 tearDown
4 setUp
5 test_02
6 tearDown
7 ..
8 ----------------------------------------------------------------------
9 Ran 2 tests in 0.000s
10
11 OK
12
13 Process finished with exit code 0

案例3:通过makeSuite方式加载测试用例,如下:

 1 # coding:utf-8
2
3 import time,random
4 import HTMLTestRunner
5 import unittest
6 import os
7
8 #被测试方法
9 def cal(a,b):
10 return a+b
11
12 class singletest(unittest.TestCase):
13
14 def setUp(self):
15 print "setUp"
16 pass
17
18 def tearDown(self):
19 print "tearDown"
20 pass
21
22 def test_01(self):
23 print ("test_01")
24 expected = 6
25 result = cal(2, 4)
26 self.assertEqual(expected, result)
27
28 def test_02(self):
29 print ("test_02")
30 expected = 3
31 result = cal(2, 1)
32 self.assertEqual(expected, result)
33
34 if __name__ == '__main__':
35 suite = unittest.TestSuite()
36 suite.addTest(unittest.makeSuite(singletest))
37 runner = unittest.TextTestRunner()
38 runner.run(suite)

运行结果如下:

 1 setUp
2 test_01
3 tearDown
4 setUp
5 test_02
6 tearDown
7 ..
8 ----------------------------------------------------------------------
9 Ran 2 tests in 0.000s
10
11 OK
12
13 Process finished with exit code 0

 案例4:通过TestLoader().loadTestsFromTestCase()方式加载测试用例,如下:

 1 # coding:utf-8
2
3 import unittest
4
5 #被测试方法
6 def cal(a,b):
7 return a+b
8
9 class TestCase1(unittest.TestCase):
10
11 def setUp(self):
12 print "setUp"
13 pass
14
15 def tearDown(self):
16 print "tearDown"
17 pass
18
19 def test_01(self):
20 print ("test_01")
21 expected = 6
22 result = cal(2, 4)
23 self.assertEqual(expected, result)
24
25 def test_02(self):
26 print ("test_02")
27 expected = 3
28 result = cal(2, 1)
29 self.assertEqual(expected, result)
30
31 class TestCase2(unittest.TestCase):
32
33 def setUp(self):
34 print "setUp"
35 pass
36
37 def tearDown(self):
38 print "tearDown"
39 pass
40
41 def test_03(self):
42 print ("test_03")
43 expected = 8
44 result = cal(3, 5)
45 self.assertEqual(expected, result)
46
47 def test_04(self):
48 print ("test_04")
49 expected = 10
50 result = cal(5, 5)
51 self.assertEqual(expected, result)
52
53 if __name__ == '__main__':
54 suite1 = unittest.TestLoader().loadTestsFromTestCase(TestCase1)
55 suite2 = unittest.TestLoader().loadTestsFromTestCase(TestCase2)
56 suite = unittest.TestSuite([suite1, suite2])
57 unittest.TextTestRunner().run(suite)

运行结果如下:

 1 ....
2 ----------------------------------------------------------------------
3 Ran 4 tests in 0.000s
4
5 OK
6 setUp
7 test_01
8 tearDown
9 setUp
10 test_02
11 tearDown
12 setUp
13 test_03
14 tearDown
15 setUp
16 test_04
17 tearDown
18
19 Process finished with exit code 0

全部运行通过!

 案例5:通过TestLoader().loadTestsFromName()方式加载测试用例,如下:

 1 # coding:utf-8
2
3 import time,random
4 import HTMLTestRunner
5 import unittest
6 import os
7
8 #被测试方法
9 def cal(a,b):
10 return a+b
11
12 class singletest(unittest.TestCase):
13
14 def setUp(self):
15 print "setUp"
16 pass
17
18 def tearDown(self):
19 print "tearDown"
20 pass
21
22 def test_01(self):
23 print ("test_01")
24 expected = 6
25 result = cal(2, 4)
26 self.assertEqual(expected, result)
27
28 def test_02(self):
29 print ("test_02")
30 expected = 3
31 result = cal(2, 1)
32 self.assertEqual(expected, result)
33
34 if __name__ == '__main__':
35 suite = unittest.TestLoader().loadTestsFromName('testcase.singletest')#文件名为testcase
36 runner = unittest.TextTestRunner()
37 runner.run(suite)

运行结果如下:

 1 ..
2 ----------------------------------------------------------------------
3 setUp
4 test_01
5 tearDown
6 setUp
7 test_02
8 tearDown
9 Ran 2 tests in 0.000s
10
11 OK
12
13 Process finished with exit code 0

案例6:通过TestLoader().loadTestsFromNames()方式加载测试用例,如下:

 1 # coding:utf-8
2
3 import time,random
4 import HTMLTestRunner
5 import unittest
6 import os
7
8 #被测试方法
9 def cal(a,b):
10 return a+b
11
12 class singletest(unittest.TestCase):
13
14 def setUp(self):
15 print "setUp"
16 pass
17
18 def tearDown(self):
19 print "tearDown"
20 pass
21
22 def test_01(self):
23 print ("test_01")
24 expected = 6
25 result = cal(2, 4)
26 self.assertEqual(expected, result)
27
28 def test_02(self):
29 print ("test_02")
30 expected = 3
31 result = cal(2, 1)
32 self.assertEqual(expected, result)
33
34 if __name__ == '__main__':
35 suite = unittest.TestLoader().loadTestsFromNames(['testcase.singletest'])#testcase为当前文件名
36 runner = unittest.TextTestRunner()
37 runner.run(suite)

运行结果如下:

 1 ..
2 ----------------------------------------------------------------------
3 setUp
4 test_01
5 tearDown
6 setUp
7 test_02
8 tearDown
9 Ran 2 tests in 0.000s
10
11 OK
12
13 Process finished with exit code 0

下面针对上述脚本中应用到的unittest模块下的几个成员进行简单的介绍,以便于理解上述代码:
 TestCase:所有测试用例的基本类,给一个测试方法的名字,就会返回一个测试用例实例;
 TestSuit:组织测试用例的实例,支持测试用例的添加和删除,最终将传递给  testRunner进行测试执行;
 TextTestRunner:进行测试用例执行的实例,其中Text的意思是以文本形式显示测试结果。测试的结果会保存到TextTestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息;
 TestLoader:用来加载TestCase到TestSuite中的,其中有几个  loadTestsFrom__()方法,就是从各个地方寻找TestCase,创建它们的实例,然后add到TestSuite中,再返回一个TestSuite实例。

Python单元测试框架unittest之单用例管理(二)的更多相关文章

  1. Python单元测试框架unittest之单用例管理(一)

    一.概述 本文介绍python的单元测试框架unittest,unittest原名为PyUnit,是由java的JUnit衍生而来,这是Python自带的标准模块unittest.unittest是基 ...

  2. Python单元测试框架unittest之批量用例管理(discover)

    前言 我们在写用例的时候,单个脚本的用例好执行,那么多个脚本的时候,如何批量执行呢?这时候就需要用到unittet里面的discover方法来加载用例了.加载用例后,用unittest里面的TextT ...

  3. Python单元测试框架unittest之深入学习

    前言 前几篇文章该要地介绍了python单元测试框架unittest的使用,本篇文章系统介绍unittest框架. 一.unittest核心工作原理 unittest中最核心的四个概念是:test c ...

  4. Python单元测试框架unittest使用方法讲解

    这篇文章主要介绍了Python单元测试框架unittest使用方法讲解,本文讲解了unittest概述.命令行接口.测试案例自动搜索.创建测试代码.构建测试套件方法等内容,需要的朋友可以参考下   概 ...

  5. Python单元测试框架unittest重要属性 与 用例编写思路

    前言 本文为转载,原文地址作者列举python unittest这个测试框架的主要属性和 测试用例思路 unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行, ...

  6. Python单元测试框架unittest

    学习接口自动化测试时接触了unittest单元测试框架,学习时参照了虫师编写的<selenium2自动化测试实战>,个人觉得里面讲的例子还比较容易理解的. 一.基础 1.main()和框架 ...

  7. python单元测试框架-unittest(一)

    简介 unittest单元测试框架不仅可以适用于单元测试,还可以使用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果. ...

  8. python单元测试框架-unittest(四)之用例综合框架管理

    简述为何如要框架? 前面测试用例与执行都是写在一个文件,当用例数量不断增加的时候,用例的执行与管理变得非常麻烦,因此需要对用例根据具体的功能模块来使用单独的模块来管理.就像一所学校要根据不同年级进行分 ...

  9. python单元测试框架-unittest(三)之用例执行顺序

    执行顺序规则: 测试类或测试方法的数字与字母顺序0~9,A-Z 执行如下脚本,理解用例执行顺序 #coding=utf-8 import unittest class Test1(unittest.T ...

随机推荐

  1. arm,asic,dsp,fpga,mcu,soc各自的特点

    arm,asic,dsp,fpga,mcu,soc各自的特点 人工智能受到越来越多的关注,许多公司正在积极开发能实现移动端人工智能的硬件,尤其是能够结合未来的物联网应用,对于移动端人工智能硬件的实现方 ...

  2. CUDA 内存统一分析

    CUDA 内存统一分析 关于CUDA 编程的基本知识,如何编写一个简单的程序,在内存中分配两个可供 GPU 访问的数字数组,然后将它们加在 GPU 上. 本文介绍内存统一,这使得分配和访问系统中任何处 ...

  3. 『言善信』Fiddler工具 — 8、Fiddler检查器(Inspectors)详解

    目录 1.请求报文内容 2.响应报文内容 3.响应报文中Transformer选项说明 Inspectors意思是检查器.Inspectors可以使用多种方式,查看请求的请求报文和响应报文相关信息. ...

  4. MongoDB学习笔记01:入门

    MongoDB简介 MongoDB是一个开源.高性能.无模式的文档型数据库,当初的设计就是用于简化开发和方便扩展,是NoSQL数据库产品中的一种.是最 像关系型数据库(MySQL)的非关系型数据库. ...

  5. spring——自动装配【非常详细】

    什么是自动装配? 自动装配就是让应用程序上下文为你找出依赖项的过程.说的通俗一点,就是Spring会在上下文中自动查找,并自动给bean装配与其关联的属性! spring中实现自动装配的方式有两种,一 ...

  6. 二、特殊DNS解析

    一.DNS轮询 1.为站点 www.tedu.cn 提供DNS轮询解析,三台Web服务器节点的IP地址分别为: 192.168.4.10.192.168.4.20.192.168,4.30 步骤: 虚 ...

  7. 【C++】枚举类型(enum )

    定义枚举类型的主要目的是:增加程序的可读性.枚举类型最常见也最有意义的用处之一就是用来描述状态量.枚举类型数据的其他处理也往往应用switch语句,以保证程序的合法性和可读性.枚举值是常量不是变量,不 ...

  8. Dynamic Anchor Learning for Arbitrary-Oriented Object Detection(DAL)

    面向任意目标检测的动态锚点学习 摘要:面向任意的目标广泛地出现在自然场景.航空照片.遥感图像等中,因此面向任意的目标检测得到了广泛的关注.目前许多旋转探测器使用大量不同方向的锚点来实现与地面真实框的空 ...

  9. Spring Cloud底层原理解析

    概述 毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术.不过大多数讲解还停留在对Spring Cloud功能使用的层面,其底层的很多原理,很多人可能并不知晓 ...

  10. 面试官:MySQL的可重复读级别能解决幻读问题吗?

    引言 之前在深入了解数据库理论的时候,了解到事务的不同隔离级别可能存在的问题.为了更好的理解所以在MySQL数据库中测试复现这些问题.关于脏读和不可重复读在相应的隔离级别下都很容易的复现了. 但是对于 ...