pytest模块的使用

pytest模块的使用

pytest是第三方测试框架,是基于unittest的扩展框架,比unittest更简洁,更高效。

安装pytest模块使用

pip install pytest

安装好之后,到cmd中输入

pytest --version

检查是否安装成功。

pytest运行方法

想要用pytest运行,首先要导入模块

import pytest

比如创建一个demo.py文件,内容为:

"""
@File : test_demo.py.py
@Author : sary
@Time : 2021/4/13 13:50
@explain :
"""
# -*- coding:utf-8 -*-
import pytest         # 导入包

def test_sucess():   # 定义第一个测试用例,assert 1表示断言成功

    print("test sucess")

    assert 1

def test_fail():  # 定义第二个测试用例

    print("test fail")
    assert 0

if __name__ == "__main__":
    pytest.main(['-s','test_demo.py'])

运行结果:

D:Python39python.exe "D:PyCharm 5.0.3helperspycharmpytestrunner.py" -p pytest_teamcity D:/pycharm_projects/pytest_study/test_demo.py
Testing started at 下午 01:57 ...
============================= test session starts =============================
platform win32 -- Python 3.9.0, pytest-6.2.3, py-1.10.0, pluggy-0.13.1
rootdir: D:
collected 2 items

........pycharm_projectspytest_study	est_demo.py test sucess
.test fail
F
def test_fail():  # 定义第二个测试用例
    
        print("test fail")
>       assert 0
E       assert 0

D:pycharm_projectspytest_study	est_demo.py:19: AssertionError


================================== FAILURES ===================================
__________________________________ test_fail __________________________________

    def test_fail():  # 定义第二个测试用例
    
        print("test fail")
>       assert 0
E       assert 0

D:pycharm_projectspytest_study	est_demo.py:19: AssertionError
=========================== short test summary info ===========================
FAILED ........pycharm_projectspytest_study	est_demo.py::test_fail - as...
========================= 1 failed, 1 passed in 0.16s =========================

上述输出中: 

test_demo.py
test sucess . 
test fail F

F:表示测试失败

.表示测试成功

这里要提醒一点,pytest必须遵循以下规则:

1、测试文件名必须以“test_”开头或者以”_test”结尾

2、测试方法必须以“test_”开头

3、测试类命名以Test开头

那么执行“pytest -s test_demo.py”这句话的时候,python就会自动去寻找test_开头或者结尾的函数来执行。

setup()方法teardown()方法

setup()方法和teardown()方法是两个特殊方法,setup()是在每一个编写的测试用例执行前必然会执行的方法,teardown()方法是在每个测试用例执行后执行的方法。

比如上面的两个测试用例,修改为:

"""
@File : test_demo.py.py
@Author : sary
@Time : 2021/4/13 13:50
@explain :
"""
# -*- coding:utf-8 -*-
import pytest         # 导入包

class TestLogin:

    def setup(self):

        print("setup")

    def teardown(self):

        print("teardown")

    def test_sucess(self):

        print("test sucess")

    def test_fail(self):

        print("test fail")

if __name__ == "__main__":
    pytest.main(['-s','test_demo.py'])

  输出:

setup
test sucess
.teardown
setup
test fail
.teardown

  

setup_class()、teardown_class()方法

如果理解了上面讲解的setup和teardown方法,那么setup_class和teardown_class方法也容易理解,这两个方法是针对测试类的,是每一个类执行前后必须执行的方法

"""
@File : test_demo.py.py
@Author : sary
@Time : 2021/4/13 13:50
@explain :
"""
# -*- coding:utf-8 -*-
import pytest         # 导入包

class TestLogin:
    def setup_class(self):

        print("setup_class")

    def teardown_class(self):

        print("teardown_class")

    def setup(self):

        print("setup")

    def teardown(self):

        print("teardown")

    def test_sucess(self):

        print("test sucess")

    def test_fail(self):

        print("test fail")

if __name__ == "__main__":
    pytest.main(['-s','test_demo.py'])

  运行结果:

setup_class
setup
test sucess
.teardown
setup
test fail
.teardown
teardown_class

 

pytest配置文件

pytest运行时可以有一个配置文件,名字为pytest.ini,并且这个配置文件名字必须这么写,一般放到测试项目目录中。

pytest.ini的内容为:
[pytest]

# 参数

addopts = -s

# 搜索哪个文件夹

testpaths = ./scripts

# 搜索的文件名以test_开头

python_files = test_*.py

# 搜索的类名以Test开头

python_classes = Test*

# 搜索的方法名以test_开头

python_functions = test_*

有了这个配置文件,就等同于告诉了python要运行哪个文件夹下的哪些文件。到cmd中运行的时候,进入到你自己的项目路径,不需要写参数,直接输入pytest就可以,就会按照你的配置文件来运行该运行的用例。 

pytest常用插件

生成测试报告

pytest-html

安装方式: 

pip install pytest-html

  

安装成功后,运行的方式,有两种,第一种:

在终端从

pytest

改成

pytest --html=../report/report.html 

意思是创建一个文件夹为report,在report文件夹中创建一个html文件,该文件里面存的就是运行的测试用例结果

报告独立显示

上面方法生成的报告,css是独立的,分享报告的时候样式会丢失,为了更好的分享发邮件展示报告,可以把css样式合并到html里

$ pytest --html=report.html --self-contained-html

第二种运行方式:

修改pytest.ini配置文件:

addopts = -s --html=report/report.html

然后在终端依旧输入pytest运行,出来的结果是一样的,推荐第二种方式,更简单。

addopts还有很多其他参数

pytest.ini的作用

可以改变pytest的运行方式,读取配置信息,并按指定的方式去运行

非test文件

pytest里面有些文件是非test文件

  • pytest.ini:pytest的主配置文件,可以改变pytest的默认行为
  • conftest.py:测试用例的一些fixture配置
  • init.py:识别该文件夹为python的package包

pytest.ini应该放哪里?

必须放在项目根目录下 ,不要乱放、乱起其他名字

 

原文地址:https://www.cnblogs.com/saryli/p/14653202.html