Python中的单元测试框架包含:doctest、unittest、pyttest、nose等,使用unittest单元测试框架不需要自行定义断言失败的提示,并且当一个测试函数执行失败后,后面的测试函数还会继续执行下去。下面以一个简单计算器来编写自动化测试用例。被测试的代码如下:

 # 计算器类
class Calculator:
def __init__(self, a, b):
self.a = int(a)
self.b = int(b) def add(self):
return self.a + self.b def sub(self):
return self.a - self.b def mul(self):
return self.a * self.b def div(self):
return self.a / self.b

通过unittest单元测试框架编写如下测试用例:

 import unittest

 from files.unit_test.calculator import Calculator

 class TestCalculator(unittest.TestCase):
def test_add(self):
c = Calculator(3, 5)
result = c.add()
self.assertEqual(result, 8) def test_sub(self):
c = Calculator(10, 5)
result = c.sub()
self.assertEqual(result, 5) def test_mul(self):
c = Calculator(5, 7)
result = c.mul()
self.assertEqual(result, 34) def test_div(self):
c = Calculator(12, 6)
result = c.div()
self.assertEqual(result, 2) if __name__ == '__main__':
unittest.main()

执行结果展示:

一、使用unittest单元测试框架的规则

1.创建一个测试类(TestCalculator),该类必须继承unittest模块的TestCase类;

2.创建的测试方法必须以test开头。

通过unittest提供的assertEqual()方法来断言结果与预期是否一致,该方法由TestCase父类提供,由于继承了该类,可用self调用。关于测试结果:

(1)“.”表示一条运行通过的测试用例。

(2)“F”表示一条运行失败的测试用例。

(3)“E”表示一条运行错误的测试用例。

(4)“s”表示一条运行跳过的测试用例。

二、重要的概念

1.Test Case

  最小的测试单元。用于检查特定输入集合的特定返回值。unittest提供了TestCase基类,脚本中创建的测试类需要继承该基类,用来创建新的测试用例。

2.Test Suit

  测试套件是测试用例、测试套件或两者的集合,用于组装一组要运行的测试。

3.Test Runner

  是一个组件,用于协调测试的执行并向用户提供结果。可以使用图形界面、文本界面或返回特殊值来展示执行测试的结果。unittest提供了TextTestRunner类运行测试用例,为了生成HTML格式的测试报告,会选择使用HTMLTestRunner运行类。

4.Test Fixture

  代表执行一个或多个测试所需的环境准备,以及关联的清理动作。例如,创建临时或者代理数据库、目录,或启动服务器进程。unittest中提供了setUp()/tearDown()、setUpClass()/tearDownClass()等方法来完成这些操作。

基于这四个概念的理解,修改以上测试用例如下:

 import unittest

 from files.unit_test.calculator import Calculator

 class TestCalculator(unittest.TestCase):

     # 测试用例前置动作
def setUp(self):
print("test start") # 测试用例后置动作
def tearDown(self):
print("test end") def test_add(self):
c = Calculator(3, 5)
result = c.add()
self.assertEqual(result, 8) def test_sub(self):
c = Calculator(10, 5)
result = c.sub()
self.assertEqual(result, 5) def test_mul(self):
c = Calculator(5, 7)
result = c.mul()
self.assertEqual(result, 34) def test_div(self):
c = Calculator(12, 6)
result = c.div()
self.assertEqual(result, 2) if __name__ == '__main__':
# 创建测试套件
suit = unittest.TestSuite()
suit.addTest(TestCalculator("test_add"))
suit.addTest(TestCalculator("test_sub"))
suit.addTest(TestCalculator("test_mul"))
suit.addTest(TestCalculator("test_div"))
# 创建测试运行器
runner = unittest.TestRunner()
runner.run(suit)

  在测试用例的执行时,抛弃了unittest提供的main()方法,而是调用了TestSuite类下面的addTest()来添加测试用例。因为一次只能添加一条用例,所以需要指定测试类及测试方法。然后调用TextTestRunner类下面的run()运行测试套件。这样做比直接用main()麻烦,首先,测试用例的执行顺序可以由测试套件的添加顺序控制,而main()方法只能按照测试类、方法的名称来执行测试用例。例如,TestA类比TestB类限制性,test_add()用例比test_div()用例限制性;其次,当一个测试文件中有很多测试用例时,并不是每次都要执行所有的测试用例,尤其是比较耗时的UI自动化测试。因而通过测试套件和测试运行器可以灵活的控制要执行的测试用例。

最新文章

  1. JDK 对应的设计模式
  2. linux,shell输入反斜杠显示'W'。
  3. Oracle GoldenGate 12c中的协同交付(Coordinated Delivery)
  4. Java基础知识强化72:正则表达式之判断功能(手机号码判断 和 校验邮箱)
  5. HTML学习笔记之中的一个(input文件选择框的封装)
  6. 微信小程序用setData修改数组或对象中的一个属性值
  7. 自学Python2.5-基本数据类型-set集合
  8. oclazyload的尝试
  9. Spring Cloud入门教程-Ribbon实现客户端负载均衡
  10. Oracle保留小数点后两位的几种方法
  11. BZOJ 4763
  12. Linux配置虚拟内存
  13. Linux系统中将普通用户添加到sudoers
  14. Linux文件系统命令 cp
  15. [游记] Noip 2018
  16. Selenium 基本用法
  17. Struts2 (下)
  18. poj 2981 Strange Way to Express Integers (中国剩余定理不互质)
  19. sar命令使用【转】
  20. HTML5的LocalStorage和sessionStorage的使用

热门文章

  1. Dubbo(二):深入理解Dubbo的服务发现SPI机制
  2. Ceph 存储集群7-故障排除
  3. 牛客练习赛39 C 流星雨 (概率dp)
  4. HDU 6186 CS Course (连续位运算)
  5. Spring 事件:Application Event
  6. Go语言实现:【剑指offer】包含min函数的栈
  7. Request库的安装与使用
  8. php面试笔记(3)-php基础知识-运算符
  9. saltstack集合
  10. 云服务器centos系统安装python