最近在使用openstack自动化测试工具tempest,tempest中用到了nose,这里先了解一下nose的用法吧。

关于nose的安装什么的就不介绍了,这个可以在网上搜一搜。

这里主要介绍nose框架和如何使用。好吧,也是烂大街的东西,这里全当总结汇总下吧。

第一部分:

这一部分应该写写nose的前世今生,祖宗十八代什么的,可惜找了下没看到比较详细的介绍,可能大家都觉着知道是个啥,怎么用就行了吧。好吧,me,too~

python的单元测试有很多,tempest里面就涉及到了nose,unittest,testtools。这三个是啥关系呢?好吧,就是基友关系。

unittest是python单元测试的老祖宗,里面提供了很多单元测试的概念。比如testcase,testsuite,testloader,texttestrunner。

1、testcase 也就是测试用例,一般一个unittest的实例就是一个testcase,可以理解为测试的最小单元。

2、testsuite 测试套,就是多个测试case的集合。多个testcase加载后,然后testsuite编排执行顺序啥的。

3、testloader 测试加载器。啥意思呢,你写的测试用例要首先实例化了以后才能用,但是怎么实例化,实例化哪些这个就是testloader干的活了。它通过各种匹配原则来进行加载,创建测试用例的实例,然后返回。

4、texttestrunner,这个是真正执行测试用例的,执行之前testloader加载的那些实例。执行测试用例实例的run方法(和多线程那个run一个意思),然后用例就咔咔执行了。

然后testtools看他不爽,给它增强了一下。看了tempest里面的那个test.py,它是继承自testtools的,至于它具体干了啥,没仔细研究过。不过用例执行的执行结构啥的还是一样一样的。

好了,可以介绍下nose了。其实吧,看了tempest以后,大部分的还是继承自testtools,感觉nose在里面的作用就是个testloader,加载testcase的。不过使用nose用来加载还是很强大的,可以运行一个类、函数、文件、包什么的。好像是有个匹配规则,还没有看过nose的代码,这里就不瞎哔哔了。

看个栗子:

unittest的灵感来自junit,好吧,我也没用过。但是很明显的一个痕迹就是搞个unittest测试用例,你怎么也得写个类,继承自unittest,然后再写方法。比如下面这种:

import unittestclass A(object):def __init__(self):passdef add(self, a, b):return a - bclass SimpleTest(unittest.TestCase):def setUp(self):self.a = A()def test_hehe(self):assert self.a.add(10, 9) == 1if __name__ == '__main__':unittest.main()

其实上面这么多,有用的部分就是 assert self.a.add(10, 9) == 1,其他的都是准备工作。

为啥要搞这么麻烦呢?如果我可以直接把多余的省了,直接使用那句话不就行了。好吧,nose满足你,如果使用nose写个用例,最多也就下面这样吧。

def test_hehe():a = A()assert self.a.add(10, 9) == 1

好了,不必折腾整个类什么的了。当然这个地方就举例说明下,肯定把nose的优点给写出来了。其实nose是支持多种形式的,比如一个测试函数,一个测试类什么的都可以。

第二部分:

这部分主要介绍nose的使用。目前使用的也只是最简单的方法:nosetests xxx,其他的还没有深入研究。

其中xxx可以是目录、包、文件等,nose可以识别这些东东中的测试用例并执行。

如果想单独执行一个类中的测试方法,可以使用nosetests xxxx.py:Testclass.testmethod 其中xxxx.py是文件名,Testclass是类名,testmethod是要执行的方法。

第三部分:

这部分主要介绍tempest中的具体应用。

黑盒测试的主要工作就是模拟各种场景对待测系统进行测试(貌似有个名字叫数据驱动测试)。所以测试框架要做的也是围绕着构造数据来展开的。

一个完整的用例应该包括:前置条件,测试过程执行,后置条件。这些unittest都已经为你考虑过了,这个就是setUp和teardown方法的由来了。

但是看了tempest中的一个test.py(算是所有测试的基类吧)后,对一个类中的setUp和setUpClass的执行不是很清楚。不说了,直接上简化后的代码搞一把试试。

# encoding:utf-8
import testtoolsclass TestSetUp(testtools.TestCase):@classmethoddef setUp(cls):print "setUp running"@classmethoddef setUpClass(cls):print "setUpClass running"@classmethoddef tearDown(cls):print "teardown running"@classmethoddef tearDownClass(cls):print "teardownclass running"def test_func1(self):print "func1 running"def test_func2(self):print "func2 running"def test_func3(self):print "func3 running"

使用nosetests 执行,结果如下,其中-s是会打印具体输出,不加的话就看不到输出了:

从上面的输出可以看出执行步骤:setupClass --> setup -->testfunc-->teardown -->setup -->testfunc-->teardown ...

setUpclass相当于全局的前置条件,teardownclass相当于全局的后置条件,setUp相当于每个用例的前置条件,teardown相当于每个用例的后置条件。

所以tempest中初始化那些请求的client都是在setupclass中的resource_setup中进行的,然后在用例的整个运行周期中都有效。

tempest中的使用

python测试框架nose研究相关推荐

  1. python测试框架nose研究_详解Python nose单元测试框架的安装与使用

    本文介绍了Python nose单元测试框架的安装与使用 ,分享给大家,具体如下: 安装(Python2下安装) pip install nose 原理与命名规则 Nose会自动查找源文件.目录或者包 ...

  2. python 测试框架nose (nosetests)

    官网文档       nose 1.3.7 documentation 简单介绍 nose是一个比较牛逼的单元测试框架,nose不是python自带模块,这里我才用pip的方式安装 pip insta ...

  3. python测试框架untest_Python测试框架之unittest和pytest

    目前搜狗商城接口测试框架用的是unittest+HTMLTestRunner,case数有1097条,目前运行一次自动化测试,时长约为30分钟,期望控制在10分钟或者更短的时间内.近期打算重新优化框架 ...

  4. Python测试框架Pytest的基础入门

    Pytest简介 Pytest is a mature full-featured Python testing tool that helps you write better programs.T ...

  5. Python测试框架pytest(05)fixture - error和failed、fixture实例化、多个fixture

    Python测试框架pytest系列可以查看下列 Python测试框架pytest(01)简介.安装.快速入门_编程简单学的博客-CSDN博客 Python测试框架pytest(02)PyCharm设 ...

  6. Python测试框架pytest(04)fixture - 测试用例调用fixture、fixture传递测试数据

    Python测试框架pytest系列可以查看下列 Python测试框架pytest(01)简介.安装.快速入门_编程简单学的博客-CSDN博客 Python测试框架pytest(02)PyCharm设 ...

  7. Python测试框架pytest(03)setup和teardown

    Python测试框架pytest系列可以查看下列 Python测试框架pytest(01)简介.安装.快速入门_编程简单学的博客-CSDN博客 ​​​​​​Python测试框架pytest(02)Py ...

  8. Python测试框架之pytest详解

    目录 前言 1.pytest安装 2.Pytest的setup和teardown函数 3.Pytest配置文件 4 Pytest常用插件 4.1 前置条件: 4.2 Pytest测试报告 5.pyte ...

  9. gtest测试框架使用详解_【python】新手小白必看,教你如何使用全功能Python测试框架 - python秋枫...

    大家好,我是在升职加薪道路上越奋斗头发越少的阿茅. 今天来跟想入门还徘徊在门外的小白们聊一聊 1.安装和简单使用 2.配置文件 3.断言 一. 第1步 (安装和简单使用) pytest是一个非常成熟的 ...

最新文章

  1. 3.2 python实战_线性回归的梯度下降法
  2. 假设你有一个数组,其中第i 个元素是第i天给定股票的价格。设计算法以找到最大利润。你可以根据需要完成尽可能多的交易(即,多次买入并卖出一股股票)。注意:您不能同时进行多笔交易(即,您必须在再次购买之前
  3. Memcached常用操作
  4. 新手入门教程-------Spring Boot中集成RabbitMQ
  5. 【过关斩将】如何制作高水平简历-观念篇
  6. 最后采用加权求和的方式得到样本的_一种婴幼儿视力自动检测方法与流程
  7. iphone8验证服务器出错,某平台上买的“全新国行正品iphone8手机,支持官方验证”用了不到两个月坏了...
  8. git fatal: detected dubious ownership in repository
  9. 虚拟内存,页表,快表,多级页表,倒排页表
  10. 【BZOJ3940】[USACO2015 Feb] Censoring (AC自动机的小应用)
  11. GRU(Gate Recurrent Unit,门控循环单元)结构
  12. uni-app APP端-微信登录流程
  13. 3D激光SLAM:LeGO-LOAM---两步优化的帧间里程计及代码分析
  14. Vue-什么是vuex
  15. 5种顶级逻辑思维训练法:1min 轻松上手,工作学习都能用
  16. 20级网络学生---循环
  17. 7. STM32——定时器中断(1秒闪烁灯)
  18. 三维薄板样条,用于三维模型变形(c++)
  19. 微软CTO韦青:深度学习不仅是知识,而是思维范式的转变
  20. 道法自然:我受益最多的老师

热门文章

  1. 编写函数:笛卡尔坐标系(Append Code)
  2. 南京工业大学计算机考研难吗,南京工业大学(专业学位)计算机技术考研难吗
  3. 为何概述(翻译)CS229这个系列
  4. 手写:下划线转为驼峰命名法
  5. 「微服务系列」统一网关Gateway
  6. python3_面向对象
  7. 读取excel文件并使用matplotlib绘图(含柱状图、柱状图加数值的显示和直方图)
  8. C语言实现获取文件后缀、修改后缀
  9. 淮阴工学院计算机科学讲师,淮阴工学院计算机与软件工程学院统战人士工作业绩...
  10. 1.GoAhead运行