常见的python的unittest用法
python的unittest好处是通过python脚本编写用例,每个用例可以单独调试初始化和清理动作,因为都是用例都是代码所以调试起来也很方便;它的缺点是得先学会python,难易程度见仁见智吧,对于我来说那些用excel来写测试用例的框架,我看到里面的用例头都大,还不如看代码来的简单呢。
#!/usr/bin/env python
# -*- coding: utf-8 -*- import os,sys
import time
import datetime
import unittest class NginxTest(unittest.TestCase):
def setUp(self): #如果不需要每个case都预置和清理环境,而是每个class用一次,只需要用setUpClass、tearDownClass代替即可,如果是整个文件只需要用一次,则用要用 setUpModule() 和 tearDownModule() 这两个函数了,注意是函数,与 TestCase 类同级
#预置环境
print '--------------NginxTestSetUp--------------\n'
def tearDown(self):
#清理环境
print '--------------NginxTestClear--------------\n' def test_nginx(self):
print 'test_nginx' def test_nginxlog(self):
print 'test_nginxlog' @unittest.skip("must skipping") #必须跳过下面用例,相当少用
def test_mustskip(self):
print 'test_mustskip' # def test_1(self):
# a=1
# return 1
@unittest.skipUnless(sys.platform.startswith("win"), "requires Windows")#根据条件跳过下面这个用例
def test_maybeskip(self):
print 'test_maybeskip' def suite_1(self):#非test开头的用例在NginxTest中不会被跑到
print 'suite_1' def suite_2(self):
print 'suite_2' class PhpTest(unittest.TestCase):#因为每个接口的预置环境可能不一样,所以每个接口的用例应该都用单独class来包含,不过每个class的用例都还是要用test开头
def setUp(self):
#预置环境
print '--------------PhpTestSetUp--------------\n'
def tearDown(self):
#清理环境
print '--------------PhpTestClear--------------\n' def test_php(self):
print 'test_php' def test_phplog(self):
print 'test_phplog' def suite():#这个表示测试集,不要放在class内,否则会提示"没有这样的测试方法在<class'myapp.tests.SessionTestCase'>:的runTest ",我觉得它唯一的好处就是调试的时候可以单独调试某个class而已,我一般不用它,调试时可以注释不需要的class啊 ;-)。不同接口用不同的class也是一种用法,不过那样用我下面说的import不同py的方法更好,因为所有用例写在一起的话文件太大了 ;-)。
suite = unittest.TestSuite()
suite.addTest(NginxTest("suite_1"))
suite.addTest(NginxTest("suite_2"))
suite.addTest(PhpTest("test_php"))
suite.addTest(PhpTest("test_phplog"))
unittest.TextTestRunner().run(suite) if __name__ == '__main__':
# unittest.main(exit = False,verbosity=2)#它是全局方法,把它屏蔽后,不在suite的用例就不会跑,exit = False表示中间有用例失败也继续执行;还有比较常用的verbosity=2,表示显示def名字
suite()#执行suite
如果接口相当多,为了方便维护,建议每个case用独立的py来写,然后用一个“总入口”去import所有py,然后再调用就行了,这是suite就派上用场了
举个例子,luatestcase.py如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*- import os
import time
import datetime
import unittest class LuaTest(unittest.TestCase):
def runTest(self):
print 'anything'
def setUp(self):
#预置环境
print '--------------LuaTestsetUp--------------\n'
def tearDown(self):
#清理环境
print '--------------LuaTestclear--------------\n' def test_lua(self):
print 'test_lua' def test_lualog(self):
print 'test_lualog' def casesuite():
suite = unittest.TestSuite()
suite.addTest(LuaTest("test_lua"))
suite.addTest(LuaTest("test_lualog"))
unittest.TextTestRunner().run(suite)
调用luatestcase.py的“总入口py”就得这样写:
#!/usr/bin/env python
# -*- coding: utf-8 -*- import os,sys
import time
import datetime
import unittest import luatestcase if __name__ == '__main__':
luatestcase.casesuite()
如果luatestcase.py没有用casesuite“收集”它的用例的话,总入口调不了里面的用例的,不知道是不是我的用法有问题,如果有朋友知道欢迎指点。有的文章说用discover可以实现同样的需求,不过我不会。。。
如果要保存unitest的测试输出日志,则需要用到TextTestRunner,例子如下
log_file = "log_file.txt"
f = open(log_file, "w")
runner = unittest.TextTestRunner(stream=f,verbosity=2)
unittest.main(exit = False,testRunner=runner)
f.close()
补充一个方法:每个接口的测试用例按照普通的unittest格式来写,放到统一的目录中,然后用一个总的py去遍历这些unittest文件,然后用os.popen打开,把这些用例的测试结果read下来保存到一个总的log文件中就行了。
最后说一下,我最常用的方法是assertEqual、assertNotEqual、assertTrue。
常见的python的unittest用法的更多相关文章
- day01-day04总结- Python 数据类型及其用法
Python 数据类型及其用法: 本文总结一下Python中用到的各种数据类型,以及如何使用可以使得我们的代码变得简洁. 基本结构 我们首先要看的是几乎任何语言都具有的数据类型,包括字符串.整型.浮点 ...
- 浅谈Python在信息学竞赛中的运用及Python的基本用法
浅谈Python在信息学竞赛中的运用及Python的基本用法 前言 众所周知,Python是一种非常实用的语言.但是由于其运算时的低效和解释型编译,在信息学竞赛中并不用于完成算法程序.但正如LRJ在& ...
- Python高阶用法总结
目录 1. lambda匿名函数 1.1 函数式编程 1.2 应用在闭包 2. 列表解析式 3. enumerate内建函数 4. 迭代器与生成器 4.1 迭代器 4.3 生成器 5. 装饰器 前言: ...
- Python+appium+unittest UI自动化测试
什么是UI自动化 自动化分层 单元自动化测试,指对软件中最小可测试单元进行检查和验证,一般需要借助单元测试框架,如java的JUnit,python的unittest等 接口自动化测试,主要检查验证模 ...
- python单元测试unittest
单元测试作为任何语言的开发者都应该是必要的,因为时隔数月后再回来调试自己的复杂程序时,其实也是很崩溃的事情.虽然会很快熟悉内容,但是修改和 调试将是一件痛苦的事情,如果你在修改了代码后出现问题的话,而 ...
- 【转】常见的python机器学习工具包比较
http://algosolo.com/ 分析对比了常见的python机器学习工具包,包括: scikit-learn mlpy Modular toolkit for Data Processing ...
- Python回调函数用法实例详解
本文实例讲述了Python回调函数用法.分享给大家供大家参考.具体分析如下: 一.百度百科上对回调函数的解释: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函 ...
- Python中unittest采用不同的参数组合产生独立的test case
我们在使用Python的unittest做自动化或者单元测试时,有时需要一个测试用例根据不同的输入.输出组合而执行多次,但是,unittest中一个用例只能有一组参数组合执行,如果采用循环的方式,在生 ...
- 列举一些常见的Python HTTP服务器
要使 Python 写的程序能在 Web 上被访问,还需要搭建一个支持 Python 的 HTTP 服务器.下面列举一些常见的 Python HTTP 服务器,以及它们目前的大致发展情况,以便用户的对 ...
随机推荐
- A real example of vioplot in R (sample data and code attached)
Basic information Package name: vioplot Package homepage: https://cran.r-project.org/web/packages/vi ...
- axios+post方法提交formdata步骤详解
遇到的问题 :怎么看自己发送的格式和后台发送的格式 参考 http://www.php.cn/js-tutorial-396014.html https://blog.csdn.net/qq73705 ...
- SIP消息
SIP消息有两种类型:从客户机到服务器的请求消息(Request)和从服务器到客户机的响应消息(Response). 呼叫控制请求: --INVITE:发起呼叫,并对会话进行描述 --ACK:主叫确认 ...
- python全栈开发 * 15知识点汇总 * 180621
#15 函数二 与 匿名函数1.dir() # 查看内置属性,将对象所有方法名放在另一个列表中.dic={"水果":"香蕉",'蔬菜':"土豆&quo ...
- HTML经典模板总结(地址)
HTML经典模板总结 地址:http://download.csdn.net/tag/html%E6%A8%A1%E6%9D%BF?from=singlemessage
- ASP.NET Core ResponseCaching:基于 VaryByHeader 定制缓存 Key
ASP.NET Core ResponseCaching 提供了缓存http响应内容的能力,通过它可以在本地内存中直接缓存http响应内容,这是速度最快的服务端缓存,省却了网络传输与生成响应内容的开销 ...
- python------接口(get请求、post请求), 图片、歌曲下载,网页返回,上传文件
接口(get请求.post请求 --json), 图片.歌曲下载(context),网页返回(text),上传文件 import requests######################### ...
- 项目实战02:LVS 实现负载均衡
目录 实现基于LVS负载均衡集群的电商网站架构 实战一:LVS的NAT模式实现负载均衡 实战二:LVS的DR 模式实现负载均衡 实战三:实现80.443端口都可访问服务,且LVS实现持久连接 实验四: ...
- c->log技巧
介绍: 在C代码里,有时会加入一些打印信息方便分析问题,可用如下代码替代打印函数,更加方便. // // Created by lady on 18-12-10. // #include <st ...
- delphi with... do和自定义变量重名
with类中的变量和外部变量如果重名,会将外部变量覆盖,这点需要注意!!!!!