看见英文懵逼,强迫学习英语

The Unittest suppots test automation,sharing of setup and shutdown code of tests, aggregation of tests into collections, and independence of the tests from the reporting framework

(支持测试自动化,为测试共享设置和关闭代码,将测试集合到集合中,以及从报告框架中独立测试。)

To achieve this,unittest supports some important concepts in an object_oriented way:

(为了实现这一点,unittest以面向对象的方式支持一些重要的概念:)

整理结构:unittest库提供了testcase,test suites,test fixtures, test runner:

test fixture:

  A test fixture represents the preparation needed to perform one or more tests, and any associate cleanup actions. This may involve, for example, creating   temporary or proxy databases, directories, or starting a server process.

test fixture代表执行一个或多个测试所需的准备工作,以及任何关联清理操作。这可能涉及到,例如创建临时代理数据库、目录或启动服务器进程。

test case :

A test case is the individual unit of testing. It checks for a specific response to a particular set of inputs. unittest provides a base class, TestCase, which may be used to create new test cases.

测试用例是测试的各个单元。它检查对特别输入集合的特定响应。 unittest提供了一个基类, TestCase可以用来创建新的测试用例。

test suite:

A test suite is a collection of test cases, test suites, or both. It is used to aggregate tests that should be executed together.

一个测试套件是测试案例,测试套件,或两者的集合。它被用来聚合应该一起执行的测试。

test runner:

A test runner is a component which orchestrates the execution of tests and provides the outcome to the user. The runner may use a graphical interface, a textual interface, or return a special value to indicate the results of executing the tests.

测试运行是编排的测试的执行,并提供结果给用户的部件。test runner可以使用图形界面,文本界面,或返回一个特殊的值来表示执行测试的结果。

The unittest module provides a rich set of tools for constructing and running tests. This section demonstrates that a small subset of the tools suffice to meet the needs of most users.

该unittest模块为构建和运行测试提供了一套丰富的工具。本节表明,一小部分工具足以满足大多数用户的需求。

1、简单的例子

Here is a short script to test three string methods:

 import unittest

 class TestStringMethods(unittest.TestCase):
def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO') def test_isupper(self):
self.assertTrue('FOO'.isupper())
self.assertFalse('Foo'.isupper()) def test_split(self):
s = 'hello word'
self.assertEqual(s.split(), ['hello', 'word'])
# check that s.split fails when the separator is not a string
with self.assertRaises(TypeError):
s.split(2) if __name__ == '__main__':
unittest.main()

运行结果:

...
----------------------------------------------------------------------
Ran 3 tests in 0.000s OK
Passing the -v option to your test script will instruct unittest.main() to enable a higher level of verbosity, and produce the following output:
test_isupper (__main__.TestStringMethods) ... ok
test_split (__main__.TestStringMethods) ... ok
test_upper (__main__.TestStringMethods) ... ok ----------------------------------------------------------------------
Ran 3 tests in 0.001s OK

2、命令行:

从命令行中可以运行单元测试的模块,类,甚至单独的测试方法。

python -m unittest test_module1 test_module2
python -m unittest test_module.TestClass
python -m unittest test_module.TestClass.test_method

测试模块也可以通过文件路径指定:

python -m unittest tests/test_something.py

You can run tests with more detail (higher verbosity) by passing in the -v flag(显示更详细的测试结果的说明使用[-v]flag:)

ython3_server/python3_unittest# python3 -m unittest -v demo1.py
test_isupper (demo1.TestStringMethods) ... ok
test_split (demo1.TestStringMethods) ... ok
test_upper (demo1.TestStringMethods) ... ok ----------------------------------------------------------------------
Ran 3 tests in 0.000s OK

查看所有的命令行选项使用命令:

python -m unittest -h

The -s, -p, and -t options can be passed in as positional arguments in that order. The following two command lines are equivalent:

python -m unittest discover -s project_directory -p "*_test.py"
python -m unittest discover project_directory "*_test.py"

本TestCase类提供了一些断言方法来检查并报告故障。下表列出了最常用的方法:

方法 检查
assertEqual(a, b) a == b
assertNotEqual(a, b) a != b
assertTrue(x) bool(x) is True
assertFalse(x) bool(x) is False
assertIs(a, b) a is b
assertIsNot(a, b) a is not b
assertIsNone(x) x is None
assertIsNotNone(x) x is not None
assertIn(a, b) a in b
assertNotIn(a, b) a not in b
assertIsInstance(a, b) isinstance(a, b)
assertNotIsInstance(a, b) not isinstance(a, b)

所有的assert方法都接受一个msg参数,如果指定的话,这个参数将被用作失败时的错误消息

3、实际运用:

 

参考:

https://docs.python.org/3.6/library/unittest.html

https://www.jianshu.com/p/8e22c1213260

												

python3_unittest单元测试框架的更多相关文章

  1. javascript单元测试框架mochajs详解

    关于单元测试的想法 对于一些比较重要的项目,每次更新代码之后总是要自己测好久,担心一旦上线出了问题影响的服务太多,此时就希望能有一个比较规范的测试流程.在github上看到牛逼的javascript开 ...

  2. Google C++单元测试框架GoogleTest(总)

    之前一个月都在学习googletest框架,对googletest的文档都翻译了一遍,也都发在了之前的博客里,另外其实还有一部分的文档我没有发,就是GMock的CookBook部分:https://g ...

  3. Google C++单元测试框架GoogleTest---GMock的CheatSheet文档

    CheatSheet文档中包含了GMock所有常用的东西,看了这个基本上就可以用它了,本文接上篇博文:Google C++单元测试框架GoogleTest---Google Mock简介--概念及基础 ...

  4. Google C++单元测试框架GoogleTest---AdvancedGuide(译文)下

    因为AdvancedGuide文档太长,分上下两部分,本文档接googletest--AdvancedGuide(译文)上:Google C++单元测试框架GoogleTest---AdvancedG ...

  5. JavaScript单元测试框架JsUnit基本介绍和使用

    JavaScript单元测试框架JsUnit基本介绍和使用 XUnit framework XUnit是一套标准化的独立于语言的概念和结构集合,用于编写和运行单元测试(Unit tests). 每一个 ...

  6. Google C++单元测试框架GoogleTest---GTest的Sample1和编写单元测试的步骤

    如果你还没有搭建gtest框架,可以参考我之前的博客:http://www.cnblogs.com/jycboy/p/6001153.html.. 1.The first sample: sample ...

  7. JavaScript单元测试框架-Jasmine

    Jasmine的开发团队来自PivotalLabs,他们一开始开发的JavaScript测试框架是JsUnit,来源于著名的JAVA测试框架JUnit.JsUnit是xUnit的JavaScript实 ...

  8. Python单元测试框架之pytest -- 断言

    对于测试来讲,不管是功能测试,自动化测试,还是单元测试.一般都会预设一个正确的预期结果,而在测试执行的过程中会得到一个实际的结果.测试的成功与否就是拿实际的结果与预期的结果进行比较.这个比的过程实际就 ...

  9. Python单元测试框架之pytest -- 生成测试报告

    继续pytest单元测试框架的学习,pytest可以生成多种类型的测试报告.这一节就来学习pytest如何生成测试报告. 创建test_calss.py 测试用例文件,这里以测试该文件为例. #cod ...

随机推荐

  1. 自动化测试环境准备robotframework

    (一)针对python2.7版本的自动化环境准备: python 下载地址: https://www.python.org/downloads/ 这里选择Python2.7系列的,后面涉及到wxPyt ...

  2. 使用pug(jade),以及在vue+webpack中使用pug(jade)

    一:在HTML中使用pug 在css中有预处理器less和scss来使我们的样式表更加的简介,那么在HTML中有没有这样的格式呢,答案是有的,那就是pug(前身是jade),效果如下: 转译以后 好, ...

  3. ORA-00972: 标识符过长

    若是拼接成的sql语句,请查找传递参数时字符型字段是否两边少了引号.

  4. js 函数递归优化,arguments.callee 优化

    函数递归是个经典的问题,平常用的时候,小练习可以通过函数名来反复调用,比如: function factorial(num) { if (num <= 1) { return 1; } else ...

  5. Android开源天气预报应用Weather-Lite

    由于最近繁忙的工作告一段落,要清闲一段时间,所以可以好好利用这段时间给自己充充电. 于是乎这个app就诞生了.本着开源的精神我把它放在了github上.这里如果有Android初学者的话不妨学习一下, ...

  6. 自动生成项目的Makefile文件

    自动生成项目的Makefile文件 理论基础 跟我一起写 Makefile:   http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4 ...

  7. maven (profiles)装载不同环境所需的配置文件

    引子: maven与java的联系在今天的项目已经是不可分割的 ,但是不同的项目有各具特色的项目结构,不同的项目结构使用了不同的maven插件,想要了解一个项目的项目结构,或者自己构建一个具有成熟结构 ...

  8. java面试基础题------》抽象类和接口有什么异同

    划重点!!!! 1.抽象类(abstract class)和接口(interface)有什么异同? 相同点 * 都不能被直接实例化,都可以通过继承实现其抽象方法. * 都是面向抽象编程的技术基础,实现 ...

  9. 演示一个简单的Redis队列

    0.Windows Service版下载 https://github.com/rgl/redis/downloads 1.新建一个Console项目 打开Nuget控制台,执行以下命令 Instal ...

  10. how to use greendao in android studio

    http://www.arjunsk.com/android/use-greendao-android-studio/ 1.新建一个java文件MainGenerator.java: import d ...