python 测试框架之---testtools
在tempest框架中,使用的是testtools为基础框架来运行接口自动化
一、初识
testools是属于python中诸多自动化框架中的一个,官方文档如下:
http://testtools.readthedocs.io/en/latest/overview.html
但是,官方中的例子还有一个myproject基础文件,让很多同学很困惑,下面我们看看使用testtool最简单的框架,如下
from testtools import TestCase class TestLearnTesttools(TestCase): def setUp(self):
super(TestLearnTesttools, self).setUp()
print "this is setUp" def test_case_1(self):
self.assertIn('a', 'cat') def test_case_2(self):
assert 2 == 3 def tearDown(self):
super(TestLearnTesttools, self).tearDown()
print "this is tearDown" @classmethod
def setUpClass(cls):
print "this is setUp class"
注意,setUp必须写super,不然会报如下错误
TestCase.setUp was not called. Have you upcalled all the way up the hierarchy fr
om your setUp? e.g. Call super(TestLearnTesttools, self).setUp() from your setUp
().
不然你就不要写setUp,这点感觉这个框架好奇葩...
运行结果如下:
E:\workspace\test_case>python -m testtools.run testtools_learn.py
Tests running...
this is setUp class
this is setUp
this is tearDown
this is setUp
this is tearDown
======================================================================
FAIL: testtools_learn.TestLearnTesttools.test_case_2
----------------------------------------------------------------------
Traceback (most recent call last):
File "testtools_learn.py", line , in test_case_2
assert ==
AssertionError Ran tests in .005s
FAILED (failures=)
在官网中,testtool可以使用很多种方式来运行,直接贴过来吧
- testrepository
- Trial
- nose
- unittest2
- zope.testrunner (aka zope.testing)
那下面我们用nose来运行一下看看:
E:\workspace\test_case>nosetests -s -v testtools_learn.py
ALL starting...
this is setUp class
test_case.testtools_learn.TestLearnTesttools.test_case_1 ... this is setUp
this is tearDown
ok
test_case.testtools_learn.TestLearnTesttools.test_case_2 ... this is setUp
this is tearDown
FAIL ======================================================================
FAIL: test_case.testtools_learn.TestLearnTesttools.test_case_2
----------------------------------------------------------------------
_StringException: Traceback (most recent call last):
File "E:\workspace\nosetest_lear\test_case\testtools_learn.py", line , in te
st_case_2
assert ==
AssertionError ----------------------------------------------------------------------
Ran tests in .012s FAILED (failures=)
感觉还是nose的格式好看。
二、了解
既然知道testtool是怎么写及怎么运行了,我们来仔细看看,testtools到底是个什么东东
还是看官网,可以得知道,testtools是python标准库中unittest的扩展,从testtools源码中可以看到,继承的还是unittest2.TestCase
class TestCase(unittest.TestCase):
"""Extensions to the basic TestCase. :ivar exception_handlers: Exceptions to catch from setUp, runTest and
tearDown. This list is able to be modified at any time and consists of
(exception_class, handler(case, result, exception_value)) pairs.
:ivar force_failure: Force testtools.RunTest to fail the test after the
test has completed.
:cvar run_tests_with: A factory to make the ``RunTest`` to run tests with.
Defaults to ``RunTest``. The factory is expected to take a test case
and an optional list of exception handlers.
""" skipException = TestSkipped run_tests_with = RunTest
至于为什么要使用Testtools,官网上也说了,
1、有更好的断言方式
testtool加了assertIn
, assertIs
, assertIsInstance及其它的。
虽然unittest标准库中也有这3个方式,但这3个方式是python 2.7之后才有的
具体testtool的断言优化可以到这里testtools.assertions查询
特别用法举例,来源网上
assertThat
def test_abs(self):
result = abs(-7)
self.assertEqual(result, 7)
self.assertNotEqual(result, 7)
self.assertThat(result, testtools.matchers.Equals(7))
self.assertThat(result, testtools.matchers.Not(Equals(8)))
expectFailure
def test_expect_failure_example(self):
self.expectFailure(
"cats should be dogs", self.assertEqual, 'cats', 'dogs')
2、更多调试手段
在测试过程中,如果你想得到更多的错误信息,可以使用TestCase.addDetail
TestCase.addDetail具体使用这里不写,感觉没用
3、fixtures
测试用例一般都包含一个 setUp 方法来准备测试环境,主要是生成一些测试过程中
会用到的变量与对象。有时候我们会需要在不同的测试用例间共享这些变量与对象,避免
在每一个测试用例中重复定义。所以就有了 fixtures,它制定了一套规范,将测试代码与
环境准备代码分离开来,使得测试代码亦可方便的组织和扩展。
class SomeTest(TestCase):
def setUp(self):
super(SomeTest, self).setUp()
self.server = self.useFixture(Server())
4、Skipping tests
检测到环境不符合要求的情况下,忽略某些测试
def test_make_symlink(self):
symlink = getattr(os, 'symlink', None)
if symlink is None:
self.skipTest("No symlink support")
symlink(whatever, something_else)
5、Test attributes
标签,与nose框架中的attr一样的道理,testtool中同样支持,使用时使用的参数是--load-list
from testtools.testcase import attr, WithAttributes class AnnotatedTests(WithAttributes, TestCase): @attr('simple')
def test_one(self):
pass @attr('more', 'than', 'one')
def test_two(self):
pass @attr('or')
@attr('stacked')
def test_three(self):
pass
6、自定义的错误输入
self.exception_handlers.insert(-1, (ExceptionClass, handler)).
这样,在任何一个setUp teardown或测试用例中raise ExceptionClass都会调用
更多的用法请查阅framework folk
python 测试框架之---testtools的更多相关文章
- 用 Python 测试框架简化测试
用 Python 测试框架简化测试 摘要:本文将向您介绍了三种流行 Python 测试框架(zope.testing,py.test,nose)的基本特性,并讨论新一代的测试风格. 最近出现了行业级的 ...
- 【转载】Python测试框架doctest
原文在这里 :Python测试框架doctest 先记录一下,直接复制粘贴后,排版是乱的,后续再弄.
- 全功能Python测试框架:pytest
python通用测试框架大多数人用的是unittest+HTMLTestRunner,这段时间看到了pytest文档,发现这个框架和丰富的plugins很好用,所以来学习下pytest. imag ...
- <自动化测试>之<使用unittest Python测试框架进行参数化测试>
最近在看视频时,虫师简单提到了简化自动化测试脚本用例中的代码量,而python中本身的参数化方法用来测试很糟糕,他在实际操作中使用了parameterized参数化... 有兴趣就查了下使用的方法,来 ...
- python 测试框架nose
python测试框架nose nose不是python自带模块,这里我才用pip的方式安装 pip install nose 这样就完成了安装,然后再确认下是否安装成功了,直接打开cmd输入noset ...
- Python测试框架unittest
Python测试框架unittest 一.unittest框架 (1)unittest特点 1.python自带的单元测试框架,不需要安装 2.用例执行互不干扰 3.提供不同范围的setUp和tear ...
- Python测试框架pytest入门基础
Pytest简介 Pytest is a mature full-featured Python testing tool that helps you write better programs.T ...
- 收藏清单: python测试框架最全资源汇总
xUnit frameworks 单元测试框架 frameworks 框架 unittest - python自带的单元测试库,开箱即用 unittest2 - 加强版的单元测试框架,适用于Pytho ...
- 转 python测试框架最全资源汇总
转自: http://www.testclass.net/list/python_list_1/ xUnit frameworks(单元测试框架) frameworks 框架 unittest - p ...
随机推荐
- git push 不再需要重复输入账户密码的技巧
添加用户环境变量 计算机—属性—高级系统设置—环境变量 变量名 HOME 变量值%USERPROFILE% 在用户文件夹C:\Users\YourName下新建一个名为_netrc的文件 machin ...
- input checkbox复选框点击获取当前选中状态jquery
function checkAll(id) { //用is判断 // let checkStatus=$(id).is(':checked'); // console.log(checkStatus) ...
- BarTender 2016表单中的“秤显示”控件
BarTender 2016中的表单是一个非常实用的工具,它可以实现数据输出提示,查询提示和同一表单的记录选择.这些都离开可供添加的控件,“秤显示”控件也是我们打印尝尝需要涉及的,今天我们就来看看什么 ...
- Android开发学习笔记-SharedPreferences的用法
SharedPreferences介绍: 做软件开发应该都知道,很多软件会有配置文件,里面存放这程序运行当中的各个属性值,由于其配置信息并不多,如果采用数据库来存放并不划算,因为数据库连接跟操作等 ...
- IT运维助力业务增值
随着业务的不断扩展及IT的深化融合,IT运维在企业日常管理中的地位已经显得越发重要.然而,日常的运维工作繁琐.辛苦,还得不到认可.“吃力不讨好!”也成为很多兢兢业业的IT管理人员普遍存在的苦恼. ...
- Cannot call sendError() after the response has been committed - baiyangliu
当response提交后,不能调用sendError(),什么意思? 出现这个错误,一定是多次response导致的.可以这么理解,承载客户端和服务器进行Http交互的Socket连接已经关闭了,而你 ...
- 【转】ZooKeeper学习第二期--Zookeeper命令操作
一.Zookeeper的四字命令 Zookeeper支持某些特定的四字命令字母与其的交互.他们大多数是查询命令,用来获取Zookeeper服务的当前状态及相关信息.用户在客户端可以通过telnet或n ...
- HttpServletRequest -- 获取请求主机真实的IP地址
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了 Apache,Nagix等反向代理软件就不能获取到客户端的真实 ...
- mysql临时表产生的执行效率问题改进(转)
问题: 近日,线上MySQL查出一个慢sql,每次都要查询1000ms以上,严重影响用户体验 今得空去诊断一番,记录如下: sql原句: SELECT r.object_id AS cardId, c ...
- 【代码审计】TuziCMS_v3.0_任意文件删除漏洞分析
0x00 环境准备 TuziCMS官网:http://www.tuzicms.com/ 网站源码版本:TuziCMS_v3.0_20161220 程序源码下载:http://www.tuzicms ...