pyton unittest
在说unittest之前,先说几个概念:
TestCase 也就是测试用例
TestSuite 多个测试用例集合在一起,就是TestSuite
TestLoader是用来加载TestCase到TestSuite中的
TestRunner是来执行测试用例的,测试的结果会保存到TestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息
简单的单元测试用例:
import unittest
import HTMLTestRunner class TestCase(unittest.TestCase):
def setUp(self):
"""每条用例执行之前运行一次"""
print("-" * 20) def tearDown(self):
"""每条用例执行之后运行一次"""
print("+" * 20) @classmethod
def setUpClass(cls):
"""所有用例执行之前运行一次"""
print("" * 10) @classmethod
def tearDownClass(cls):
"""所有用例执行之后运行一次"""
print("" * 10) def test_case_1(self):
"""assertEqual 两个值相等"""
print("1 == 1")
self.assertEqual(1,1) def test_case_2(self):
"""assertNotEqual 两个值不相等"""
print("2 != 1")
self.assertNotEqual(2, 1) def test_case_3(self):
"""assertTrue 结果为True"""
print("2 > 1")
self.assertTrue(2 > 1) def test_case_4(self):
"""assertFalse 结果为False"""
print("2 < 1")
self.assertFalse(2 < 1) if __name__ == "__main__":
# 运行所有的测试用例
unittest.main()
执行结果:
Launching unittests with arguments python -m unittest D:/python_file/test_func/unittest-01.py in D:\python_file\test_func
6666666666--------------------
1 == 1
++++++++++++++++++++
--------------------
2 != 1
++++++++++++++++++++
--------------------
2 > 1
++++++++++++++++++++
--------------------
2 < 1
++++++++++++++++++++
9999999999 Ran 4 tests in 0.005s OK Process finished with exit code 0
下面是一些常用的断言,也就是校验结果:
assertEqual(a, b) a == b
assertNotEqual(a, b) a != b
assertTrue(x) bool(x) is True
assertFalse(x) bool(x) is False
assertIsNone(x) x is None
assertIsNotNone(x) x is not None
assertIn(a, b) a in b
assertNotIn(a, b) a not in b
skip跳过测试用例:
1、unittest.skip(reason):强制跳过,reason是跳过原因
2、unittest.skipIf(condition, reason):condition为True时跳过
3、unittest.skipUnless(condition, reason):condition为False时跳过
import unittest
import HTMLTestRunner class TestCase(unittest.TestCase):
@classmethod
def setUpClass(cls):
"""所有用例执行之前运行一次"""
print("" * 10) @classmethod
def tearDownClass(cls):
"""所有用例执行之后运行一次"""
print("" * 10) def test_case_1(self):
"""assertEqual 两个值相等"""
print("1 == 1")
self.assertEqual(1,1) @unittest.skip(reason = "强制跳过,reason是跳过原因")
def test_case_2(self):
"""assertNotEqual 两个值不相等"""
print("2 != 1")
self.assertNotEqual(2, 1) @unittest.skipIf(3 > 2, reason = "结果为True时跳过")
def test_case_3(self):
"""assertTrue 结果为True"""
print("2 > 1")
self.assertTrue(2 > 1) @unittest.skipUnless(3 < 2, reason="结果为False时跳过")
def test_case_4(self):
"""assertFalse 结果为False"""
print("2 < 1")
self.assertFalse(2 < 1) if __name__ == "__main__":
# 运行所有的测试用例
unittest.main()
执行结果 :
Launching unittests with arguments python -m unittest D:/python_file/test_func/unittest-01.py in D:\python_file\test_func
66666666661 == 1 Skipped: 强制跳过,reason是跳过原因 Skipped: 结果为True时跳过 Skipped: 结果为False时跳过
9999999999 Ran 4 tests in 0.002s OK (skipped=3) Process finished with exit code 0
suite测试套件
import my_func
import unittest class Test_MyFunc(unittest.TestCase):
"""test my_func""" def test_01(self):
""">>>负数的绝对值"""
self.assertEqual(1, abs(-1)) def test_02(self):
""">>>正数的绝对值"""
self.assertEqual(1, abs(1)) def test_03(self):
""">>>0的绝对值"""
self.assertEqual(0, abs(0)) def suite_1():
"""addTest方法添加用例,可以对case进行排序"""
# 构造一个套件
suite = unittest.TestSuite()
# 向套件例添加用例、排序
tests_myfunc = [Test_MyFunc("test_01"), Test_MyFunc("test_01"), Test_MyFunc("test_01")]
suite.addTests(tests_myfunc)
return suite def suite_01():
"""addTests + TestLoader方法来添加用例,但是这种方法是无法对case进行排序的""" # 第一种方法:传入'模块名.TestCase名'
# 构造测试套件
suite = unittest.TestSuite()
suite.addTests(unittest.TestLoader().loadTestsFromName("s.Test_MyFunc"))
# 这里还可以把多个'模块名.Test_MyFunc'放到一个列表中
# suite.addTests(unittest.TestLoader().loadTestsFromNames(['a.Test_a', 'b.Test_b']))
return suite def suite_02():
"""addTests + TestLoader方法来添加用例,但是这种方法是无法对case进行排序的"""
# 第二种方法:传入TestCase
suite = unittest.TestSuite()
suite.addTests(unittest.TestLoader().loadTestsFromTestCase(Test_MyFunc))
return suite def run(suite):
runner = unittest.TextTestRunner(verbosity=2)
runner.run(suite) run(suite_1())
执行结果:
test_03 (s.Test_MyFunc)
>>>0的绝对值 ... ok
test_01 (s.Test_MyFunc)
>>>负数的绝对值 ... ok
test_02 (s.Test_MyFunc)
>>>正数的绝对值 ... ok
----------------------------------------------------------------------
Ran 3 tests in 0.000s
OK
Launching unittests with arguments python -m unittest D:/python_file/test_func/s.py in D:\python_file\test_func
Ran 3 tests in 0.001s
OK
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
使用套件执行会把case的解释给打印出来。。。
import unittest
import HTMLTestRunner class TestCase(unittest.TestCase):
def test_case_1(self):
""">>>assertEqual 两个值相等"""
print("1 == 1")
self.assertEqual(1,1) @unittest.skip(reason = "强制跳过,reason是跳过原因")
def test_case_2(self):
""">>>assertNotEqual 两个值不相等"""
print("2 != 1")
self.assertNotEqual(2, 1) @unittest.skipIf(3 > 2, reason = "结果为True时跳过")
def test_case_3(self):
""">>>assertTrue 结果为True"""
print("2 > 1")
self.assertTrue(2 > 1) # @unittest.skipUnless(3 < 2, reason="结果为False时跳过")
def test_case_4(self):
"""assertFalse 结果为False"""
print("2 < 1")
self.assertFalse(2 < 1) # if __name__ == "__main__":
# # 运行所有的测试用例
# unittest.main() suite = unittest.TestSuite()
suite.addTests([TestCase("test_case_1"), TestCase("test_case_2")])
unittest.TextTestRunner(verbosity=2).run(suite)
执行结果:
1 == 1test_case_1 (unittest-01.TestCase)
>>>assertEqual 两个值相等 ... ok
test_case_2 (unittest-01.TestCase)
>>>assertNotEqual 两个值不相等 ... skipped '强制跳过,reason是跳过原因' ----------------------------------------------------------------------
Ran 2 tests in 0.000s OK (skipped=1)
1 == 1
测试结果输出到文件:
verbosity控制测试结果的详细程度:0表示简单,1表示一般,2表示详细
测试结果输出到TXT
suite = unittest.TestSuite()
suite.addTest(TestEmail("test_01"))
suite.addTest(TestEmail("test_03"))
with open("result1.txt", "a", encoding="utf-8") as f:
runner = unittest.TextTestRunner(stream=f, verbosity=2).run(suite)
测试结果输出到HTML
suite = unittest.TestSuite()
suite.addTests([TestEmail("test_01"), TestEmail("test_03")])
with open(r"result1.html", "wb") as f:
HTMLTestRunner.HTMLTestRunner(stream=f, verbosity=2, title="测试报告", description="测试报告详情").run(suite)
pyton unittest的更多相关文章
- python_单元测试unittest
Python自带一个单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回的结果方法和一些用例执行前的初始化操作. 步骤1:首先引入unittest模块--import un ...
- python单元测试unittest
单元测试作为任何语言的开发者都应该是必要的,因为时隔数月后再回来调试自己的复杂程序时,其实也是很崩溃的事情.虽然会很快熟悉内容,但是修改和 调试将是一件痛苦的事情,如果你在修改了代码后出现问题的话,而 ...
- Python 下的unittest测试框架
unittest测试框架,直接上图吧: data:数据:主要格式为CSV:读取方式:csv.reade: public:封装的模块:通用的模块单独封装,所需参数设置为变量: testcase:测试用例 ...
- Python unittest appium
import unittest from appium import webdriver from appium.common.exceptions import NoSuchContextExcep ...
- selenium-webdriver(python) (十六) --unittest 框架
学习unittest 很好的一个切入点就是从selenium IDE 录制导出脚本.相信不少新手学习selenium 也是从IED 开始的. IDE学习参考: 菜鸟学自动化测试(一)----selen ...
- Node.js的UnitTest单元测试
body{ font: 16px/1.5em 微软雅黑,arial,verdana,helvetica,sans-serif; } 在专业化的软件开发过程中,无论什么平台语言,现在都需要UnitTes ...
- unittest使用过程中sys.exit(not self.result.wasSuccessful())
起因: 在运行下面的unittest过程中出现了个Traceback: 被测试脚本: # splitter.py def split(line, types=None, delimiter=None) ...
- 三言两语聊Python模块–单元测试模块unittest
实际上unittest模块才是真正意义上的用于测试的模块,功能强大的单元测试模块. 继续使用前面的例子: # splitter.py def split(line, types=None, delim ...
- unittest测试驱动之HTMLTestRunner.py
对于自动化来说,测试报告是必须的,在敏捷化的团队中,团队中的成员需要自动化这边提供自动化的测试报告,来判断系统的整体质量以及下一步的测试策略.单元测试库生成测试输出到控制台的窗口上,但是这样的结果看起 ...
随机推荐
- Python *Mix_w
Python的历史起源: 1989年圣诞节期间,由吉多.范罗苏姆创始. Python的优点"优美""明确""简单" python是一门解释型 ...
- BPM如何选型?
Gartner 对BPM 的定义是:BPM 是一个描述一组服务和工具的一般名词,这些服务和工具为显式的流程管理(如流程的分析.定义.执行.监视和管理)提供支持. 不是所有的BPM 产品都能包括BPM ...
- 管理商品demo
1.写一个管理商品的程序# 1.商品存在文件里面# 2.添加商品的时候,商品存在的就不能添加了,数量只能是大于0的整数,价格可以是小数.整数,但是只能是大于0的# 商品名称# 商品价格# 商品数量# ...
- 【Java集合系列二】LinkedList解析
一.简介 1.LinkedList继承关系 2.LinkedList底层实现 LinkedList使用双向链表存储数据,所以没有默认的容量,也不会有扩容一说.只有两个指针,永远指向链表的两端:firs ...
- oracel sql分组求和过滤条件
- 剑指offer题库
1.题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路: 因为矩阵的 ...
- raid的一些简单知识
日一.RAID定义RAID(Redundant Array of Independent Disk 独立冗余磁盘阵列)技术是加州大学伯克利分校1987年提出,最初是为了组合小的廉价磁盘来代替大的昂贵磁 ...
- Linux下命令行cURL的10种常见用法示例
curl的命令行工具功能非常强大,这些数据交互的功能基本上都是通过URL方式进行的,下面这篇文章主要给大家分享了在Linux中命令行cURL的10种常见用法示例,通过示例代码介绍的非常详细,需要的朋友 ...
- 使用CSMA/CD协议一个计算题
题干: 首先计算一下A这个以太网所容许的最短的帧它的发送帧的长度时间为: (8(前同步码为8)+64(最短帧长))*8(单位转换b到B)=576比特 有关于单位转换: B是Byte的缩写,B就是Byt ...
- js--变量对象总结
当 JavaScript 代码执行一段可执行代码(executable code)时,会创建对应的执行上下文(execution context). 对于每个执行上下文,都有三个重要属性: 变量对象( ...