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、执行顺序:先找到哪个文件,就先执行哪个文件里的用例
文件里面有多个用例,自上而下,按照代码的先后顺序执行