unittest测试框架(一)

136 篇文章 26 订阅
14 篇文章 1 订阅

一、前言

框架的概念:
    在系统开发过程中,框架是指对特定应用领域中的应用系统的部分设计和实现子系统的整体结构
    框架将应用系统划分为类和对象,定义类和对象的责任,类和对象如何互相协作,以及对象之间的控制线程。这些共有的设计因素由框架预先定义,应用开发人员只须关注于特定的应用系统特有部分

自动化测试框架的定义为:
    由一个或多个自动化测试基础模块、自动化测试管理模块、自动化测试统计模块等组成的工具集合

1.按框架的定义来分,自动化测试框架可以分为:基础功能测试框架、管理
执行框架

2.按不同的测试类型来分,可以分为:功能自动化测试框架、性能自动化测
试框架

3.按测试阶段来分,可以分为:单元自动化测试框架、接口自动化测试框架、
系统自动化测试框架

4.按组成结构来分,可以分为:单一自动化测试框架、综合自动化测试框架

5.按部署方式来分,可以分为:单机自动化测试框架、分布式自动化测试框架
 

二、Unittest框架

熟悉Unittest测试框架是后续使用Python进行自动化测试的基础,Unittest框架(又名PyUnit框架)为Python语言的单元测试框架。其官方介绍文档链接为:https://docs.python.org/2.7/library/unittest.html#module-unittest

Unittest测试框架使用介绍:
1.用import语句引入unittest模块

2.让所有执行测试的类都继承于TestCase类,可以将TestCase看成是对特定类进行测试的方法的集合

3.setUp()方法中进行测试前的初始化工作,teardown()方法中执行测试后的清除工作,它们都是TestCase中的方法

4.编写测试的方法最好以test开头(可以直接运行) def test_add(self) 、def test_sub(self)等,可以编写多个测试用例对被测对象进行测试

5.在编写测试方法过程中,使用TestCase class提供的方法测试功能点,比如:assertEqual等

6.调用unittest.main()方法运行所有以test开头的方法

三、代码实例

对模块中的加法功能测试
存在一个calc.py的模块,里面存在一个加法功能:

import unittest #导入unittest
import calc #导入被测模块

def sum(a,b):
	return a+b;
	
class mytest(unittest.TestCase):
	def setUp(self): #初始化工作
		pass;
		
	def tearDown(self): #退出清理工作
		pass;
		
	def testsum(self): #具体的测试用例,一定要以test开头
		self.assertEqual(calc.sum(1,2),2,"testing sum");
		
if __name__=="__main__":
unittest.main();

四、常用断言

unittest中常用的assert语句:

语句说明
assertEqual(a, b)a == b
assertNotEqual(a, b)a != b
assertTrue(x)bool(x) is True
assertFalse(x) bool(x) is False
assertIs(a, b)a is b
assertIsNot(a, b)a is not b
assertIsNone(x)x is None
assertIsNotNone(x)x is not None
assertIn(a, b)a in b
assertNotIn(a, b)a not in b
assertIsInstance(a, b)isinstance(a, b)
assertNotIsInstance(a, b)not isinstance(a, b)
assertGreater(a, b)a > b
assertGreaterEqual(a, b)a >= b
assertLess(a, b)a < b
assertLessEqual(a, b)a <= b

五、创建测试代码方式

unittest创建测试代码的方式:
方式一:创建子类继承unittest.TestCase,然后重写runTest方法

class WidgetTestCase(unittest.TestCase):
	def setUp(self):
		pass;
	def runTest(self):
		pass;
	def tearDown(self):
		pass;

方式二:编写以test开头的方法

class WidgetTestCase(unittest.TestCase):
	def setUp(self):
		pass;
	def test_xx1(self):
	
	def test_xx2(self):
	... 
	def test_xxN(self):
	
	def tearDown(self):	
		pass;

六、构建测试套件(测试用例集合)

前提Tester是继承了unittest.TestCase的子类
方式一:

Suite = unittest.TestSuite();
Suite.addTest(Tester('test_default_size'));
Suite.addTest(Tester('test_resize'));

方式二(推荐):

def suite():
	suite = unittest.TestSuite();
	suite.addTest(Tester('test_default_size'));
	suite.addTest(Tester('test_resize'));
	return suite;

方式三(推荐):

def suite():
	tests = ['test_default_size', 'test_resize']
	return unittest.TestSuite(map(Tester, tests));

构建测试套件

例如:
存在如下类calc:

class calc(): #计算器类
	def __init__(self,a,b): #初始化
		self.numa = a;
		self.numb = b;
		
	def sum(self): #加法
		return self.numa+self.numb;
		
	def sub(self): #减法
		return self.numa-self.numb;
		
	def multi(self): #乘法
		pass;

测试方法如:

import unittest #导入unittest
import calc

class mytest(unittest.TestCase):
	def setUp(self): #初始化工作
		self.testnum = calc.calc(3,4);
		
	def tearDown(self): #退出清理工作
		del self.testnum;
		
	def testsum(self): #具体的测试用例
		self.assertEqual(self.testnum.sum(),7,"testing sum");
		
	def testsub(self): #具体的测试用例
		self.assertEqual(self.testnum.sub(),-1,"testing sub");
		
	def testmulti(self): #具体的测试用例
		self.assertEqual(self.testnum.multi(),12,"testing multi");
		
def suite():
	suite = unittest.TestSuite();
	suite.addTest(mytest("testsum"));
	suite.addTest(mytest("testsub"));
	return suite;
	
if __name__=="__main__":
	unittest.main(defaultTest = 'suite');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值