Pytest框架

一、Pytest简介

Pytest是主流的测试框架,推荐大家使用该框架。对于UnitTest框架来说,Pytest框架不需要像UnitTest那样单独创建继承类unittest.TestCase。它使用起来非常简单,只需要创建测试类或者测试文件,然后以test开头即可。Pytest测试矿建运行时,可以根据test找到测试用例并执行。

pytest测试框架主要有以下几个特点:

  • 简单灵活,容易上手,文档丰富;
  • 支持用简单的assert语句实现丰富的断言,无需复杂的self.assert*函数;
  • 支持参数化;
  • 兼容UnitTest和nose测试集;
  • 能够支持简单的的那元测试和复杂的功能测试,还可应用到接口自动化测试种;
  • 丰富的插件生态,具有很多第三方插件,并且可以自定义扩展,如pytest-Selenium(集成Selenium)等;
  • 支持重复执行失败的case等;
  • 方便和持续集成工具Jenkins集成。

二、Pytest案例实战

1、Pytest基础案例

通过PyCharm在工程目录下创建pytestDemo的python package,Pytest的案例均存在pytestDemo下。

Pytest测试用例编写非常简单,Pytest可以在不同的函数、包中编写用例,但Pytest有如下约束:

  • 文件名以test_(如test_*.py)开头或以_test(如*_test.py)结尾的py文件;
  • 以test_开头的函数或test_开头的方法;
  • 以Test开头的类,并且不能带有init方法;
  • 要注意的是所有的包必须要有init.py文件(在PyCharm中会自动生成)。

(1)创建基础待测方法

在pytestDemo下新建test_demo.py文件,代码如下:

def add(a, b):
    return a + b
def test_add():
    assert add(2, 3) == 5

(2)运行测试方法

通过cmd进入test_demo.py所在的文件夹下,然后执行pytest命令,结果如下:

对test_demo.py文件代码进行改动,将实际值和期望值改成不一致,代码如下:

def add(a, b):
    return a + b
def test_add():
    assert add(2, 3) == 6

通过cmd命令进入test_demo.py所在的文件夹下,然后执行pytest命令,结果如下:

2、测试用例存放在类中

可将测试用例放在测试类中,通过执行测试类执行类中的测试用例。

(1)优化测试代码

将test_demo.py代码进行优化,代码如下:

def add(a, b):
    return a + b

def minus(a, b):
    return a - b

class TestClass:
    def test_add(self):
        assert add(2, 3) == 5

    def test_minus(self):
        assert minus(3, 2) ==2


(2)运行优化后的测试方法

通过cmd命令进入test_demo.py所在的文件夹中,然后执行pytest命令,结果如下:

三、测试用例的运行控制

Pytest提供了以下3中运行方式执行测试用例:

  • pytest(一般采用该方式);
  • pytest *_test.py 或 test_*.py;
  • python-m pytest.

在pytestDemo目录下,新创建一个Demo_test.py文件,代码如下:

# 乘法,返回a*b的值
def multi(a, b):
    return a * b
# 除法,返回a/b的值
def dividi(a, b):
    return a/b

class TestClass:
    def test_multi(self):
        assert multi(3, 3) == 6
        
    def test_dividi(self):
        assert dividi(3, 2) == 4

1、方式1:pytest

命令格式为"pytest文件名/"或进入pytestDemo目录下,运行pytest,执行某个目录下所有的用例,结果如下。可以看到,Demo_test.py与test_demo.py两个测试文件均被执行。

2、方式2:pytest test_*.py

执行某个.py文件下的测试用例,命令格式为“pytest脚本名称.py”。通过cmd命令进入Demo_test.py所在的文件下,操作步骤及运行结果如下:

可以看到,程序仅仅运行了Demo_test.py文件,而test_demo.py文件并未运行。

3、方式3:python -m pytest

通过python -m pytest运行当前目录下的所有测试用例文件。

4、节点运行

通过节点运行方式可运行某个.py文件(模块)里某个函数或方法,如仅仅运行Demo_test.py文件中的test_multi方法,且不运行demo_test.py中的test_dividi方法。

命令pytest Demo_test.py::TestClass::test_multi运行后,在结果中可以看到仅仅运行了test_multi方法。

5、遇到错误停止测试

当Demo_test.py文件运行时,test_multi与test_dividi两个方法运行断言均会执行失败。通过命令pytest -x Demo_test.py执行时,遇到第一个方法或函数执行无法通过(test_multi运行后即停止运行),后面的方法或函数(test_dividi)将不被执行。

四、在编译器中配置Pytest

python默认自带的单元测试框架时UnitTest,因此在PyCharm编译器中默认的单元测试框架一般是UnitTest。如果像修改当前工程的单元测试框架,可通过修改PyCharm默认的test runner来指定的单元测试框架。

在PyCharm中一次选择File——>Settings——>Tools——>PyCharm Integrated Tools——>Default test runner——>pytest命令,将党员测试矿建指定为pytest。如图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值