关于unittest的介绍及应用

一、unittest初识

unittest是python内置的单元测试框架(也称PyUnit),可以实现对软件的测试驱动开发过程。unittest模块提供了一种规范的方法来构造单元测试用例,支持测试的自动化处理,更多的功能包括共享代码测试的初始化和结束代码、将测试用例封装成测试套件以及测试的多元化显示等。它与Junit工具十分相似。
在这里插入图片描述
TestCase:测试用例,单元测试的最小组成部分。是一个完整的测试流程,包含测试前准备环境搭建(setUp),执行测试代码(run),以及测试后环境的还原(tearDown)。一个测试用例是一个完整的测试单元,能对某一个问题进行验证。
TestFixture:测试固件,测试用例环境的搭建和销毁,包含四个方法。setUp、tearDown在每一个test_*方法前后执行;setUpClass、tearDownClass在这个TestCase类下前后只执行一次,需要用@classmethod注解标识。
TestSuite:测试套件,可以把多个测试用例集合在一起,而且是有顺序的。测试套件是可以嵌套的,可以在测试套件中包含测试套件。
TestRunner:测试执行,用来执行测试用例,其中run(test)能执行TestSuite/TestCase
TestLoader:加载测试用例,有unittest.TestLoader().loadTestsFromTestCase(类名)
和unittest.TestLoader().loadTestsFromName(方法名)等方法,常用的加载测试用例的方法是unittest.defaultTestLoader.discover(‘文件所在路径’,pattern=‘文件名.py’)

二、OCC后端API自动化框架介绍

在这里插入图片描述

三、快速开始

先贴一个TestCase来
class api_resource_mcu_detail(unittest.TestCase):
@classmethod
def setUpClass(self):
print("======我只会运行一次哟")
self.headers = localconfighttp.login()[1]
def setUp(self):
print("======预测我会被重复运行")
def test_resource_mcu_detail(self):
id = function_resource_mcu_getId(self.headers)
params = {“id”:id}
self.assertEqual(normal_post(self.headers,params,detail_resource_mcu)[‘code’],0)

#ID为空
def test_medium_resource_mcu_detail_01(self):
    params = {"id":None}
    self.assertEqual(normal_post(self.headers,params,detail_resource_mcu)['code'],errCode)
#ID不合法
def test_medium_resource_mcu_dateil_02(self):
    params = {"id":"-1"}
     self.assertEqual(normal_post(self.headers,params,detail_resource_mcu)['code'],errCode)

运行结果截图:
在这里插入图片描述

主函数:
if name == ‘main’:
testSuite = unittest.TestSuite()
file = open(‘D:/PyProject/caselist.txt’)
pyname = []
for i in file.readlines():
if(i !="" and not i.startswith("#")):
pyname.append(i.replace("\n", “”))
print(pyname)
sunitmodel = []
for name in pyname:
suite = unittest.defaultTestLoader.discover(“D:/PyProject/mcuPro/”, pattern=name+".py")
sunitmodel.append(suite)
print(sunitmodel)
if len(sunitmodel) > 0:
for suite_m in sunitmodel:
for case in suite_m:
print("========case:"+str(case))
testSuite.addTests(case)

runner = unittest.TextTestRunner(verbosity=2)
runner.run(testSuite)

unittest.defaultTestLoader.discover能找到指定目录下所有测试模块。某个py文件里面的所有test*方法
TestLoader:
该类根据各种标准加载测试用例,并将它们返回给测试套件。正常情况下,不需要创建这个类的实例。unittest提供了可以共享的defaultTestLoader类,可以使用其子类和方法创建实例,discover()就是其中之一。
discover()找到的TestSuite:
在这里插入图片描述
打印测试结果及测试报告
runner = unittest.TextTestRunner(verbosity=2)
该verbosity参数,用以控制执行结果的输出,0 是简单报告、1 是一般报告、2 是详细报告
或者产出html报告
fp = open("./result/result.html", ‘wb’)
print(suit)
runner=HTMLTestRunner.HTMLTestRunner(stream=fp, title=‘Test Report’, description=‘COP API 测试’)
还可以txt形式产出
测试报告:
在这里插入图片描述

四、常见断言及装饰器

断言的作用:检测程序运行的结果和预期。unittest提供了很多实用的方法。
检查值是否相等:assertEqual(element.text, “10”) assertNotEqual(a,b)
检查表达式为true或false:assertTrue() assertFalse()
检查异常:assertRaise(exc) assertRaisexp(exp) 对异常情况进行捕获,使程序正常运行下去
skip装饰器一共有三个 unittest.skip(reason)、unittest.skipIf(condition,reason)、unittest.skipUnless(condition,reason),skip无条件跳过,skipIf当condition为True时跳过,skipUnless当condition为False时跳过。
看用例需要,这个装饰器还是挺好用的
在这里插入图片描述
在这里插入图片描述

五、总结

  1. 要使用unittest这个测试框架时,需要先导入unittest
  2. 定义一个测试类时,要继承unittest.TestCase这个类
  3. 测试用例必须以test开头,否则不会被执行。
  4. 测试用例执行顺序是根据用例名称A-Z顺序来执行的
  5. TestSuite可控制执行的顺序

参考博客:https://blog.csdn.net/luanpeng825485697/article/details/79459771
参考书籍:Python自动化测试实战

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值