unitTest使用
unitTest介绍
- UnitTest是python自带的自动化测试框架
- UnitTest主要包含的内容
- TestCase(测试用例)
- TestSuite(测试套件,把多个TestCase集成到一个测试TestSuite)
- TestRunner(执行测试用例)
- TestLoader(自动从代码中加载多个测试用例TestCase)
- Fixture(UnitTest特性)
TestCase(测试用例)
使用时注意点:
- 类必须要继承unitTest.TestCase
- 创建方法名必须以test开头
# 导包
import unittestdef my_sum(a, b):return a + b# 创建类
class test(unittest.TestCase):#类必须要继承unitTest.TestCase# 创建方法(方法名必须以test开头)def test_01(self):print(my_sum(5, 6))# 创建方法(方法名必须以test开头)def test_02(self):print(my_sum(7, 6))
TestSuite(测试套件,把多个TestCase集成到一个测试TestSuite)
注意点:主要是调用unitTest.TestSuite()方法中的addTest()方法添加测试用例
# 用unittest.makeSuite一次导入一个类中的所有测试方法
testSuite()与TestLoader()的区别:
- 当只是要执行py文件中的几个用例时,使用TestSuite()方法中的addTest()方法加载指定用例
- 当要执行整个py文件时可以直接调用TestLoader(),加载整个py文件的测试用例
# 测试套件
# 导包
import unittest
import unitTest_testCase# 只是把测试用例添加到了测试套件中,并不是执行测试用例
suite = unittest.TestSuite()
suite.addTest(unitTest_testCase.test.test_01())
suite.addTest(unitTest_testCase.test.test_02())# 用unittest.makeSuite一次导入一个类中的所有测试方法
# suite.addTest(unittest.makeSuite(unitTest_testCase.test))
TestRunner(执行测试用例)
注意点:主要是调用unitTest.TextTestRunner()方法中的run()方法来执行测试用例
# 测试套件
# 导包
import unittest
import unitTest_testCasesuite = unittest.TestSuite()
suite.addTest(unitTest_testCase.test.test_01())
suite.addTest(unitTest_testCase.test.test_02())# 执行测试套件
runner = unittest.TextTestRunner()
runner.run(suite)
TestLoader(自动从代码中加载多个测试用例TestCase)
# 测试套件
# 导包
import unittest
import unitTest_testCase# TestLoader
# 用TestLoader对象的discover方法来自动查找py,自动加载py文件中的方法
# 第一个参数是从哪里找py文件,"."从当前目录开始查找py文件
# 第二个参数是指定py文件的文件名,可以用通配符
suite = unittest.TestLoader().discover(".", "unitTest_testCase.py")
# 执行测试套件
runner = unittest.TextTestRunner()
runner.run(suite)
小结:
- 所有的testCase都是被textTestRunner来执行
- textTestRunner执行的是testSuite
- 一个testSuite中有很多testCase
Fixture(UnitTest特性)
方法级别的FiXTure:在方法执行前调用setup()方法;在用例执行之后调用tearDown()方法
# 导包
import unittestdef my_sum(a, b):return a + b# 创建类
class test(unittest.TestCase):def setUp(self):print("方法级调用---setup")def tearDown(self):print("方法级调用---tearDown")# 创建方法(方法名必须以test开始)def test_01(self):print(my_sum(5, 6))# 创建方法(方法名必须以test开始)def test_02(self):print(my_sum(7, 6))
类级别的fixture:在类执行前调用setUpClass(cls)方法,在类执行之后调用tearDownClass(cls)方法,类级别的调用要加@classmethod装饰器
# 导包
import unittestdef my_sum(a, b):return a + b# 创建类
class test(unittest.TestCase):@classmethoddef setUpClass(cls):print("类级别调用--setUpClass")@classmethoddef tearDownClass(cls):print("类级别调用--tearDownClass")def setUp(self):print("方法级调用---setup")def tearDown(self):print("方法级调用---tearDown")# 创建方法(方法名必须以test开始)def test_01(self):print(my_sum(5, 6))# 创建方法(方法名必须以test开始)def test_02(self):print(my_sum(7, 6))
模块级别调用: 模块级别调用指整个py文件执行之前调用setUpModule()方法,执行之后调用tearDownModule()方法
import unittestdef setUpModule():print("setUpModule自动调用了")def tearDownModule():print("tearDownModule自动调用了")def my_sum(a, b):return a + bclass my_test1(unittest.TestCase):@classmethoddef setUpClass(cls):print("setupclass自动调用了")@classmethoddef tearDownClass(cls):print("teardownclass自动调用了")def setUp(self):print("setup被自动调用了")def tearDown(self):print("teardown被自动调用了")def test_001(self):print(my_sum(5, 6))def test_002(self):print(my_sum(0, 3))class my_test2(unittest.TestCase):@classmethoddef setUpClass(cls):print("setupclass自动调用了")@classmethoddef tearDownClass(cls):print("teardownclass自动调用了")def setUp(self):print("setup被自动调用了")def tearDown(self):print("teardown被自动调用了")def test_001(self):print(my_sum(5, 6))def test_002(self):print(my_sum(0, 3))
fixture小结
- 一定要在继承于unittest.TestCase这个类的子类中使用
- setUP,tearDown, 每个方法执行开始和完毕后自动调用
- setUPClass, tearDownClass, 每个类开始时候和结束时候自动调用
- setUpModule, tearDownModule,每个py文件开始和结束的时候自动调用
assert断言
让程序判断测试用例执行是否符合预期
- 如果参数1与参数2的值相等,则断言成功,否则断言失败。
- 两个参数有一个存放实际结果,一个存放预期结果。
常用方法:assertIn(参数1,参数2)
- 如果参数1在参数2里面,断言通过,否则断言失败
参数化
- 导入from parameterized import parameterized
- 在方法上面用@parameterized.expand()修饰方法
- expand()里面是一个列表
- 列表里面放多个元组,每个列表中的成员就代表调用方法使用的实参
- 列表中有几个元组方法就会被调用几次
import unittest
from parameterized import parameterizeddef my_sum(a, b):return a + bclass my_test1(unittest.TestCase):@parameterized.expand([(1, 2, 3), (5, 6, 110)])def test_001(self, a, b, c):# a是my_sum()方法的第一个参数# b是my_sum()方法的第二个参数# c是预期结果num = my_sum(a, b)self.assertEqual(num, c) # num是实际数值,C是预期数值# 实际结果与预期结果相符,代表测试用例测试通过 # 不相符代表测试用例测试失败
跳过:
方法:unitTest.skip
import unittest
from parameterized import parameterizeddef my_sum(a, b):return a + bclass my_test1(unittest.TestCase):@parameterized.expand([(1, 2, 3), (5, 6, 110)])def test_001(self, a, b, c):num = my_sum(a, b)self.assertEqual(num, c) # num是实际数值,C是预期数值@unittest.skipdef test_002(self, ):print("跳过")
HTML报告
- 在实例化TextTestRunner对象的时候,需要写参数
- runner = HTMLTestRunner(stream=file, title="我的第一个html测试报告",verbosity=2)
- stream=file, verbosity=2,file代表用open打开的一个文件verbosity=2,固定
import unittest
# 用TestLoader对象的discover方法来自动查找py,自动加载py文件中的方法
# 第一个参数是从哪里找py文件,"."从当前目录开始查找py文件
# 第二个参数是指定py文件的文件名,可以用通配符
suite = unittest.TestLoader().discover(".", "my*.py")# runner = unittest.TextTestRunner()
file = open("test01.txt", "w", encoding="utf8")
runner = unittest.TextTestRunner(stream=file, verbosity=2)
runner.run(suite)
- 把文件HTMLTestRunner.py拷贝到项目目录下
- 在代码中导入模块from HTMLTestRunner import HTMLTestRunner
- 调用HTMLTestRunner(stream=file, title="我的第一个html测试报告")
- 第一个参数是用open打开的文件, 打开的文件扩展名一定是.html;open打开文件的时候,用wb,不用指定字符集
- 调用runner对象的run方法执行测试套件
- 关闭open打开的文件
# 测试套件
# 导包
import unittest
from HTMLTestRunner import HTMLTestRunner# 加载unitTest_testCase.py模块下的所有测试用例
suite = unittest.TestLoader().discover(".", "unitTest_testCase.py")
# 用open,w方式打开测试报告文件
file = open("test01.html", "wb") # open打开文件的时候,用wb,不用指定字符集runner = HTMLTestRunner(stream=file, title="我的第一个html测试报告")
# 执行测试套件
runner.run(suite)
# 关闭open打开的文件
file.close()
unitTest使用相关推荐
- python selenium unittest_python+selenium+unittest——ui自动化的轻量级选择
最近项目部分趋于稳定,部分功能进入了维护阶段,但每次的小改动都需要进行回归测试,回归的用例不多但也算是重复劳动浪费资源.为了节约这部分人力,我考虑引入web的ui自动化.之前在其他项目中用的都是jav ...
- linux下运行python unitest_Python unittest打印日志可以在Linux上运行,但在Windows上不行...
我正在尝试编写一个unittest,它将stdout和stderr重定向到一个写在Windows网络驱动器上的文件.出于某些原因,相同的脚本(只有diff.是目录路径)可以在Linux上工作,但在Wi ...
- 软件测试培训教程:pytest与unittest区别
在软件测试培训教程中,会讲到关于pytest与unittest区别,那么本期教程小编就为大家详细的介绍一下pytest与unittest区别有哪些? pytest与unittest区别: 一.用例编写 ...
- unittest 框架学习
为什么80%的码农都做不了架构师?>>> 今天我学习了,怎么把testcase分到不同的文件中,然后在集中到一个testsuite中一起跑,我还学会了怎么打包,怎么引用. 打包 ...
- unittest安装教程_unittest框架与自动化测试环境的搭建
1.unittest框架简介 首先以selenium IDE录制的一段代码为例(脚本的录制请参考其他文档),说明unittest框架的使用. 图 1 要使用unittest框架,首先需要import ...
- python unit test 访问开发代码,使用Python的unittest模块作为testrunner时,如何在测试前运行初始化代码?...
How can a user of a library run his own initialization code (setting debug levels of loggers for exa ...
- python中setup什么意思_Python unittest中setUp()和setUpClass()有什么区别?
当您在班级中有多个测试方法时,差异就会显现出来. setUpClass和tearDownClass为整个类运行一次; setUp和tearDown在每个测试方法之前和之后运行. 例如: class E ...
- unittest框架执行用例
pycharm中运行脚本的方式总共有三种,分别为:unittest模式,pytest模式,普通模式,今天主要来聊一聊unittest模式执行与普通执行(因为最近在学习unittest框架,所以pyte ...
- python 单元测试_聊聊 Python 的单元测试框架(一):unittest
本文首发于 HelloGitHub 公众号,并发表于 Prodesire 博客. 前言 说到 Python 的单元测试框架,想必接触过 Python 的朋友脑袋里第一个想到的就是 unittest. ...
- python装饰器执行顺序_python unittest单元测试框架-3用例执行顺序、多级目录、装饰器、fixtures...
1.用例执行顺序 unittest默认会按照ascii码的顺序,依次执行.类名--方法名排序,使用discover也是默认排序.如果不想使用默认排序,就使用testsuite测试集的方式. impor ...
最新文章
- 利用3D打印构建衍射深度神经网络,可光速执行数字运算
- php xml 动态添加数据,php向xml中添加数据一例
- 如何正确拒绝老板的加班要求?学起来!
- echarts常用方法,legend状态支持两张图片切换(四)
- 物流设计大赛优秀作品_独家!亲历全国大学生物流设计大赛,队员、老师、专家这样说...
- Python函数(2)
- java 博客系统_讲解开源项目:5分钟搭建私人Java博客系统
- Fread 和fwrite的参数不同,返回值不同
- SQLite学习笔记(三)--创建内存数据库
- locust+httprunner+Jmeter QQ群微信群问题记录
- xp 系统 mysql日志文件在哪里_SqlServer修改数据库文件及日志文件存放位置教程
- Ionic for Angular 环境搭建
- 《从0到1:CTFer成长之路》 配套题目Web WP
- 裁员先兆?腾讯员工吐槽:公司发起PIP,PCG的鹅们,自求多福吧
- OpenJudge1661:Bomb Game(翻译 day 6)
- java通过身份证号码获取出生日期、性别、年龄
- 售后的设计(退换货)
- 普迪文集团:马来西亚留学必须了解的7个真相
- php 打开word显示无法打开文件,word无法打开文件,因为内容有误怎么办
- webworker应用场景_JavaScript 工作原理之七-Web Workers 分类及 5 个使用场景
热门文章
- 林轩田机器学习技法(Machine Learning Techniques)笔记(三)
- Outlook设置hotmail邮箱POP3和SMTP服务器
- Jmeter——Jmeter限制网速进行测试
- 学java的第一天--javaJDK的安装与配置
- Python对离散变量处理:哑变量编码和one-hot编码
- 100集华为HCIE安全培训视频教材整理 | 防火墙互联技术(三)
- Dev-C++使用to_string()函数报错“[Error] ‘to_string‘ was not declared in this scope”原因及解决方案
- jpa中表的@OneToMany等关联关系
- 生物序列局部比对之Blast算法
- 软件测试中重点测什么,在软件测试中,测试员到底扮演着一个什么样的角色?...