python单元测试unittest
单元测试 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相关推荐
- 系统学习Python——单元测试unittest:编写测试用例
分类目录:<系统学习Python>总目录 相关文章: · 单元测试unittest:框架结构 · 单元测试unittest:测试固件 · 单元测试unittest:编写测试用例 · 单元测 ...
- 系统学习Python——单元测试unittest:测试报告
分类目录:<系统学习Python>总目录 相关文章: · 单元测试unittest:框架结构 · 单元测试unittest:测试固件 · 单元测试unittest:编写测试用例 · 单元测 ...
- 系统学习Python——单元测试unittest:命令行执行测试
分类目录:<系统学习Python>总目录 相关文章: · 单元测试unittest:框架结构 · 单元测试unittest:测试固件 · 单元测试unittest:编写测试用例 · 单元测 ...
- 系统学习Python——单元测试unittest:批量执行测试文件
分类目录:<系统学习Python>总目录 相关文章: · 单元测试unittest:框架结构 · 单元测试unittest:测试固件 · 单元测试unittest:编写测试用例 · 单元测 ...
- selenium自动化测试、Python单元测试unittest框架以及测试报告和日志输出
部分内容来自:https://www.cnblogs.com/klb561/p/8858122.html 一.基础介绍 核心概念:test case, testsuite, TestLoder,Tex ...
- Python单元测试unittest测试框架
本文的主题是自动化测试框架的实现,在实现之前,先了解一下关于unittest模块的相关知识: Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回 ...
- Python单元测试-Unittest(四)
Test suite的用途是将测试收集想要进行测试的测试用例,以便unittest执行这些选中的测试用例. unittest.main() 通常情况下main函数其实是一个默认的test suite, ...
- python 单元测试 unittest
#!/usr/bin/env python #encoding: utf-8 import unittest import myclass class mytest(unittest.TestCase ...
- python语言案例教程 单元测试_python单元测试unittest实例详解
本文实例讲述了python单元测试unittest用法.分享给大家供大家参考.具体分析如下: 单元测试作为任何语言的开发者都应该是必要的,因为时隔数月后再回来调试自己的复杂程序时,其实也是很崩溃的事情 ...
最新文章
- Linux升级OpenSSH完整手册
- gin自定义HTTP配置
- 双击背面截图_ios14怎么轻点双击背面截屏 敲击苹果手机背部截图设置教程
- VTK:交叉点 PolyData 过滤器用法实战
- 计算机考试word教程,职称计算机考试Word教程:段落格式的编辑
- 0基础怎么学web前端?新手到大神的进阶路线在这!
- 《大话设计模式》第29章-OOTV杯超级模式大赛—模式总结(五)
- 在VS2005中设计WinForms应用程序已完成设计的界面突然丢失的解决
- C#实现百度AI-实时语音识别转写-附源码
- 用计算机如何扫描文件,打印机扫描文件到电脑方法教程
- 清华梦的粉碎—写给清华大学的退学申请
- 解决微信公众平台图片不可引用
- 如何通过手机APP远程控制PLC
- <Zhuuu_ZZ>大数据技术之Flume详解
- MySQL集群:主从模式
- AR说 | AR美妆,在化妆品店内扮演着什么角色?
- 前端微信小程序资讯类仿今日头条微信小程序
- Spring Cloud Netflix Hystrix
- webpack:url-loader打包后找不到图片、字体路径问题
- 数据通信技术_数据通信浅析
热门文章
- 详述MySQL Using intersect交集算法
- Oracle 19c RAC打补丁过程避坑指南
- 【年度重磅】2020华为云社区年度技术精选合集,700页+免费下载!
- 不为人知的稠密特征加入CTR预估模型的方法
- 无码系列-7-代码的语文修养_上篇
- child计算机英语作文,范文:The One-Child Family
- Android笔记 codeUI与html UI
- (组合数学笔记)Pólya计数理论_Part.3_置换群及其性质
- 论文翻译:《Improved Neural Relation Detection for Knowledge Base Question Answering》
- 机器学习十大经典算法之随机森林