python语法基础单元测试_python学习笔记:unittest单元测试

单元测试:开发自测时写的代码

unittest基本原理:

♦整个平台的搭建使用的是python的unittest测试框架,这里简单介绍下unittest模块的简单应用。

♦unittest是python的标准测试库,相比于其他测试框架是python目前使用最广的测试框架。

几个概念:

TestCase 也就是测试用例

TestSuite 多个测试用例集合在一起

TestLoader是用来加载TestCase到TestSuite中的

TestRunner是来执行测试用例的,测试的结果会保存到TestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息

unitest的目录结构一般如下:重要

1e7f23893fea2d31fccee824bae76fd9.png

unittest 测试

defcal(a,b):return a+b#

#res = cal(1,9)#if res == 3:#print('成功')#else:#raise Exception('测试失败')

#unittest python中的单元测试框架

importunittestclass MyTest(unittest.TestCase): #继承TestCase

def test_a(self): #函数的名字必须以test开头

res = cal(1,2)

self.assertEqual(3,res,msg='预期结果和实际结果不一致')deftest_b(self):

res= cal(9,3)

self.assertEqual(3,res,msg='预期结果和实际结果不一致')

unittest.main()#运行测试用例

unittest常用的断言

断言语法                          解释

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)

unittest 测试产生报告

两种生成测试报告的方式:

1、安装BeautifulReport模块

2、把HTMLTestRunner.py 放到pyCharm的External Libraries中

importunittestimportHTMLTestRunnerimportBeautifulReportclassMyTest(unittest.TestCase):deftest_reg(self):'''注册''' #加这一行会在报告中显示用例描述

print('reg')

self.assertEqual(1,1)deftest_log(self):'''登录'''

print('log')

self.assertEqual(1,1)deftest_buy(self):

self.assertEqual(1,2,msg='购买失败')deftest_z(self):

self.assertIn(1,[1,2,3])deftest_assert(self):

res=False

self.assertFalse(res,)#下面这一坨是用HTMLTestRunner,产生不好看的测试报告

f = open('report.html','wb')

runner= HTMLTestRunner.HTMLTestRunner(f,title='lhtest',description='XX接口测试') #实例化一个runner,帮你跑测试用例

suit = unittest.makeSuite(MyTest) #MyTest类变成测试集合

runner.run(suit)#下面这一坨是用BeautifulReport,产生不好看的测试报告

suite = unittest.makeSuite(MyTest) #变成测试集合

report =BeautifulReport.BeautifulReport(suite)

report.report(filename='bfreport.html',description='接口测试报告')#测试集合:testsuite 多个用例放在一起#unittest 1、函数名必须是test开头,unittest才会帮你执行#2、用例运行的顺序是按照函数的首字母排序的,a-z#testrunner 运行测试用例的#testloader 查找测试用例的

如果我们有很多个模块,每个模块下面都写了很多python文件,每个python文件里面都有测试用例,那怎么把这个目录下的用例都执行了呢,就要先找到这个目录下的所有python文件,然后找到里面的测试用例,逐个执行,代码如下:

importunittest,HTMLTestRunner

suite= unittest.TestSuite()#创建测试套件

all_cases = unittest.defaultTestLoader.discover('.','test_*.py')#找到某个目录下所有的以test开头的Python文件里面的测试用例

for case inall_cases:

suite.addTests(case)#把所有的测试用例添加进来

fp = open('res.html','wb')

runner= HTMLTestRunner.HTMLTestRunner(stream=fp,title='all_tests',description='所有测试情况')

runner.run(suite)#运行测试

参数化

安装nose-parameterized模块

importunittestfrom parameterized importparameterizeddeflogin(username,password):print(username,password)print('=============')return 1

classMyTest(unittest.TestCase):

@parameterized.expand(

[

['xiaodong','123','success'],

['yangfan','456','fail'],

['hailong','1273','success'],

['liurongxin','1273','success'],

]

)deftest_login(self,username,passwd,check):'正常登陆'res=login(username,passwd)

self.assertEqual(check,res)

unittest.main()

setUp、tearDown、setUpClass、tearDownClass

① setup():每个用例执行前运行

② teardown():每个用例执行后运行

③ setUpClass():必须使用@classmethod 装饰器,所有用例执行前运行一次

④ tearDownClass():必须使用@classmethod装饰器,所有用例执行后运行一次

importunittestclassMyTest(unittest.TestCase):def setUp(self):#每条用例执行之前会执行setup

print('这是setup')def tearDown(self):#每条用例执行之后都会执行teardown

print('这是teardown')

@classmethoddef setUpClass(cls):#这个类里面的所有用例执行之前,最先执行它,最前面

print('这是setupclass')

@classmethoddef tearDownClass(cls):#这个类里面所有的用例执行完之后执行它,最后面

print('tearDownClass')deftest_reg(self):print('============我是用例1================')deftest_login(self):print('============我是用例2================')if __name__ == '__main__':

unittest.main()

运行结果:

..----------------------------------------------------------------------Ran2 tests in0.000s

OK

这是setupclass

这是setup============我是用例1================这是teardown

这是setup============我是用例2================这是teardown

tearDownClass

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值