单元测试 unittest

接口测试的本质:就是测试类里面的函数,通过数据驱动

单元测试的本质:测试函数,代码级别,通过代码级别测试

单元测试的框架:unittest+接口  pytest +web-->接口

pytest+jenjins +allure

测试步骤

1:写用例 TestCase

2:执行用例 1) TestSuite 存储用例  2)TestLoader 找用例,加载用例,顾虑到TestSuite

3:对比实际结果和期望结果   判定用例是否通过  #断言Assert

4:出具测试报告  TextTestRunner

写一个测试类,对calc_class.py文件中    MathMethod模块和DivMethod模块里的类,进行单元测试。calc_class.py如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2021/4/1 16:11
# @File    : calc_class.pyclass MathMethod:def __init__(self, a, b):self.a = aself.b = b# 加法def add(self):return self.a + self.b# 乘法def multi(self):return self.a + self.bclass DivMethod:def __init__(self, a, b):self.a = aself.b = b# 除法def div(self):return self.a/ self.b

1、继承了unittest里边的TestCase专门用来写用例

1)一个用例就是一个函数,不能传参,只有self关健字

2)所有的用例( 所有的函数 都是test开头,test_ )

3)unittest执行顺序是按Ascci码排序运算

test_class.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2021/4/1 16:20
# @Site    :
# @File    : test_class.pyimport unittest
from calc_class import MathMethod,DivMethod# 写一个测试类,对写的math method模块里的类,进行单元测试
# 继承了unittest里边的TestCase专门用来写用例
class TestMathMethod(unittest.TestCase):# 1:一个用例就是一个函数,不能传参,只有self关健字# 2:所有的用例(所有的函数 都是test开头,test_)def test_add_two_positive(self):res = MathMethod(1, 1).add()print("1+1相加的结果是", res)self.assertEqual(3, res, "两数相加出错了")def test_add_two_negative(self):res = MathMethod(-1, -2).add()print("-1和-2相加的结果是", res)self.assertEqual(-3, res, "两数相加出错了")class TestDivMethod(unittest.TestCase):def test_div_two_positive(self):res = DivMethod(2, 1).div()print("2除以1是", res)self.assertEqual(2, res, "两数相除出错了")if __name__ == '__main__':unittest.main()

2、suite = unittest.TestSuite()#存储用例

方法一:一条一条用例的添加,
下边的例子只添加了一个用例:验证两个正数相加
suite.addTest
suite.addTest(TestMathMethod('test_add_two_positive'))
import unittest
from test_class import TestMathMethodsuite = unittest.TestSuite()#存储用例
# 方法一:只执行一条用例,两个正数相加
# suite.addTest
suite.addTest(TestMathMethod('test_add_two_positive'))# 执行
runner = unittest.TextTestRunner()
runner.run(suite)
方法二:TestLoader   创建一个加载器
loader = unittest.TestLoader() #创建一个加载器
1)suite.addTest(loader.loadTestsFromTestCase(TestMathMethod)) #从测试类中的用例去寻找,将测试类TestMathMethod中的方法全部添加至suite中
import unittest
from test_class import TestMathMethodsuite = unittest.TestSuite()#存储用例
# 方法一:只执行一条用例,两个正数相加
# suite.addTest
# suite.addTest(TestMathMethod('test_add_two_positive'))# 方法二:TestLoader
# 创建一个加载器
loader = unittest.TestLoader()
# 从测试类中去寻找用例,然后加载到suite中
suite.addTest(loader.loadTestsFromTestCase(TestMathMethod))# 执行
runner = unittest.TextTestRunner()
runner.run(suite)

2)suite.addTest(loader.loadTestsFromModule(test_class)) #从测试类中的用例去寻找,将模块中的所有类TestMathMethod和TestDiveMethod中的方法全部添加至suite中

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2021/4/1 17:12
# @File    : run_class.py
import unittest
# from test_class import TestMathMethod
import test_classsuite = unittest.TestSuite()#存储用例
# 方法一:只执行一条用例,两个正数相加
# suite.addTest
# suite.addTest(TestMathMethod('test_add_two_positive'))# 方法二:TestLoader
# 创建一个加载器
loader = unittest.TestLoader()
# 1)从测试类中去寻找用例,然后加载到suite中
# suite.addTest(loader.loadTestsFromTestCase(TestMathMethod))# 2)从模块里去找用例,然后将模块下的用例添加至suite中
# 会将test_class中的两个类都执行
suite.addTest(loader.loadTestsFromModule(test_class))# 执行
runner = unittest.TextTestRunner()
runner.run(suite)

3、执行

runner = unittest.TextTestRunner()

runner.run(suite)

unittest.TextTestRunner() 不带参数的时候,生成的报告会直接打印在控制台中
# 带参数,会在生成指定的文件,并将报告输出到此文件中,有中文时,要设置encoding='UTF-8'
file = open("test.txt", "w+", encoding='UTF-8')
runner = unittest.TextTestRunner(stream=file, verbosity=2)
runner.run(suite)
verbosity = 2的时候 用例执情况最详细,0的时候最简单
verbosity 的取值状态可以是 0、1、2这三种情况 
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2021/4/1 17:12
# @File    : run_class.py
import unittest
# from test_class import TestMathMethod
import test_classsuite = unittest.TestSuite()#存储用例
# 方法一:只执行一条用例,两个正数相加
# suite.addTest
# suite.addTest(TestMathMethod('test_add_two_positive'))# 方法二:TestLoader
# 创建一个加载器
loader = unittest.TestLoader()
# 1)从测试类中去寻找用例,然后加载到suite中
# suite.addTest(loader.loadTestsFromTestCase(TestMathMethod))# 2)从模块里去找用例,然后将模块下的用例添加至suite中
# 会将test_class中的两个类都执行
suite.addTest(loader.loadTestsFromModule(test_class))# 执行
# 不带参数的时候,生成的测试报告会直接打印在控件台上
# runner = unittest.TextTestRunner()# 带参数,会在生成指定的文件,并将报告输出到此文件中,有中文时,要设置encoding='UTF-8'
file = open("test.txt", "w+", encoding='UTF-8')
runner = unittest.TextTestRunner(stream=file, verbosity=2)
runner.run(suite)
file.close()

测试报告

更好的代码式:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2021/4/1 17:12
# @File    : run_class.py
import unittest
# from test_class import TestMathMethod
import test_classsuite = unittest.TestSuite()#存储用例
# 方法一:只执行一条用例,两个正数相加
# suite.addTest
# suite.addTest(TestMathMethod('test_add_two_positive'))# 方法二:TestLoader
# 创建一个加载器
loader = unittest.TestLoader()
# 1)从测试类中去寻找用例,然后加载到suite中
# suite.addTest(loader.loadTestsFromTestCase(TestMathMethod))# 2)从模块里去找用例,然后将模块下的用例添加至suite中
# 会将test_class中的两个类都执行
suite.addTest(loader.loadTestsFromModule(test_class))# 执行
# 不带参数的时候,生成的测试报告会直接打印在控件台上
# runner = unittest.TextTestRunner()# 带参数,会在生成指定的文件,并将报告输出到此文件中,有中文时,要设置encoding='UTF-8'
# file = open("test.txt", "w+", encoding='UTF-8')
# runner = unittest.TextTestRunner(stream=file, verbosity=2)
# runner.run(suite)
# file.close()# 上下文管理器,会在执行结束后,自己去close文件,不需要手动去处理
with open("test.txt", "w+", encoding='UTF-8') as file:runner = unittest.TextTestRunner(stream=file, verbosity=2)runner.run(suite)
print(file.closed)

4、断言

断言里的msg,是在用例执行失败后,才会打印出来。

在断言里边加一个异常处理:

添加了异常处理的代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2021/4/1 16:20
# @Author  : lixiaomei
# @Site    :
# @File    : test_class.pyimport unittest
from calc_class import MathMethod,DivMethod# 写一个测试类,对写的math method模块里的类,进行单元测试
# 继承了unittest里边的TestCase专门用来写用例
class TestMathMethod(unittest.TestCase):# 1:一个用例就是一个函数,不能传参,只有self关健字# 2:所有的用例(所有的函数 都是test开头,test_)def setUp(self):print("我要开始执行测试用例了")def tearDown(self):print("我已经执行完测试用例了")# setUp每个用例执行之前,都会执行setUp,如果有操作必须在用例之前准备好,就放到setUp里# teardown每个用例执行结束后,都会执行,如果有操作必须在执行用例完毕后要清除掉,就放到teardown里def test_add_two_positive(self):res = MathMethod(1, 1).add()print("1+1相加的结果是", res)try:self.assertEqual(3, res, "两数相加出错了") #断言里的msg是用例执行失败后,才会打印出来except AssertionError as e:print("出错啦!断言错误是{0}".format(e))raise e    #异常处理完,要将异常抛出去def test_add_two_negative(self):res = MathMethod(-1, -2).add()print("-1和-2相加的结果是", res)try:self.assertEqual(-3, res, "两数相加出错了")except AssertionError as e:print("出错啦!断言错误是{0}".format(e))raise eclass TestDivMethod(unittest.TestCase):def test_div_two_positive(self):res = DivMethod(2, 1).div()print("2除以1是", res)try:self.assertEqual(2, res, "两数相除出错了")except AssertionError as e:print("出错啦!断言错误是{0}".format(e))raise eif __name__ == '__main__':unittest.main()
 setUp每个用例执行之前,都会执行setUp,如果有操作必须在用例之前准备好,就放到setUp里teardown每个用例执行结束后,都会执行,如果有操作必须在执行用例完毕后要清除掉,就放到teardown里

python单元测试unittest相关推荐

  1. 系统学习Python——单元测试unittest:编写测试用例

    分类目录:<系统学习Python>总目录 相关文章: · 单元测试unittest:框架结构 · 单元测试unittest:测试固件 · 单元测试unittest:编写测试用例 · 单元测 ...

  2. 系统学习Python——单元测试unittest:测试报告

    分类目录:<系统学习Python>总目录 相关文章: · 单元测试unittest:框架结构 · 单元测试unittest:测试固件 · 单元测试unittest:编写测试用例 · 单元测 ...

  3. 系统学习Python——单元测试unittest:命令行执行测试

    分类目录:<系统学习Python>总目录 相关文章: · 单元测试unittest:框架结构 · 单元测试unittest:测试固件 · 单元测试unittest:编写测试用例 · 单元测 ...

  4. 系统学习Python——单元测试unittest:批量执行测试文件

    分类目录:<系统学习Python>总目录 相关文章: · 单元测试unittest:框架结构 · 单元测试unittest:测试固件 · 单元测试unittest:编写测试用例 · 单元测 ...

  5. selenium自动化测试、Python单元测试unittest框架以及测试报告和日志输出

    部分内容来自:https://www.cnblogs.com/klb561/p/8858122.html 一.基础介绍 核心概念:test case, testsuite, TestLoder,Tex ...

  6. Python单元测试unittest测试框架

    本文的主题是自动化测试框架的实现,在实现之前,先了解一下关于unittest模块的相关知识: Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回 ...

  7. Python单元测试-Unittest(四)

    Test suite的用途是将测试收集想要进行测试的测试用例,以便unittest执行这些选中的测试用例. unittest.main() 通常情况下main函数其实是一个默认的test suite, ...

  8. python 单元测试 unittest

    #!/usr/bin/env python #encoding: utf-8 import unittest import myclass class mytest(unittest.TestCase ...

  9. python语言案例教程 单元测试_python单元测试unittest实例详解

    本文实例讲述了python单元测试unittest用法.分享给大家供大家参考.具体分析如下: 单元测试作为任何语言的开发者都应该是必要的,因为时隔数月后再回来调试自己的复杂程序时,其实也是很崩溃的事情 ...

最新文章

  1. Linux升级OpenSSH完整手册
  2. gin自定义HTTP配置
  3. 双击背面截图_ios14怎么轻点双击背面截屏 敲击苹果手机背部截图设置教程
  4. VTK:交叉点 PolyData 过滤器用法实战
  5. 计算机考试word教程,职称计算机考试Word教程:段落格式的编辑
  6. 0基础怎么学web前端?新手到大神的进阶路线在这!
  7. 《大话设计模式》第29章-OOTV杯超级模式大赛—模式总结(五)
  8. 在VS2005中设计WinForms应用程序已完成设计的界面突然丢失的解决
  9. C#实现百度AI-实时语音识别转写-附源码
  10. 用计算机如何扫描文件,打印机扫描文件到电脑方法教程
  11. 清华梦的粉碎—写给清华大学的退学申请
  12. 解决微信公众平台图片不可引用
  13. 如何通过手机APP远程控制PLC
  14. <Zhuuu_ZZ>大数据技术之Flume详解
  15. MySQL集群:主从模式
  16. AR说 | AR美妆,在化妆品店内扮演着什么角色?
  17. 前端微信小程序资讯类仿今日头条微信小程序
  18. Spring Cloud Netflix Hystrix
  19. webpack:url-loader打包后找不到图片、字体路径问题
  20. 数据通信技术_数据通信浅析

热门文章

  1. 详述MySQL Using intersect交集算法
  2. Oracle 19c RAC打补丁过程避坑指南
  3. 【年度重磅】2020华为云社区年度技术精选合集,700页+免费下载!
  4. 不为人知的稠密特征加入CTR预估模型的方法
  5. 无码系列-7-代码的语文修养_上篇
  6. child计算机英语作文,范文:The One-Child Family
  7. Android笔记 codeUI与html UI
  8. (组合数学笔记)Pólya计数理论_Part.3_置换群及其性质
  9. 论文翻译:《Improved Neural Relation Detection for Knowledge Base Question Answering》
  10. 机器学习十大经典算法之随机森林