Python接口自动化测试之pytest与unittest区别

  引言

  咱们在使用python作接口测试的时候,搭建的接口测试框架都是python的单元测试框架,而python的单元测试框架不少unittest、pytest、nose等,其中unittest单元测试框架,这个我以前介绍了不少实战,具体能够参考接口测试框架html

  什么是单元测试

  咱们知道软件测试按开发阶段划分:单元测试,集成测试,系统测试,验收测试,用户测试等。这里说的单元测试,就是第一阶段,通常都是开发去作,在国内绝大部分公司都是开发去作单元测试。单元测试就是测试的对象是程序中的最小单元。程序的最小单元能够是一个函数,一个类,也能够是函数的组合,类的组合。python

  什么是框架

  框架——软件框架(software framework),一般指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。git

  ——百度百科github

  简单来讲,框架是提供一些基本的功能与约束条件,让你去实现业务功能。举个生活栗子,给你个厨房,你能够用来作饭,烧烤和用做杂物间等,可是你不可能放张床,用来睡觉(豪宅别墅除外)。厨房提供的是厨房的框架,你必须听从框架内的约束,去作你想作的事。超过框架以外的功能是没法实现。框架

  什么是自动化测试框架

  自动化测试框架,简单来讲就是应用自动化测试的框架。这句话好像是废话。其实,就是为了解决某些特定问题和测试需求,而开发解决问题的组件。函数

  自动化测试框架的定义为:由一个或多个自动化测试基础模块、自动化测试管理模块、自动化测试统计模块等组成的工具集合————百度百科。工具

若是还不理解,再继续上面那个生活栗子,给你一个厨房,厨房是用来作饭的,这是框架的约束,可是一个空厨房没有东西,就是一个空架子,得买厨具、食物蔬菜大米等,才能作饭。这些硬性的东西就是须要开发的组件。解决的问题就是吃饭问题。你们请自行脑补。单元测试

  接口自动化测试框架能够学习我这篇文章:基于Python接口自动化测试框架(初级篇)附源码学习

  Python三大主流框架

第一种:unittest

  unittest是Python标准库中自带的单元测试框架。unittest有时候也被称为PyUnit。就像JUnit是Java语言的标准单元测试框架同样,unittest(PyUnit)则是Python语言的标准单元测试框架。测试

  unittest支持自动化测试,测试用例的初始化和关闭,测试用例的聚合等功能。unittest有一个很重要的特性:它经过类(class)的方式,将测试用例组织在一块儿。

  unittest不须要单独去下载安装,python内置单元测试框架直接使用。

 

 具体看例子:

# -*- coding: utf-8 -*-
'''
@author: Leo

@software: pycharm

@file:  test.py

@time: 2020/5/6 0006 23:25

@Desc:

'''
__author__ = 'Leo'

import unittest

class Testunittest(unittest.TestCase):
    def test_001(self):
        self.assertEqual('abc'.upper(),'ABC')

if __name__ == '__main__':
    unittest.main()

  

运行结果:

 

 

 

第二种:nose

nose是Python的一个第三方单元测试框架。这意味着,若是要使用nose,须要先显式安装它:

>pip install nose
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Requirement already satisfied: nose in d:\python3\lib\site-packages (1.3.7)

 

简单的例子:

import  nose

def test_001():
    assert 'abc'.upper() == 'ABC'
    pass

if __name__ == '__main__':
    nose.runmodule()

  

运行结果:

 

 

舒适提示:

nose已经进入维护模式,从github (https://github.com/nose-devs/

nose/commits/master)上能够看到,nose最近的一次代码提交仍是在2016年5月4日。继承nose的是nose2,但要注意的是,nose2并不支持nose的所有功能,它们的区别能够参见:

https://nose2.readthedocs.io/en/latest/differences.html。

nose2的主要目的是扩展Python的标准单元测试库unittest,所以它的定位是“带插件的unittest”。nose2提供的插件,例如测试用例加载器,覆盖度报告生成器,并行测试等内置插件和第三方插件,让单元测试变得更加完善。

第三种:pytest

pytest是Python另外一个第三方单元测试库。它的目的是让单元测试变得更容易,而且也能扩展到支持应用层面复杂的功能测试。

pytest的特性有:

1)支持用简单的assert语句实现丰富的断言,无需复杂的self.assert*函数

2)自动识别测试模块和测试函数

3)兼容unittest和nose测试集

4)支持Python3和PyPy3

5)丰富的插件生态,已有300多个各式各样的插件,和活跃的社区

 

简单例子:

import pytest

def test_001():
    assert 'abc'.upper() == 'ABC'

if __name__ == '__main__':
    pytest.main()

 

运行结果:

 

 

再看一个例子:

import pytest

def add_test(x):
    return x + 1

def test_001():
    assert add_test(3) == 2

if __name__ == '__main__':
    pytest.main('-s','test.py')

 

运行结果:

 

 

备注:

一、若是是在命令行模式运行的话,-s会显示打印的内容,不加的话,就不会显示。

二、若是是使用pycharm运行的话,加不加-s均可以。

三、不须要main函数,pytest自动识别test_开头的测试方法(用例)。

四、pytest兼容unittest框架的代码,能够用来运行unittest测试用例。

如图:

 

 

 

相关文章
相关标签/搜索