首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
28 篇文章
1
一篇文章让你入门API测试
2
[接口测试 - 基础篇] 01 你应该了解的协议基础
3
[接口测试 - 基础篇] 02 你应该掌握的Python3接口测试内功
4
[接口测试 - 基础篇] 03 unittest测试框架了解多少才够?
5
[接口测试 - 基础篇] 04 无法绕过的json解析
6
[接口测试 - 基础篇] 05 好讨厌的xml解析
7
[接口测试 - 基础篇] 06 好吧也来解析下html
8
[接口测试 - 基础篇] 07 来来来,一起读写excel玩玩之一
9
[接口测试 - 基础篇] 08 封装个基本的excel解析类
10
[接口测试 - 基础篇] 09 其实吧,读写csv格式也是要掌握的
11
[接口测试 - 基础篇] 10 别啊,还有INI格式呢,别忘记我
12
[接口测试 - 基础篇] 11 掌握下python解析YAML格式也是需要的
13
[接口测试 - 基础篇] 12 还是要掌握python日志管理模块的
14
[接口测试 - 基础篇] 13 写在接口测试基础篇完结时
15
[接口测试 - http.client篇] 14 源码初探及其工作机制分析
16
[接口测试 - http.client篇] 15 常用API说明及基本的示例
17
[接口测试 - http.client篇] 16 基于http.client之POM实战一下
18
[接口测试 - http.client篇] 17 http.client之入门级接口测试框架
19
接口测试 | urllib篇 18 urllib介绍
20
接口测试 | urllib篇 19 urllib基本示例
21
[接口测试 -基础篇] 20 用flask写一个简单server用于接口测试
22
接口测试 | 21 基于flask弄个restful API服务出来
23
接口测试 | 22 requests基础入门
24
接口测试 23 requests基础入门二
25
接口测试 | 24 requests + unittest集成你的接口测试
26
接口测试 | 25 requests + pytest测试实例
27
接口测试 | 26 基础及简要验证清单
28
接口测试 | 27 HTTP接口详细验证清单

[接口测试 - 基础篇] 03 unittest测试框架了解多少才够?

概述

Python单元测试框架(The Python unit testing framework),简称为PyUnit, 是Kent Beck和Erich Gamma这两位聪明的家伙所设计的 JUnit 的Python版本。 而JUnit又是Kent设计的Smalltalk测试框架的Java版本。它们都是各自语言的标准测试框架。

自从 Python 2.1 版本后,PyUnit成为 Python标准库的一部分。

所以不需要安装直接就用。

构建测试用例

在测试过程中,一般一个测试场景由多个测试用例构建而成(即Test Cases),在PyUnit中,unittest模块中的TestCase 类代表测试用例。

在使用PyUnit实际测试过程中,一般一个TestCase类实例代表一个场景,由一个setUp和一个tearDown方法以及N个testXXX方法(每个方法里至少一个断言)构成。

基本形式如下:

代码语言:javascript
复制
# -*- coding:utf-8 -*-
import unittest

class myTestCase_01(unittest.TestCase):
    def setUp(self):
        # 做一些初始化
    
    def tearDown(self):
        # 做一些清理动作
    
    def testTestCase_01(self):
        # 测试用例 1
        
        # ...
        
        # 断言验证

    def testTestCase_02(self):
        # 测试用例 2
        
        # ...
        
        # 断言验证

class myTestCase_02(unittest.TestCase):
    def setUp(self):
        # 做一些初始化
    
    def tearDown(self):
        # 做一些清理动作
    
    def testTestCase_01(self):
        # 测试用例 1
        
        # ...
        
        # 断言验证

    def testTestCase_02(self):
        # 测试用例 2
        
        # ...
        
        # 断言验证

构建测试套件

将多个测试用例构建在一起就形成了测试套件,下面我们看看在PyUnit中如何把多个测试用例实例构成成测试套件。

代码语言:javascript
复制
def suite():
    suite = unittest.TestSuite()
    suite.addTest(testTestCase_01("testTestCase_01"))
    suite.addTest(testTestCase_01("testTestCase_02"))
    suite.addTest(testTestCase_02("testTestCase_01"))
    suite.addTest(testTestCase_02("testTestCase_02"))

    return suite

运行

下面我们看下怎么运行上述的套件:

代码语言:javascript
复制
# -*- coding:utf-8 -*-

if __name__ == "__main__":
    suites = suite()
    runner = unittest.TextTestRunner()
    runner.run(suites)

够不够?

从实际的应用来看是不够的,但从思路来讲,总体而言,就是上述的三个过程:

  • 构建测试用例集
  • 由测试用例构建套件集
  • 运行套件

至于PyUnit中的高级使用,例如什么动态方法、静态方法、不同的运行模式、不同的套件构建方式以及自动发现测试用例等等,请出门左转到官方网站往死里啃。

应该掌握的断言

基本断言方法

基本的断言方法提供了测试结果是True还是False。所有的断言方法都有一个msg参数,如果指定msg参数的值,则将该信息作为失败的错误信息返回。

序号

断言方法

断言描述

1

assertEqual(arg1, arg2, msg=None)

验证arg1=arg2,不等则fail

2

assertNotEqual(arg1, arg2, msg=None)

验证arg1 != arg2, 相等则fail

3

assertTrue(expr, msg=None)

验证expr是true,如果为false,则fail

4

assertFalse(expr,msg=None)

验证expr是false,如果为true,则fail

5

assertIs(arg1, arg2, msg=None)

验证arg1、arg2是同一个对象,不是则fail

6

assertIsNot(arg1, arg2, msg=None)

验证arg1、arg2不是同一个对象,是则fail

7

assertIsNone(expr, msg=None)

验证expr是None,不是则fail

8

assertIsNotNone(expr, msg=None)

验证expr不是None,是则fail

9

assertIn(arg1, arg2, msg=None)

验证arg1是arg2的子串,不是则fail

10

assertNotIn(arg1, arg2, msg=None)

验证arg1不是arg2的子串,是则fail

11

assertIsInstance(obj, cls, msg=None)

验证obj是cls的实例,不是则fail

12

assertNotIsInstance(obj, cls, msg=None)

验证obj不是cls的实例,是则fail

比较断言

unittest框架提供的第二种断言类型就是比较断言。

下面我们看下各种比较断言:

  1. assertAlmostEqual (first, second, places = 7, msg = None, delta = None)

验证first约等于second。 palces: 指定精确到小数点后多少位,默认为7

  1. assertNotAlmostEqual (first, second, places, msg, delta)

验证first不约等于second。 palces: 指定精确到小数点后多少位,默认为7

==注: 在上述的两个函数中,如果delta指定了值,则first和second之间的差值必须≤delta==

  1. assertGreater (first, second, msg = None)

验证first > second,否则fail

  1. assertGreaterEqual (first, second, msg = None)

验证first ≥ second,否则fail

  1. assertLess (first, second, msg = None)

验证first < second,否则fail

  1. assertLessEqual (first, second, msg = None)

验证first ≤ second,否则fail

  1. assertRegexpMatches (text, regexp, msg = None)

验证正则表达式regexp搜索==匹配==的文本text。 regexp:通常使用re.search()

  1. assertNotRegexpMatches (text, regexp, msg = None)

验证正则表达式regexp搜索==不匹配==的文本text。 regexp:通常使用re.search()

完了

就这么多了,其他的请参考公众号前期所发布的系列文章。

用常规的方法解决问题,少炫技巧。

下一篇
举报
领券