Python单元测试框架之pytest(1)


今天抽空整理了一下Python单元测试框架 pytest 的用法

本章节主要跟大家分享pytest的特点以及如何编写测试用例,收集测试用例

我们python 的单元测试框架是有很多的,比如:

  • unittest   ——Python内置的标准库,也是我最开始(2019年)学习python自动化时用的一个单元测试框架
  • pytest     ——目前比较火的,在一些场景当中会更好用
  • nose       ——没有那么多人去用
  • behave   ——国内用的比较少,国外用的比较多

一、pytest 介绍

pytest 是一个非常成熟的全功能的Python 测试框架,主要特点有以下几点:

1、简单灵活、容易上手,文档丰富

2、支持参数化,可以细粒度地控制要测试的测试用例

3、能够支持简单的单元测试和复杂的功能测试,还可以用来做web/app、接口等自动化测试

4、pytest 具有很多第三方的插件,并且可以自定义拓展

二、pytest 安装方式

pip install pytest

备注:有很多新学习的朋友们,在安装完pytest 之后,直接右键运行 发现没有效果,为什么呢?

因为我们pycharm 默认使用的是unittest 框架,所以我们在安装完之后需要重新配置一下就可以:

 File——》Settings ——》Tool   :

 三、pytest 的作用

编写测试用例——收集测试用例——执行测试用例——生成测试报告

四、pytest编写测试用例的规则

一个函数就是一个测试用例,编写测试用例包含:

用例名称、用例步骤、 预期结果 、实际结果 、前置后置条件

1、用例名称 :要以 test_ 开头

2、自动断言: (实际结果与预期结果对比) assert 表达式 (True /False)

3、用例失败的两场场景:

(1)出现了AssertionError            (2)用例抛其他异常了

五、pytest 编写用例有两种形式

1、第一种:py下的函数,函数名以test_开头,也就是一个用例一个方法

from random import randint

def random_num():
    return randint(1,10)


def test_3():
     assert random_num() == 3

def test_heaa():
     print("这是第一条测试用例")
     assert random_num() == 3

def test_hello():
     # 用例步骤
    print("这是第二条测试用例")
     # 断言
     assert random_num() == 7

def test_hett():
     print("这是第三条测试用例")
     assert random_num() == 7 

2、第二种方式:定义一个类,所有的用例全部在一个类下面

from random import randint

def random_num():
    return randint(1,10)

class TestPy:
    # 不可以有__init__()方法,因为我们的框架自己处理了实例化这一块了

    def test_in_class_1(self):
        assert random_num() == 3

    def test_in_class_2(self):
        assert random_num() == 2

    def demo(self):
        print("demo")

  而且我们的单元测试框架很好的做到了用例之间的执行分离,不管这个用例成功或者失败,都不会影响下一个用例的执行

六、pytest 收集测试用例

有些善于拓展学习的伙伴肯定会有疑问,在我们实际的项目当中测试用例是非常多的,而且不可能只是放在一个py文件里面

那么多个py文件,pytest是如何收集测试用例的呢?

1、收集用例的目录:以rootdir 作为根目录,从rootdir 目录下开始搜索用例

2、目录下的文件过滤:文件名以test_开头的py 文件,或者文件名以_test 结尾的 py文件

3、文件下的用例过滤:.py下的函数,函数名以   test_开头/,py 下嘞(Test开头)里面的方法,方法名以test_开头

 4、执行顺序:先找到哪个文件,就先执行哪个文件里的用例

  文件里面有多个用例,自上而下,按照代码的先后顺序执行