白青林

博客园 首页 新随笔 联系 订阅 管理

1.简介

unittest是python内置的单元测试框架,具备编写用例、组织用例、执行用例、输出报告等自动化框架的条件。使用unittest前需要了解该框架的五个概念:

即test case,test suite,testLoader,test runner,test fixture。

test case  :一个完整的测试单元,执行该测试单元可以完成对某一个问题的验证,完整体现在:测试前环境准备(setUp),执行测试代码(run),及测试后环境还原(tearDown);

test suite  :多个测试用例的集合,测试套件或测试计划;

testLoader  :加载TestCase到TestSuite中的,其中loadTestsFrom__()方法用于寻找TestCase,并创建它们的实例,然后添加到TestSuite中,返回TestSuite实例;

test runner :执行测试用例,并将测试结果保存到TextTestResult实例中,包括运行了多少测试用例, 成功了多少,失败了多少等信息;

test fixture:一个测试用例的初始化准备及环境还原,主要是setUp() 和 setDown()方法;
————————————————

 

 

 

2.原理

通过unittest类调用分析,框架的工作流程:

编写TestCase,由TestLoader加载TestCase到TestSuite,然后由TextTestRunner来运行TestSuite,最后将运行的结果保存在TextTestResult

————————————————

 

 

 

3.unittest使用方法

 1.导入unittest包

 import unittest

2.编写测试类继承unittest.TestCase父类
class YunLoginTest(unittest.TestCase):
3.编写测试用例
    
import unittest,parameterized
def my_sum(a,b):
a += 1
b += 3
return a+b
# 生成测试用例
class TestSum(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("先执行类")
def setUp(self):
print("使用前执行")
def test_01(self):
print(my_sum(3,2))

def test_02(self):
print(my_sum(1,6))

def test_03(self):
print(my_sum(4,-3))

def test_04(self):
print(my_sum(0,3))
def tearDown(self):
print("方法结束后")
@classmethod
def tearDownClass(cls):
print("结束类用例")

class TestSum1(unittest.TestCase):
def test_01(self):
number = my_sum(3,4)
self.assertEqual(number,11)

def test_02(self):
number = my_sum(1, -3)
self.assertEqual(number, 2)

def test_03(self):
number = my_sum(3, 4)
self.assertIn(number, [5,6,7,8,9,10,11])

def test_04(self):
number = my_sum(7, 4)
self.assertIn(number, [1, 6, 7, 8, 9, 10])

# def setUpModule():
# print("11111")
#
# def tearDownModule():
# print('9999')
--------
# 另一种方法
# 调用时用类调用
class TestSum2(unittest.TestCase):
@parameterized.parameterized.expand([(1,5,10),(-1,8,11),(-2,-7,-5)])
def test_01(self,x,y,z):
number = my_sum(x,y)
self.assertEqual(number,z)

4.运行unittest测试框架
  
# 将测试用例添加到套件里面
suite = unittest.TestSuite()
suite.addTest(TestSum1("test_01"))
suite.addTest(TestSum1("test_02"))
suite.addTest(TestSum1("test_03"))
suite.addTest(TestSum1("test_04"))

# suite = unittest.TestSuite()
# suite.addTest(TestSum("test_01"))
# suite.addTest(TestSum("test_02"))
# suite.addTest(TestSum("test_03"))
# suite.addTest(TestSum("test_04"))

suite = unittest.TestSuite()
suite.addTest(TestSum1("test_01"))

# 一次性添加一个类里面的所有用例
# suite.addTest(unittest.makeSuite(TestSum2))

# 批量添加一个py文件里所有的用例
# suite = unittest.TestLoader().discover('./','test1.py')
#
# 执行suite对象中的用例
# runner = unittest.TextTestRunner()
# runner.run(suite)
#
# if __name__ == '__main__':
# TestSum()


4.unnittest常用断言

 

 5.配合HTMLTestRunner生成测试报告

# 将测试用例添加到套件里面
suite = unittest.TestSuite()
suite.addTest(TestSum1("test_01"))
suite.addTest(TestSum1("test_02"))
suite.addTest(TestSum1("test_03"))
suite.addTest(TestSum1("test_04"))
# 生成测试报告
f = open("test.html", 'wb')
runner = HTMLTestRunner(stream=f, title="自动化测试",
description="Chrome 浏览器")
runner.run(suite)

f.close()

 

posted on 2021-06-23 19:03  白青林  阅读(186)  评论(0编辑  收藏  举报