当前位置: 首页 > news >正文

python测试框架nose研究_python nose测试框架全面介绍二

二、基本使用

nosetest脚本的使用(在安装完nose之后)

nosetests [options] [(optional) test files or directories]

我们可以使用配置文件,将需要运行的参数放入,配置文件的文件名为nose.cfg中,是标准的配置文件格式,如下:

[nosetests]

verbosity=3with-doctest=1

有部分参数可以不使用或禁用,你可以将配置放入配置文件中,但必须在系统中建立一个环境变量,名字为 NOSE_IGNORE_CONFIG_FILES

除了上面的运行方式,还有以下的途径使用nose

在python脚本中直接使用,如:

importnose

nose.main()

如果你不想使用unittest框架测试结束时这种显示方式,可以在脚本中使用以下方式:

importnose

result= nose.run()

说了这么多,可能还是没看明白,下面来几个实例,

在nose中,测试用例可以以函数和类的形式来组织,下面分别来演示下,

1、以函数形式写的测试用例:

#coding:utf-8

'''Created on 2015年6月22日

@author:'''

importlogging

log= logging.getLogger(__name__)deftest_learn_3():print("test_lean_3")pass

deftest_lean_4():print("test_learn_2")deftest_lean_5():print("test_learn_5")defsetUp():print "0002 test setUp"

deftearDown():print "0002 test teardown"test_learn_3.teardown=test_lean_5.teardown= tearDown

运行的结果如下:

E:\workspace\nosetest_lear>nosetests -v -s test_case.test_case_00020002test setUp

test_case.test_case_0002.test_learn_3 ... test_lean_30002test teardown

ok

test_case.test_case_0002.test_lean_4 ... test_learn_2

ok

test_case.test_case_0002.test_lean_5 ... test_learn_50002test teardown

ok0002 test teardown

这里加了一句

test_learn_3.teardown=test_lean_5.teardown= tearDown,说明在运行完成后就执行tearDown操作

所以这里运行顺序为:setUp-->test_learn_3-->tearDown-->test_learn_3-->test_learn_4-->tearDown-->tearDown

因次,在函数或者函数式的用例组织中,setUp和tearDown只会执行一次,分别是开始及结束,注意:必须要用@classmethod装饰器标识

2、以类的形式组织的用例:

'''@author: huzq'''

classTestClass():defsetUp(self):print "MyTestClass setup"

deftearDown(self):print "MyTestClass teardown"

defTestfunc1(self):print "this is Testfunc1"

pass

deftest_func1(self):print "this is test_func1"

pass

defTestfunc2(self):print "this is Testfunc2"

pass

deftest_func2(self):print "this is test_func2"

pass

运行结果:

E:\workspace\nosetest_lear>nosetests -v -s test_case.test_case_0003

test_case.test_case_0003.TestClass.Testfunc1 ... MyTestClass setup

this is Testfunc1

MyTestClass teardown

ok

test_case.test_case_0003.TestClass.Testfunc2 ... MyTestClass setup

this is Testfunc2

MyTestClass teardown

ok

test_case.test_case_0003.TestClass.test_func1 ... MyTestClass setup

this is test_func1

MyTestClass teardown

ok

test_case.test_case_0003.TestClass.test_func2 ... MyTestClass setup

this is test_func2

MyTestClass teardown

ok----------------------------------------------------------------------Ran4 tests in 0.026s

从运行结果中可以看出,每个用例都会分别执行setUp及tearDown,但是与unittest一样,在类中的测试用例顺序变更了,由字母排序了。

注:在以类形式运行时,还有setUpClass及tearDownClass两个函数功能,是运行测试时,只运行一次。

3、以整个包的形式运行

我们创建python package时会自动生成__init__.py文件,我们将setUp或tearDown写入时,会在每个文件执行时都执行setUp和tearDown,如下

文件内容为:

defsetUp():print "ALL starting..."

然后再次执行以类的文件,结果如下:

E:\workspace\nosetest_lear>nosetests -v -s test_case.test_case_0003

ALL starting...

test_case.test_case_0003.TestClass.Testfunc1 ... MyTestClass setup

this is Testfunc1

MyTestClass teardown

ok

test_case.test_case_0003.TestClass.Testfunc2 ... MyTestClass setup

this is Testfunc2

MyTestClass teardown

ok

test_case.test_case_0003.TestClass.test_func1 ... MyTestClass setup

this is test_func1

MyTestClass teardown

ok

test_case.test_case_0003.TestClass.test_func2 ... MyTestClass setup

this is test_func2

MyTestClass teardown

ok----------------------------------------------------------------------Ran4 tests in 0.026s

OK

从结果中可以看出,在执行前执行了__init__.py中的setUp函数

with_setup修饰器的使用,nose支持在每个用例前使用with_setup来自定义测试用例的setUp及tearDown功能,如下:

defsetup_func():"set up test fixtures"

defteardown_func():"tear down test fixtures"@with_setup(setup_func, teardown_func)deftest():"test ..."

也可以单独定义setup或tearDown,写法就必须如下:

test.setup = setup_func

test.teardown = teardown_func

4、多个文件时nose的执行

如下图,建立了多个py文件

再次运行大的文件,查看运行结果:

E:\workspace\nosetest_lear>nosetests -v test_case

test_case.test_case_0001.test_lean_2 ... ok

test_case.test_case_0002.test_learn_3 ... ok

test_case.test_case_0002.test_lean_4 ... ok

test_case.test_case_0002.test_lean_5 ... ok

test_case.test_case_0003.TestClass.Testfunc1 ... ok

test_case.test_case_0003.TestClass.Testfunc2 ... ok

test_case.test_case_0003.TestClass.test_func1 ... ok

test_case.test_case_0003.TestClass.test_func2 ... ok----------------------------------------------------------------------Ran8 tests in 0.022s

OK

从结果中,可以看出,文件名是按相应的字母排序,但文件里的用例根据函数式及类式不同而不一样。

5、nose运行方式

如前文中提到的一样,nose可以直接放在脚本里面运行,但不建议这样方法,更建议的是通过命令行的方式,对以后的持续集成有好处。

直接运行整个包:

E:\workspace\nosetest_lear>nosetests -v test_case

test_case.test_case_0000.test_learn_3 ... ok

test_case.test_case_0001.test_lean_2 ... ok

test_case.test_case_0002.test_learn_3 ... ok

test_case.test_case_0002.test_lean_4 ... ok

test_case.test_case_0002.test_lean_5 ... ok

test_case.test_case_0003.TestClass.Testfunc1 ... ok

test_case.test_case_0003.TestClass.Testfunc2 ... ok

test_case.test_case_0003.TestClass.test_func1 ... ok

test_case.test_case_0003.TestClass.test_func2 ... ok----------------------------------------------------------------------Ran9 tests in 0.020s

OK

运行某一个模块:

E:\workspace\nosetest_lear>nosetests -v test_case.test_case_0002

test_case.test_case_0002.test_learn_3 ... ok

test_case.test_case_0002.test_lean_4 ... ok

test_case.test_case_0002.test_lean_5 ... ok----------------------------------------------------------------------Ran3 tests in 0.007s

OK

运行某一个用例:

E:\workspace\nosetest_lear>nosetests -v test_case.test_case_0002:test_lean_4

test_case.test_case_0002.test_lean_4 ... ok----------------------------------------------------------------------Ran1 test in 0.003s

OK

运行不同模块下不同用例:

E:\workspace\nosetest_lear>nosetests -v --tests=test_case.test_case_0002:test_lean_4,test_case.test_case_0001:test_lean_2

test_case.test_case_0002.test_lean_4 ... ok

test_case.test_case_0001.test_lean_2 ... ok----------------------------------------------------------------------Ran2 tests in 0.004s

OK

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux最常用的命令列表(推荐)
  • 以及其任何超类对此上下文都是未知的_Kubernetes 安全风险以及 29 个最佳实践
  • 星期天算起来应该是最忙的一天吧(网吧母盘制作需要注意并考虑的问题)
  • python条件表达式方向_python条件表达式:多项分支,双向分支
  • 微软邹欣关于“清华-微软 软件科学实验班”的补充说明
  • python如何使用mysql_Python如何操作MySQL
  • 接口(Interface)的用途
  • python什么格式结尾_python文件以什么结尾
  • ASP.NET应用程序中要小心使用放在App_Code文件夹类中的静态成员
  • redis安装部署linux_redis在liunx环境下的安装和部署
  • python中最小公倍数_python怎么求最大公约数和最小公倍数
  • Windows Mobile开发资源介绍
  • csdn的登录验证做的太有“准”啦
  • al.99.vc挂马分析与解决建议
  • 手机html端 悬浮_移动端WEB开发 — 响应式布局
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • css的样式优先级
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • JAVA_NIO系列——Channel和Buffer详解
  • JavaScript对象详解
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • PHP 7 修改了什么呢 -- 2
  • vuex 学习笔记 01
  • Zepto.js源码学习之二
  • 使用putty远程连接linux
  • 手写双向链表LinkedList的几个常用功能
  • 一份游戏开发学习路线
  • - 转 Ext2.0 form使用实例
  • Android开发者必备:推荐一款助力开发的开源APP
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 关于Android全面屏虚拟导航栏的适配总结
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​secrets --- 生成管理密码的安全随机数​
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • #if和#ifdef区别
  • #stm32驱动外设模块总结w5500模块
  • #每天一道面试题# 什么是MySQL的回表查询
  • #前后端分离# 头条发布系统
  • $.ajax()参数及用法
  • (33)STM32——485实验笔记
  • (a /b)*c的值
  • (C++哈希表01)
  • (php伪随机数生成)[GWCTF 2019]枯燥的抽奖
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (python)数据结构---字典
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (计算机网络)物理层
  • (每日一问)设计模式:设计模式的原则与分类——如何提升代码质量?
  • (未解决)macOS matplotlib 中文是方框
  • .apk文件,IIS不支持下载解决
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .net wcf memory gates checking failed