接口自动化测试(二)_pytest执行用例命令,控制台参数,用例id,fixture方法

一.pytest库,简单运行测试用例

安装好pytest
在这里插入图片描述

使用pytest执行函数测试用例

先写一个小demo,尝试一下pytest(注意.py文件命名必须以test_ 开头,其中的测试用例函数的命名以test开头)
在这里插入图片描述

test_demo_01.py的代码:

def func(x):
    x = x+1
    return x

def test_a():
    assert func(5) == 6

def aa():
    assert func(2) == 1

def test_func():
    assert 1==2

使用pytest执行类里面的测试用例(这个类命名必须以Test开头,且其中不能有__init__方法)

我们新建一个py文件,命名以test_开头,然后在文件里创建一个类,类中写如测试用例函数(以test开头)
执行pytest命令,以test_开头的测试文件里的用例都被执行了,

也可以指定运行单个文件里面的测试用例
输入命令pytest pytest_demo/test_demo_class.py
在这里插入图片描述

如果输入命令pytest test_demo_class.py会报错,无法运行成功,因为会在D:\PycharmProjects\Interface_test这个项目下找test_demo_class.py这个文件(会因为找不到这个文件而报错),但我是先创建了一个文件夹,然后把test_demo_class.py放到文件夹里面,所以应该用命令pytest pytest_demo/test_demo_class.py,就能正确找到并执行响应的文件了。
如果要执行某个文件夹下面的所有用例可以用命令pytest xxx/

贴一下报错情况:
在这里插入图片描述

控制台参数

-v:显示每条用例的测试结果
在这里插入图片描述
-q:只显示结果,无关信息不显示
在这里插入图片描述

-s:可以把测试用例里面的print语句打印出来
在这里插入图片描述
-x:遇到第一个失败的用例,后面的用例不执行
–maxfail = 2:错误用力达到2,后面的用例不执行

这几个参数可以组合起来使用

用例id

pytest会为每一个用例创建一个node id,具体形式为 py文件名::类名::函数名,这样就可以精确到具体的一个用例
如命令:pytest pytest_demo/test_demo_01.py::testa
在这里插入图片描述
如命令:pytest pytest_demo/test_demo_class.py::TestClass::test_01
在这里插入图片描述

运行失败时再重复跑一下这个用例

可能在实际情况中,因为网络波动等原因导致用例失败,可以在用例失败时再次执行一下这个用例,避免偶然性
安装一个pytest补充库:pip install pytest-rerunfailures
在这里插入图片描述
在执行用例的命令行后面加上--reruns 2,则用例运行失败后会再运行两次
此时执行的命令行:pytest -s pytest_demo/test_demo_01.py::testa --reruns 2
在这里插入图片描述

注意如果用例运行成功的话这个rerun就不生效了
此时执行的命令行:pytest -s pytest_demo/test_demo_01.py::test_aa --reruns 2
在这里插入图片描述

多线程运行用例

安装命令:pip install pytest-xdist
执行命令:pytest xxxxxxxxx -n 2

注意,如果要使用多线程运行n个用例,必须遵循以下几点:

  1. 用例之间都是独立的
  2. 用例a不要去依赖用例b
  3. 用例执行没先后顺序
  4. 随机都能执行每个用例都能独立运行成功每个用例都能重复运行,不影响其它用例

异常的抛出

1.可以在assert断言后面加上一句话,这样在断言失败时会打印这句话
在这里插入图片描述
2.pytest.raises()方法,这个方法会截取一个期望触发的异常
在这里插入图片描述

二.pytest库,fixture方法

fixture方法是pytest的精髓,类似于unittest库里的setup与teardown一样。fixture负责对测试用例所需的环境进行准备与清理。

1.fixture对于用例所需环境的准备与销毁
fixture对于环境的创建与销毁不像unittest一样需要setup与teardown两句话,准备与销毁都在fixture里面完成,以yield为界。
在这里插入图片描述

2.fixture的生效情况
如果将fixture写在测试用例所在的py文件里,那就只有这个文件里的测试用例可以使用这个fixture所搭建的环境。
如果将fixture写在一个专门的文件里,作为一个公用方法,供其他测试用例调用,那就所有的测试用例都能使用fixture创建的环境。

在项目下新建一个文件夹,然后文件夹下建一个confest.py文件(注意将fixture创建的环境写入的这个文件,这个文件的名字是固定的,只能是confest.py),用来使用fixture创建测试用例环境。
在这里插入图片描述

准备好环境函数environment之后,接下来创建我们的测试用例并执行
在这里插入图片描述

3.fixture所携带的参数scope
scope可以决定fixture所创建的环境是函数级别的,类级别的还是模块级别的。scope不填时默认fixture创建的环境是函数级别的。

定义一个类级别的fixture,首先先指定scope=‘class’
在这里插入图片描述
然后定义一个测试类,继承这个类级别的fixture,然后执行用例
在这里插入图片描述
此时的fixture是class级别的,但如果不是类来调用,而是函数级别的用例来调用,与调用函数级别的fixture效果一样。
再来定义一个模块级别的fixture,改一下scope的值即可
在这里插入图片描述

然后在测试用例文件里使用这个fixture,在原来的测试class的基础上再加上一个测试用例函数
注意这个模块级别的fixture,在类的内部与外部被使用,效果不一样。
注意这个模块级别的fixture,在类的内部与外部被使用,效果不一样。
注意这个模块级别的fixture,在类的内部与外部被使用,效果不一样。
在这里插入图片描述

在这里插入图片描述

还有会话级别的fixture,令scope=‘session’,不常用,就不做尝试了

4.用例使用多个fixture环境
创建两个函数级别的fixture
在这里插入图片描述
然后找一个用例调用这两个fixture环境
在这里插入图片描述

5.也可以用@pytest.mark.usefixtures()的方式来使用fixture创建的环境
在这里插入图片描述

6.fixture的公有与私有
这个没啥好说的
在这里插入图片描述
7.fixture所修饰的函数
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LSQ的测试日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值