一、单元测试框架提供的功能:
1、用例的编写规范与执行;
2、提供专业的比较方法(断言);
3、提供丰富的测试日志:提供失败日志,成功用例数,失败用例数,执行时间等。
从单元测试提供的功能来看,可以帮助我们提供不同级别的测试:
- 单元测试:unittest
- HTTP接口自动化测试:unittest+Requests
- Web UI自动化测试:unittest+selenium
- 移动自动化测试:unittest+appium
二、编写测试用例
1、被测试函数:
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
2、编写测试函数:
import unittest
from module import Calculator
class ModuleTest(unittest.TestCase):
def setUp(self):
self.cal = Calculator(8,4)
def tearDown(self):
pass
def test_add(self):
result = self.cal.add()
self.assertEqual(result,12)
def test_sub(self):
result = self.cal.sub()
self.assertEqual(result,4)
def test_mul(self):
result = self.cal.mul()
self.assertEqual(result,32)
def test_div(self):
result = self.cal.div()
self.assertEqual(result,2)
if __name__ == "__main__":
#构造测试集
#unittest.main()
suite = unittest.TestSuite()
suite.addTest(ModuleTest("test_add"))
suite.addTest(ModuleTest("test_sub"))
suite.addTest(ModuleTest("test_mul"))
suite.addTest(ModuleTest("test_div"))
runner = unittest.TextTestRunner()
runner.run(suite)
解析:
首先,
通过import引入unittest引入单元测试框架。
创建ModuleTest类继承unittest.TestCase类。
setUp()和tearDown()为每一个测试用例的开始与结束,setUp()方法用于测试用例执行前的初始化工作,例如初始化变量、生成数据库测试数据、打开浏览器等。teardown则相反;
unittest要求测试用例要以“test”开头。如:test_add;
接下来,
调用unittest.TestSuite类的addTest()方法向测试套件中添加测试用例;
最后,通过unittest.TextTestRunner()类的run()方法运行测试套件中的测试用例;
如果想运行全部测试用例,使用if __name__ == "__main__":下的unittest.main()函数。main方法会自动查找当前文件继承unittest.TestSuite类的测试类,在测试类下匹配以“test”开头的方法并执行;
运行结果:
Testing started at 12:33 ...
C:\Users\46297\PycharmProjects\unittestTest\venv\Scripts\python.exe "E:\softwareInstall\PyCharm Community Edition 2018.1\helpers\pycharm\_jb_unittest_runner.py" --path C:/Users/46297/PycharmProjects/unittestTest/test.py
Launching unittests with arguments python -m unittest C:/Users/46297/PycharmProjects/unittestTest/test.py in C:\Users\46297\PycharmProjects\unittestTest
Ran 4 tests in 0.005s
OK
Process finished with exit code 0