软件测试python之UnitTest操作

UnitTest

1. UnitTest

  • UnitTest是python自带的自动化测试框架
  • UnitTest主要包含的内容
            TestCase(测试用例)
            TestSuite(测试套件,把多个测试用例集成到一个测试套件)
            TestRunner(执行测试用例)
            TestLoader(自动从代码中加载多个测试用例)

1.1 TestCase

1.导包:import unittest
2.定义测试类:新建测试类必须继承unittest.TestCase
3.定义测试方法:测试方法名称必须以test开头
4.调用unittest.main()执行测试用例

#导包
import unittest

#定义一个方法,练习时使用
def my_sum(a,b):
	return a + b 
	
#定义测试类
class mytest(unittest.TestCase):
	def test_001(self):
		print(my_sum(5,6))

	def test_002(self):
		print(my_sum(0,3))

1.2 TestSuite

1.实例化:suite = unittest.Testsuite()
2.添加用例:suite.addTest(ClassName(“MethodName”))
3.添加扩展:suite.addTest(unittest.makeSuite(ClassName))

import unittest
import testfile

suite = unittest.TestSuite()
suite.addTest(testfile.mytest("test_001"))
suite.addTest(unittest.makeSuite(testfile.mytest02))

1.3 TextTestRunner

TestSuite需要配合TextTestRunner才能执行

TextTestRunner作用:执行在suite中的测试用例

实例化:runner = unittest.TextTestRunner()   #实例化TextTestRunner的对象
执行:runner.run(suite)  #调用对象的run方法

1.4 TestLoader

用来加载TestCase到TestSuite中,即加载满足条件的测试用例,将测试用例封装成测试套件。

使用unittest.TestLoader,通过该类下面的discover()方法自动搜索指定目录中指定开头的.py文件,并将查找到的测试用例组装到测试套件

suite = unittest.TestLoader().discover(test_dir,pattern='*test*.py')
#导包
import unittest

#用TestLoader对象的discover方法自动查找py,自动加载py文件中的方法
#第一个参数是从哪里找py文件,"."从当前目录开始查找py文件
#第二个参数是指定py文件的文件名,可以用通配符
suite = unittest.TestLoader().discover(".",pattern='my*.py')
runner = TextTestRunner() 
runner.run()

2. FixTure

FixTure是一个概述,对一个测试用例环境的初始化和销毁就是一个Fixture
可以在测试用例执行之前自动调用指定的函数,在测试用例执行之后自动调用指定的函数

2.1 FixTure控制级别

  • 方法级别:每个方法执行前和执行后都自动调用函数
  • 类级别:不管类中有多少方法,一个类执行前后都自动调用函数
  • 模块级别:不管一个模块中有多少类,模块执行前后都自动调用函数
2.1.1 方法级别
  • 初始化(前置处理):def setUp(self) --> 首先自动执行
  • 销毁(后置处理):def tearDown(self) --> 最后自动执行
    运行于测试方法始末,即运行一次测试方法就会运行一个setUp和tearDown
import unittest

#定义测试类
class mytest(unittest.TestCase):
	def setUp(self):
		print("setUp被自动调用了")
	
	def tearDown(self):
		print("tearDown被自动调用了")

	def test_001(self):
		print(my_sum(5,6))

	def test_002(self):
		print(my_sum(0,3))
2.1.2 类级别
  • 初始化(前置处理):@classmethod def setUpClass(cls) --> 首先自动执行
  • 销毁(后置处理):@classmethod def tearDownClass(cls) --> 最后自动执行
    运行于测试类始末,即运行一个类就会运行一个setUpClass和tearDownClass
#定义测试类
class mytest(unittest.TestCase):
	@classmethod
	def setUpClass(cls):
		print("setUpClass被自动调用了")
	
	@classmethod
	def tearDownClass(cls):
		print("tearDownClass被自动调用了")

	def test_001(self):
		print(my_sum(5,6))

	def test_002(self):
		print(my_sum(0,3))
2.1.3 模块级别
  • 初始化(前置处理): def setUpModule() --> 首先自动执行
  • 销毁(后置处理):def tearDownModule() --> 最后自动执行
    运行于整个模块始末,即整个模块只会运行一次setUpModule和tearDownModule
def setUpModule():
	print("setUpModule被自动调用了")

def tearDownModule():
	print("tearDownModule被自动调用了")

3. 断言

assert…方法来自父类TestCase

#断言相等
self.assertEqual(num1,11)
#断言在列表中
self.assertIn(11,[12,23,11,26])

4. 参数化

通过参数化的方式来传递数据,从而实现数据与脚本分离。并且可以实现用例的重复执行。unittest测试框架,本身不支持参数化,但是可以通过安装unittest扩展插件parameterized来实现。
1.导包:from parameterized import parameterized
2.使用@parameterized.expand装饰器可以为测试函数的参数进行参数化

class mytest(unittest.TestCase):
	@parameterized.expand([(1,1,2),(2,2,4),(3,3,5)])
	def test_mysum(self,a,b,c):
		assertEqual(my_sum(a,b),c)

5. 跳过执行

对于一些未完成的或者不满足测试条件的测试函数和测试类,可以跳过执行。

class mytest(unittest.TestCase):
	@unittest.skip
	def test_mysum(self):
		assertEqual(num1,11)

6. 测试报告

生成测试报告的方式:

  • TextTestRunner(unittest自带)
  • HTMLTestRunner(第三方模板)

6.1 生成TextTestRunner测试报告

1.导入unittest包
2.生成测试套件
3.以只写方式打开测试报告文件f=open(“test01.txt”,“w”,encoding=“utf-8”)
4.实例化TextTestRunner对象:runner=unittest.TextTestRunner(stream=f,verbosity=2)
5.执行runner.run(suite)
6.关闭文件

import unittest
suite = unittest.TestLoader().discover('.','my*.py')
file = open('test01.txt','w',encoding='utf-8')
runner = unittest.TextTestRunner(stream=f,verbosity=2)
runner.run(suite)
file.close()

6.2 生成HTMLTestRunner测试报告

1.复制HTMLTestRunner.py到项目文件夹下
2.导入HTMLTestRunner、unittest包
3.生成测试套件 suite = unittest.TestLoader().discover(‘.’,‘my*.py’)
4.以只写方式打开测试报告文件f=open(“test01.html”,“w”,encoding=“utf-8”)
5.实例化HTMLTestRunner对象:runner=unittest.HTMLTestRunner(stream=f,title=“自动化测试报告”,description=“Chorme浏览器”)
6.执行runner.run(suite)
7.关闭文件

#导包
import unittest
import HTMLTestRunner

suite = unittest.TestLoader().discover('.','my*.py')
file = open('test01.html','wb')
runner = unittest.HTMLTestRunner(stream=f,title="自动化测试报告",description="Chorme浏览器")
runner.run(suite)
file.close()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小婷在奋斗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值