web自动化-pytest

本文介绍了pytest这款强大的Python测试框架,包括其易于上手的特性、单元测试和功能测试方法、断言、fixture的使用、配置文件、测试报告生成、执行顺序控制、失败重试以及高级用法如参数化和跳过。
摘要由CSDN通过智能技术生成

安装pytest,pytest-html

1. 特点 

1、非常容易上手,入门简单,文档丰富,文档中有很多参考实例

2、支持简单的单元测试和复杂的功能测试

3、支持参数化

4、执行测试用例过程中,支持跳过操作

5、支持重复执行失败的case

6、支持运行由Nose,unittest编写的测试case

7、pytest支持很多第三方插件

8、方便的和持续集成工具集成

2、pytest类定义及方法定义及运行

  • pytest测试类的定义:类名必须是以Test开头

  • pytest测试方法的定义:方法名必须是以test开头

  • 执行:

2.1 pytest 断言

pytest里面的断言方法就只有一个

assert 表达式

class TestADD:  # 定义的类名必须是以Test开头
    def test_add_01(self):  # 定义的测试方法必须是以test开头
        result = add(1, 2)
        print(result)
        # assert result == 3    判断相等
        # assert result != 4    判断不相等
        # assert result    # 判断为True
        #assert False        # 判断为False
        # assert "a" in "abc" # 判断包含
        # assert "a" not in "abc"  # 判断不包含
        # assert result is None
        assert result is not None

2.2 pytest方法级别的fixture

pytest方法级别的fixture是针对每个测试方法,在执行测试方法前会执行fixture初始化的操作,在执行完测试方法后,执行fixture销毁的操作。

初始化的操作方法:   def setup(self):  方法来实现。

销毁的操作方法: def teardown(self): 方法来实现。

2.3 pytest类级别的fixture

  • pytest 类级别的fixture针对每个测试类的初始化和销毁的操作,可以放在以下两个方法中

    • 类级别初始化的方法: def setup_class(self):

    • 类级别销毁的方法: def teardown_class(slef):

      方法名称固定,不能修改。

 

fixture的方法必须写在测试类当中,不能写在测试类外面。

2.4 pytest配置文件

pytest的配置文件有固定的三个名称: pytest.ini tox.ini setup.cfg 这三个配置文件是放在项目的根目录下。

[pytest]   #  标识当前配置文件是pytest的配置文件
addopts = -s -v  # 标识pytest执行时增加的参数
testpaths = ./scripts  # 匹配搜索的目录
python_files = test_*.py # 匹配测试文件
python_classes = Test*  # 匹配测试类
python_functions = test_* # 匹配测试方法

2.5 pytest测试报告

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

 

2.6 控制用例执行顺序

  • unittest测试用例执行顺序是根据测试方法名称的assicc码值的大小来的,值越小排在前面(a-z)

  • pytest 正常情况下是根据测试方法的从上到下的顺序来执行

可以通过 pytest-ordering 插件来控制pytest测试方法执行的顺序。

  • 使用

@pytest.mark.run(order=x) # x 表示的是整数,(既可以是负数也可以是正数)  0第一个执行

全为负数或者正数时,值越小,优先级越高

既有正数,又有负数,那么正数优先级高

没有确定执行顺序的用例优先于负数

@pytest.mark.last    # 设置用例最后执行
@pytest.mark.tryfirst #最先

2.7 失败重试

  • pytest-rerunfailures 安装
  • 使用

    在addopts参数行中增加对应的参数项: --reruns 3

    当重复执行成功时,就不会再重复执行。

2.8 pytest高级用法

2.8.1 跳过

@pytest.mark.skipif(condition, reason=None)

condition 表示是跳过的条件

这里面reason参数名称必填。

@pytest.mark.skip(reason=None)

reason表示的是跳过的原因

可以在测试类和测试方法上使用

2.8.2 数据参数化

pytest参数化实现: @pytest.mark.parameterize(argnames, argvalues)

  • argnames 表示是 参数名字,是一串字符, 多个参数之间由逗号隔开 "username, password"

  • argvalues 表示的是参数化的数据 [("13700001111","123124"),("13800011111","123456")]

    argname的参数个数要与argvalues里面的测试数据的个数要相同,否则会报错。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值