25 【python入门指南】如何编写测试代码
python如何编写测试代码
python内置了unittest,使得写应用层的单元测试变得超乎寻常的简单。
1,执行单个测试函数
#!/bin/python import unittest class TestMathFunc(unittest.TestCase):
def test_add(self):
self.assertEqual(3, 1+2)
self.assertEqual(4, 2+2)
self.assertNotEqual(3, 1+3) def runTest(self):
self.test_add() suite = unittest.TestSuite()
testCase = [TestMathFunc()]
suite.addTests(testCase)
runner = unittest.TextTestRunner(verbosity = 2)
runner.run(suite)
单元测试,只需要仿照上面的例子写就可以完成自己的测试代码。
其中包含几个部分:
a,测试类(要继承unittest.TestCase);
b,测试小组件,unittest.TestSuite,负责将测试类装入进来;
c,执行类,unittest.TextTestRunner;
2,执行多个测试函数
#!/bin/python import unittest class TestMathFunc(unittest.TestCase):
def test_add(self):
self.assertEqual(3, 1+2)
self.assertEqual(4, 2+2)
self.assertNotEqual(3, 1+3) def test_minus(self):
self.assertEqual(-1, 1-2) def runTest(self):
self.test_add()
self.test_minus() suite = unittest.TestSuite()
#testCase = [TestMathFunc('test_add'), TestMathFunc('test_minus')]
testCase = [TestMathFunc()]
suite.addTests(testCase)
runner = unittest.TextTestRunner(verbosity = 2)
runner.run(suite)
修改runTest函数,将测试函数包含进来即可。
3,执行多个测试类
#!/bin/python import unittest class TestStringFunc(unittest.TestCase):
def test_str_concat(self):
self.assertEqual("abcabc", "abc" + "abc") def runTest(self):
self.test_str_concat() class TestMathFunc(unittest.TestCase):
def test_add(self):
self.assertEqual(3, 1+2)
self.assertEqual(4, 2+2)
self.assertNotEqual(3, 1+3) def test_minus(self):
self.assertEqual(-1, 1-2) def runTest(self):
self.test_add()
self.test_minus() suite = unittest.TestSuite()
testCase = [TestMathFunc(), TestStringFunc()]
suite.addTests(testCase)
runner = unittest.TextTestRunner(verbosity = 2)
runner.run(suite)
在suite添加多个测试类,即可。
当然还有另外的方式:
... suite = unittest.TestSuite() testCase = [TestMathFunc()]
suite.addTests(testCase) testCase2 = TestStringFunc()
suite.addTest(testCase2) runner = unittest.TextTestRunner(verbosity = 2)
runner.run(suite)
通过以上代码片段,即可实现,自主地控制多个测试类,自主地控制多个函数执行测试,十分方便。
4,有时候我们不想每个测试函数都显示调用,而是加载所有test_开头的测试函数,怎么做?
构建两个文件:t3.py,main.py
main文件存放执行代码,t3文件仅存放测试类,不存放任何执行代码
main.py
#!/bin/python
#main.py
import unittest
from t3 import TestMathFunc, TestStringFunc suite2 = unittest.TestLoader().discover('.', 't3.py') runner = unittest.TextTestRunner(verbosity = 2)
runner.run(suite2)
t3.py
#!/bin/python
#t3.py import unittest class TestStringFunc(unittest.TestCase):
def test_str_concat(self):
self.assertEqual("abcabc", "abc" + "abc") # def runTest(self):
# self.test_str_concat() class TestMathFunc(unittest.TestCase):
def test_add(self):
self.assertEqual(3, 1+2)
self.assertEqual(4, 2+2)
self.assertNotEqual(3, 1+3) def test_minus(self):
self.assertEqual(-1, 1-2) # def runTest(self):
# self.test_add()
# self.test_minus()
执行main.py,输出结果:
test_add (t3.TestMathFunc) ... ok
test_minus (t3.TestMathFunc) ... ok
test_str_concat (t3.TestStringFunc) ... ok ----------------------------------------------------------------------
Ran 3 tests in 0.001s
通过 unittest.TestLoader().discover('.', 't3.py') 将t3文件中包含的所有测试类导入到suite中。
依赖这个功能,我们可以将所有的需要测试的文件,导入到main主函数中,进行集中管理和测试。注意:这里不再依赖runTest函数,只要函数名中包含test前缀就会被包含进来。
5,有时候测试用例需要提供上下文环境,怎么做?
我们针对例子4,仅修改t3.py测试类。
class TestMathFunc(unittest.TestCase):
def setUp(self):
print("\nTestMathFunc:setup")
self.a = 1
self.b = 2 def test_add(self):
self.assertEqual(3, 1+2)
self.assertEqual(4, 2+2)
self.assertNotEqual(3, 1+3)
self.assertEqual(3, self.a + self.b) def test_minus(self):
self.assertEqual(-1, 1-2)
这里我们准备了环境信息(准备两个变量a和b),使用这两个变量进行单元测试。
test_add (t3.TestMathFunc) ...
TestMathFunc:setup
ok
test_minus (t3.TestMathFunc) ...
TestMathFunc:setup
ok
test_str_concat (t3.TestStringFunc) ... ok ----------------------------------------------------------------------
Ran 3 tests in 0.002s OK
函数的输出如上。
类的单元测试,每个函数执行之前都会执行setUp函数。
对应的是tearDown,用来销毁构建的环境信息。可以自己尝试下。
参考网站:
更详细的解释:https://www.jianshu.com/p/38948d0d73f5
最详细的官方文档:https://docs.python.org/3/library/unittest.html#module-unittest
25 【python入门指南】如何编写测试代码的更多相关文章
- 使用 xunit 编写测试代码
使用 xunit 编写测试代码 Intro xunit 是 .NET 里使用非常广泛的一个测试框架,有很多测试项目都是在使用 xunit 作为测试框架,不仅仅有很多开源项目在使用,很多微软的项目也在使 ...
- AngularJS快速入门指南19:示例代码
本文给出的大部分示例都可以直接运行,通过点击运行按钮来查看结果,同时支持在线编辑代码. <div ng-app=""> <p>Name: <input ...
- 《Three.js 入门指南》3.0 - 代码构建的最基本结构。
3.0 代码构建的最基本结构 说明: 我们必需首先知道,Three.js 的一些入门级概念: 我们需要知道,OpenGL 是一套三维实现的标准,为什么说是标准,因为它是跨平台,跨语言的.甚至CAD以及 ...
- Python入门指南(超详细)
Python 是一门非常容易上手的语言,通过查阅资料和教程,也许一晚上就能写出一个简单的爬虫.但 Python 也是一门很难精通的语言,因为简洁的语法背后隐藏了许多黑科技.本文主要针对的读者是: 毫无 ...
- python入门机器学习,3行代码搞定线性回归
本文着重是重新梳理一下线性回归的概念,至于几行代码实现,那个不重要,概念明确了,代码自然水到渠成. “机器学习”对于普通大众来说可能会比较陌生,但是“人工智能”这个词简直是太火了,即便是风云变化的股市 ...
- Python 入门指南
Release: 3.4 Date: March 29, 2014 Python 是一门简单易学且功能强大的编程语言. 它拥有高效的高级数据结构,并且能够用简单而又高效的方式进行面向对象编程. Pyt ...
- 24 【python入门指南】class
一.类 1.1,构造函数,析构函数 #!/bin/python class dog(): def __init__(self, age, name): self.age = age self.name ...
- 4、基于JZ2440之编写测试代码处理(处理图片识别人脸)
1.代码如下: void detectAndDisplay(Mat image) { CascadeClassifier ccf; //创建脸部对象 //ccf.load(xmlPath); //导入 ...
- python测试代码
前言: 编写函数或者类时,需要编写测试代码,来保证其的功能运行是否按预期的那样工作.在程序添加新的代码时,用来测试是否会破坏本身的功能. 我们使用python自带的unittest模块来测试代码. 编 ...
随机推荐
- python中pop()函数的用法
pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值. 语法:list.pop(obj=list[-1]) //默认为 index=-1,删除最后一个列表值. obj -- ...
- 数据库操作API 或万能的双下划线
数据库操作API: 类型 描述 exact 精确匹配: polls.get_object(id__exact=14). iexact 忽略大小写的精确匹配: polls.objects.filter( ...
- World Cup 996B(排队模拟)
题意:有n个通道,按顺序每一次站一个通道,直到所站的通道没有人 分析:模拟这个过程 #include<cstdio> int main() { ]; while(~scanf(" ...
- APP发行渠道
1,安卓APP发行:google play,原名android store 2,IOS APP: apple store 3,国内各大平台,应用宝,360,小米,华为 ...
- 一次linux启动故障记录
故障背景: 在2.6.32升级内核之后,出现多台设备启动失败,失败的全部都是ssd作为系统盘的机器,bios引导之后,屏幕就黑了,没有打印. 一开是以为是mbr损坏了,所以将启动盘挂载到其他服务器上, ...
- form表单 获取与赋值
form表单中使用频繁的组件: 文本框.单选框.多选框.下拉框.文本域form通过getValues()获取表单中所有name的值 通过setValues({key:values})给对应的name值 ...
- Android进阶AIDL - 2018年4月14日
参考:慕课网 --- 最后三集.Android开发艺术探索 1.在AS中创建aidl文件后,要编译一下才会在gen下生成debug文件: 2.AIDL 不支持short类型,常用的数据类型: 3.AI ...
- python pip 下载慢 配置使用国内源配置
ubuntu apt 使用国内源 设置>软件和更新>下载自 选择mirrors.aliyun.com/ubuntu 更新源sudo apt-get update 安装系统包:sudo ap ...
- idea中pom文件需要添加的依赖
<!-- 如果不添加此节点mybatis的mapper.xml文件都会被漏掉. --> <!-- IDEA的maven项目中,默认源代码目录下的xml等资源文件并不会在编译的时候一块 ...
- 三种方式监听NGUI的事件方法
NGUI研究院之三种方式监听NGUI的事件方法(七) NGUI事件的种类很多,比如点击.双击.拖动.滑动等等,他们处理事件的原理几乎万全一样,本文只用按钮来举例. 1.直接监听事件 把下面脚本直接绑定 ...