Python + selenium之unitest(1)
单元测试负责对最小的软件设计单元(模块)进行验证,它使用软件设计文档中对模块的描述作为指南,对重要的程序进行测试以发现模块中的错误。
下面演示不用测试框架的单元测试:
# 计算器类 class Count: def __init__(self, a, b): self.a = int (a) self.b = int (b) # 计算加法 def add(self): return self.a + self.b
创建一个Count类用于两个整数的计算,通过_init_方法对两个数进行初始化,然后再初创建add()方法返回两个数相加的结果。
根据上面所实现的功能,不用测试框架所编写的单元测试如:test.py
1 # coding=utf-8 2 from calculator import Count 3 4 5 # 测试两个数相加 6 class TestCount: 7 def test_add(self): 8 try: 9 j = Count (2, 3) 10 add = j.add () 11 assert (add == 4), "Interger addition result error!" 12 except AssertionError as msg: 13 print(msg) 14 else: 15 print('Test pass!') 16 17 18 # 执行测试类的测试方法 19 mytest = TestCount () 20 mytest.test_add ()
首先引入calculator文件中的Count类,然后再test_add()方法中调用Count类并传入两个参数2和3;最后调用Count类中的add()方法对两个参数做加法运算,并通过asssert()方法判断add()的返回值是否等于5.如果不相等则抛出自定义“Integer addition result error!”异常信息,如果相等则打印“Test pass!”
注:很容易发现,该代码没有遵循一定的规范,导致维护成本很大。并且需要编写大量的辅助代码才能进行单元测试。为了让单元测试更容易维护和编写,最好的方式是遵循一定的规范来编写测试用例,这也是单元测试框架诞生的初衷。
1 from calculator import Count 2 import unittest 3 4 5 class TestCount (unittest.TestCase): 6 7 def setUp(self): 8 print("test start") 9 10 def test_add(self): 11 j = Count (2, 4) 12 self.assertEqual (j.add (),6) 13 14 def tearDown(self): 15 print("test end") 16 17 18 if __name__ == '__main__': 19 unittest.main ()
上面的代码分析如下:
1.首先引入unittest模块,创建TestCount类继承unittest的TestCase类,TestCase类可以看成对特定类进行测试的集合。
2.setUp()方法用于测试y用例执行的初始化工作,tearDown()方法与setUp方法相呼应。
3.在test_add()中首先调用Count类并传入要计算的数,通过调用add()方法得到两个数相加的返回值。可以不用使用异常处理,而是直接调用unittest框架提供的assertEqual()方法对add()的返回值进行判断,判断两者是否相等,assertEqual()方法由TeCase类继承
4.unittest提供了全局的main()方法,使用它可以方便的将一个单元测试模块变成可以直接运行的测试脚本。main()方法使用TestLoader()类来收缩所有包含在该模块中以“test”命名开头的测试方法,并执行它
if__name__ == "__main__"语句介绍: 1.Python文件的后缀为.py 2..py文件既可以用来直接执行,也可以用来作为模块被导入。 3.在Python中导入模块一般使用的是import 4.if表示该语句为条件语句。__name_作为模块的内置属性(注,是双下划线),简单的说就是.py文件的调用方式。.py文件有两种调用方式,一种是作为模块进行调用,另外一种是直接调用。__main__表示直接调用