学习UnitTest框架,轻松打造无懈可击的代码!

一、什么是UnitTest?

1、介绍

unittest是Python自带的一个单元测试框架,它可以做单元测试,也能用于编写和运行重复的测试工作。

它给自动化测试用例开发和执行提供了丰富的断言方法,判断测试用例是否通过,并最终生成测试结果。

2、核心要素
  1. TestCase
  2. TestSuite
  3. TestLoader
  4. Fixture
  5. TestRunner

二、简单使用UnitTest

1、简单分层

测试一般由三或四部分构成:被测的对象+测试用的方法+测试报告(+数据),一般有几个构成便需要几个文件

2、被测的对象

文件名:xxx.py

被测的对象可能是一段普普通通的函数

 
  1. def A(put): # 一个普普通通的函数

  2. if put == 1:

  3. return "成功"

  4. else:

  5. return "失败"

3、测试用的方法

文件名:test.py

  1. 先导包:unittest包和被测对象所在的包
  2. 定义测试类:建一个测试类,继承unittest.TestCase
  3. 定义测试方法:命名为test开头
 
  1. # 导包

  2. import unittest

  3. from xxx import A

  4. # 定义测试类

  5. class TestA(unittest.TestCase):

  6. # 定义测试方法

  7. def test_A_1(self):

  8. self.assertEqual("成功", A(1)) # 引用被测对象

  9. def test_A_2(self):

  10. self.assertEqual("失败", A(2))

4、测试报告

文件名:suite.py

一般和testsuite结合,至于testsuite是什么?就是明确测试的范围,将需要被测试的用例组织起来。当然,得先用testsuite才知道报告所需要报告的用例范围

 
  1. import unittest

  2. from htmltestreport import HTMLTestReport

  3. from test import TestA

  4. suite = unittest.TestSuite()

  5. suite.addTest(unittest.makeSuite(TestA))

  6. runner = HTMLTestReport('./report.html','测试报告','描述')

  7. runner.run(suite)

 
  1. 现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。

  2. 如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受

  3. 可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛

  4. 分享他们的经验,还会分享很多直播讲座和技术沙龙

  5. 可以免费学习!划重点!开源的!!!

  6. qq群号:455787643【暗号:csdn999】

三、进阶用法

1、fixture

对一个测试用例环境的初始化和销毁

  1. 方法级别的 setUp(self) tearDown(self) 每个普通方法执行 之前/之后 自动运行。(运行次数和“def”的数量相关)
  2. 类级别的 setUpClass(cls) tearDownClass(cls) 在类内所有方法直 之前/之后 运行一次。(运行次数和“class”的数量相关)

简单来说,在测试集的首尾运行或者在每个测试用例前后执行

 
  1. import unittest

  2. from xxx import A

  3. class TestA(unittest.TestCase):

  4. def setUp(self) -> None:

  5. print("\n前SetUp")

  6. def tearDown(self) -> None:

  7. print("后TearDown")

  8. @classmethod

  9. def setUpClass(cls) -> None:

  10. print("首setUpClass")

  11. @classmethod

  12. def tearDownClass(cls) -> None:

  13. print("尾tearDownClass")

  14. def test_A_1(self):

  15. print("测试_A_1")

  16. self.assertEqual("成功", A(1))

  17. def test_A_2(self):

  18. print("测试_A_2")

  19. self.assertEqual("失败", A(2))

测试结果:

 
  1. ============================= test session starts =============================

  2. collecting ... collected 2 items

  3. test.py::TestA::test_A_1 首setUpClass

  4. PASSED [ 50%]

  5. 前SetUp

  6. 测试_A_1

  7. 后TearDown

  8. test.py::TestA::test_A_2 PASSED [100%]

  9. 前SetUp

  10. 测试_A_2

  11. 后TearDown

  12. 尾tearDownClass

  13. ======================== 2 passed, 1 warning in 0.01s =========================

2、参数化

使用parameterized库

 
  1. import unittest

  2. from parameterized import parameterized # 1、引入包

  3. from xxx import A

  4. data = [1] # 2、设置一个参数

  5. class TestA(unittest.TestCase):

  6. @parameterized.expand(data) # 3、在这里注明

  7. def test_A_1(self, data_in): # 4、加入对应形参

  8. print("测试_A_1")

  9. self.assertEqual("成功", A(data_in)) # 5、别忘记更改断点里的内容

因为parameterized库读取的数据固定为元组,格式为 [(参数), (参数), (参数)] ,其他格式的数据需要进行转化,可以添加以下方法用于读取json格式的数据

 
  1. import json

  2. # 方法一:用于打开内容为[[参数], [参数], [参数]]的文件

  3. def add_1(file):

  4. with open(file) as f:

  5. data = json.load(f)

  6. return data

  7. # 方法二:用于打开内容为[{参数}, {参数}, {参数}]的文件,用的较多

  8. def add_2(file):

  9. with open(file, "r", encoding="utf-8") as f:

  10. data_list = json.load(f)

  11. new_list = []

  12. for data in data_list:

  13. new_list.append(tuple(data.values()))

  14. return new_list

如果不是读取文件,直接读取数据并转化为元组的话,可以使用以下方法

 
  1. import json

  2. # 方法一:用于转化[[参数], [参数], [参数]]

  3. def add_1(test_data):

  4. data = json.load(test_data)

  5. return data

  6. # 方法二:用于转化[{参数}, {参数}, {参数}],用的较多

  7. def add_2(test_data):

  8. new_list = []

  9. for data in test_data:

  10. new_list.append(tuple(data.values()))

  11. return new_list

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
 

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值