Python unittest使用
一:避坑点
1、使用unittest时,默认不会执行if __name__ == '__main__':,而是以“Run 'Unittests in XXX' ”方式运行。
我们需要通过menu:Run->Edit Configurations打开配置窗口,在Python下,新建一个运行方式case_python(名字自取),将运行的脚本加入,保存后,以此方式运行测试脚本,就能进入方法if __name__ == '__main__':。
script path填入脚本的路径。Working directory填入项目的根目录。
2、进入方法if __name__ == '__main__':,我们可以添加自定义的测试顺序,或者将测试结果输出到外部文件或html文件中。
二:自定义测试case执行顺序
1、if __name__ == '__main__':中,可以通过TestSuite定义case执行顺序
suite = unittest.TestSuite() suite.addTest(TestCreateTask("test_02")) suite.addTest(TestCreateTask("test_01"))2、定义TestCase时,可以通过case的名称来定义执行顺序
如:def test_01(self)、def test_02(self)
能通过名称来确定执行顺序的原因是:unittest源码getTestCaseNames对测试用例的名称进行了排序,默认是根据ASCII码的顺序加载测试用例,数字与字母的顺序为:0-9,A-Z,a-z。
三:将测试结果输出到外部文件
if __name__ == '__main__':# 安装顺序执行casesuite = unittest.TestSuite()suite.addTest(TestCreateTask("test_02"))suite.addTest(TestCreateTask("test_01"))# 执行结果输出到外部文件with open("unit_test_result.txt", "w") as f:# verbosity = 2 查看完成的执行情况# verbosity默认为1,可以设置为0和2。# 0 (静默模式): 你只能获得总的测试用例数和总的结果。# 1 (默认模式): 非常类似静默模式 只是在每个成功的用例前面有个“.” 每个失败的用例前面有个 “E”# 2 (详细模式):测试结果会显示每个测试用例的所有相关的信息 并且 你在命令行里加入不同的参数可以起到一样的效果runner = unittest.TextTestRunner(stream=f, verbosity=2)runner.run(suite)
四:将测试结果生成Html文件
import unittest
from test_unit import TestCreateTask
from HTMLTestRunner import HTMLTestRunner
if __name__ == '__main__':
suite = unittest.TestSuite() suite.addTest(TestCreateTask("test_02")) suite.addTest(TestCreateTask("test_01"))
with open('HTMLReport.html', 'w') as f:
runner = HTMLTestRunner(stream=f,
title='TestCreateTaskTest Report',
description='generated by HTMLTestRunner.',
verbosity=2
)
runner.run(suite)
五:完整的unittest case使用实例
1、一个class继承了unittest.TestCase,便是一个测试用例,但如果其中有多个以
test
开头的方法,那么每有一个这样的方法,在load的时候便会生成一个TestCase实例。import unittestclass TestCreateTask(unittest.TestCase):# 测试前准备,该方法一个测试用例,只执行一次@classmethoddef setUpClass(cls):print('******** Test Start ********')# 用来清理环境,已备之后的测试,该方法一个测试用例,只执行一次@classmethoddef tearDownClass(cls):print('******** Test End ********\n')# 测试前准备,测试实例的每个测试case执行一次def setUp(self):set_test_data()# 用来清理环境,已备之后的测试,测试实例的每个case执行一次def tearDown(self):pass# case2def test_02(self):self.assertEqual(24,2) # case1def test_01(self):self.assertEqual(24,3)if __name__ == '__main__':
# 安装顺序执行case suite = unittest.TestSuite() suite.addTest(TestCreateTask("test_02")) suite.addTest(TestCreateTask("test_01")) # 执行结果输出到外部文件 with open("unit_test_result.txt", "w") as f: # verbosity = 2 查看完成的执行情况
# verbosity默认为1,可以设置为0和2。
# 0 (静默模式): 你只能获得总的测试用例数和总的结果。
# 1 (默认模式): 非常类似静默模式 只是在每个成功的用例前面有个“.” 每个失败的用例前面有个 “E”
# 2 (详细模式):测试结果会显示每个测试用例的所有相关的信息 并且 你在命令行里加入不同的参数可以起到一样的效果
runner = unittest.TextTestRunner(stream=f, verbosity=2)runner.run(suite)
六:unittest核心工作原理
unittest中最核心的四个概念是:test case, test suite, test runner, test fixture。
一个TestCase的实例就是一个测试用例。什么是测试用例呢?就是一个完整的测试流程,包括测试前准备环境的搭建(setUp),执行测试代码(run),以及测试后环境的还原(tearDown)。元测试(unit test)的本质也就在这里,一个测试用例是一个完整的测试单元,通过运行这个测试单元,可以对某一个问题进行验证。
而多个测试用例集合在一起,就是TestSuite,而且TestSuite也可以嵌套TestSuite。
TestLoader是用来加载TestCase到TestSuite中的,其中有几个loadTestsFrom__()方法,就是从各个地方寻找TestCase,创建它们的实例,然后add到TestSuite中,再返回一个TestSuite实例。
TextTestRunner是来执行测试用例的,其中的run(test)会执行TestSuite/TestCase中的run(result)方法。
测试的结果会保存到TextTestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息。而对一个测试用例环境的搭建和销毁,是一个fixture。
————————————————
版权声明:本文为CSDN博主「huilan_same」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/huilan_same/article/details/52944782
七:unittest的skip装饰器
skip装饰器一共有三个 unittest.skip(reason)、unittest.skipIf(condition, reason)、unittest.skipUnless(condition, reason),skip无条件跳过,skipIf当condition为True时跳过,skipUnless当condition为False时跳过。
@unittest.skip("I don't want to run this case.")
def test_divide(self):
"""Test method divide(a, b)"""
print "divide"
————————————————
版权声明:本文为CSDN博主「huilan_same」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/huilan_same/article/details/52944782
八:断言Assert----结果对比的函数
Method
Checks that
New In
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:判断是否是同一对象(id(a))
3.1
asserNottIs(a,b)
a is not b
3.1
assertIsNone(x)
x is None
3.1
assertIsNotNone(x)
x is not None
3.1
assertIn(a,b):a是否在b中
a in b
3.1
assertNotIn(a,b)
a not in b
3.1
assertIsInstance(a,b):实例对象
isInstance(a,b)
3.2
assertNotIsInstance(a,b)
not isInstance(a,b)
3.2
Python unittest使用相关推荐
- python单元测试框架-Python unittest单元测试框架总结
什么是单元测试 单元测试是用来对一个模块.一个函数或者一个类来进行正确性检验的测试工作. 比如对于函数abs(),我们可以编写的测试用例为: (1)输入正数,比如1.1.2.0.99,期待返回值与输入 ...
- pythonunittest接口测试_基于python+unittest +requests接口测试
2019独角兽企业重金招聘Python工程师标准>>> 谈到接口测试,大家都不会感到陌生.接口测试的工具和实现方式也有很多,比如ant+jmeter+jemkins.postman. ...
- python appium自动化测试框架unittest_Appium基于Python unittest自动化测试 自动化测试框架 -- PO并生成html测试报告...
基于python单元测试框架unittest完成appium自动化测试,生成基于html可视化测试报告 代码示例: #利用unittest并生成测试报告 class Appium_test(unitt ...
- python unittest断言_python unittest之断言及示例
assert.png 前言 python unintest单元测试框架提供了一整套内置的断言方法. 如果断言失败,则抛出一个AssertionError,并标识该测试为失败状态 如果异常,则当做错误来 ...
- Selenium UI自动化测试(四)Python+Unittest+HTMLTestRunner测试报告—百度hao123实例
Python+Unittest+HTMLTestRunner测试报告-百度个人中心实例 环境配置:https://blog.csdn.net/sevensolo/article/details/100 ...
- Python unittest –单元测试示例
Today we will learn about python unittest and look through python unit test example programs. In pre ...
- Python+unittest+requests 接口自动化测试框架搭建 完整的框架搭建过程 实战
一.Python+unittest+requests+HTMLTestRunner 完整的接口自动化测试框架搭建_00--框架结构简解 首先配置好开发环境,下载安装Python并下载安装pycharm ...
- python unittest执行程序在pycharm可以成功运行但使用cmd会报错:E列表 test_register (unittest.loader._FailedTest)
python unittest执行程序在pycharm可以成功运行但使用cmd会报错 如题,在pycharm中执行主程序运行成功: 用例執行.debug日志均沒問題 在cmd执行主程序报错: 最惡心的 ...
- python+Unittest+ddt 自动化测试
此为系列博客 Python测试 Coverage代码覆盖率 python+Unittest+ddt 自动化测试 (当前位置) UnitTest+HTMLTestRunner 测试可视化 文章目录 安装 ...
- 简单实现接口自动化测试(基于python+unittest)
简单实现接口自动化测试(基于python+unittest) 简介 本文通过从Postman获取基本的接口测试Code简单的接口测试入手,一步步调整优化接口调用,以及增加基本的结果判断,讲解Pytho ...
最新文章
- python读取dat数据anaconda_基于python的大数据分析-pandas数据读取(代码实战)
- metasploit 漏洞评级翻译
- 在MATLAB中读取同一路径下多个txt或mat文件
- 51. N-Queens
- transfer = C only read dynamically - why it fails to work
- MYSQL 数据库怎样快速的复制表以及表中的数据
- Kafka的存储设计
- 特朗普社交应用登苹果App Store下载量榜首
- TCP三次挥手四次握手
- cisco配置交换机管理地址和默认网关
- 【R可视化】你家乡的肯德基都在哪儿?
- android 游戏 柄,Android手柄游戏中心-葡萄游戏厅
- bandicam安装注册
- 人工客服——图灵机器人教程
- 语义角色标注 Semantic Role Labeling(SRL) 初探(整理英文tutorial)
- 京东茅台抢购方法,与黄牛站在同一起跑线
- android gravity 属性解析
- 为啥需要RPC,而不是简单的HTTP?
- 基于微信维修报修物业小程序系统设计与实现 开题报告
- 微服务架构的好处和弊端
热门文章
- 重入锁ReentrantLock详解
- hockeyapp 自动收集crash
- 计算两点间的距离,入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离。
- Python音频转成numpy数组:numpy.frombuffer报错ValueError: buffer size must be a multiple of element size
- 拜伦之女传奇一生:世界第一位计算机程序员
- 9-2 什么是零点漂移 产生零点漂移的主要原因是什么 差动放大电路为什么能抑制零点漂移
- 百度地图定位和IP地址定位
- 信息熵、gini、信息增益
- 利用火狐浏览器的编辑和重发功能修改网站POST请求
- 【连续介质力学】弹性与超弹性、粘弹性、弹塑性、柯西弹性