pytest学习

1.安装pytest: pip install pytest
2.编写用例 - 收集用例 - 执行用例 - 生成报告
3.pytest如何自动识别用例
 识别规则如下:
1、搜索根目录:默认从当前目录中搜集测试用例,即在哪个目录下运行pytest命令,则从哪个目录当中搜索;
2、搜索规则:
1)搜索文件:符合命名规则 test_*.py 或者 *_test.py 的文件
2)在满足1)的文件中识别用例的规则:
2.1)以test_开头的函数名;
2.2)以Test开头的测试类(没有__init__函数)当中,以test_开头的函数
4.根据标记名运行测试用例
在pytest当中,先给用例打标记,在运行时,通过标记名来过滤测试用例。
1)注册标签名
通过pytest.ini配置文件注册。在pytest.ini文件当中:
[pytest] # 固定的section名
markers= # 固定的option名称
  标签名1: 标签名的说明内容。
  标签名2
  标签名N
2)在测试用例/测试类中给用例打标记(只能使用已注册的标记名)
在 测试用例的前面加上:@pytest.mark.已注册标签名
3)调用pytest.main()函数,将运行时的参数以列表传进去
根据标签名过滤用例的参数为:-m 标签名
5.fixture用法
我们在编写测试用例,都会涉及到用例执行之前的环境准备工作,和用例执行之后的环境清理工作。
用例执行之前的环境准备工作代码(前置工作代码)
用例执行之后的环境清理工作(后置工作代码)
通常,在自动化测试框架当中,都叫做fixture。
通过@pytest.fixture装饰器来定义fixture。一个函数被@pytest.fixture装饰,那么这个函数就是fixture。
使用fixture时,分为二个部分:fixture定义、fixture调用。
除此之外,还有fixture的共享机制,嵌套调用机制。
1)定义fixture
前置准备工作代码和后置清理工作代码,都写在一个函数里面。通过yeild关键字,区分前置代码和后置代码 。yeild之前的代码为前置代码,yeild之后的代码为后置代码,在实际应用场景当中,可以只有前置准备工作代码,也可以只有后置清理工作代码。
fixture有4个作用域:测试会话(session)、测试模块(module)、测试类(class)、测试用例(function)
通过@pytest.fixture(scope=作用域)来设置。默认情况下,scope=function
session:pytest执行测试用例的整个过程,称为会话
设置scope为session。autouse表示自动使用,一般 function、class、module 级别的 fixture,都不会去开启 autouse=True
@pytest.fixture(scope=“session”,autouse=True)
def init3():
yield
print(“用例执行之后,执行的代码”) # 只有用例执行之后的后置清理代
2)fixture的返回值设置:yeild 返回值(前置代码里的变量,要传递给测试用例去使用。那么首先,就得fixture函数返回变量才行。)
3)调用fixture
调用方法有2种:

  • 在测试用例/测试类上面加上:@pytest.mark.usefixture(“fixture的函数名字”)
  • 将fixture函数名,作为测试用例函数的参数(当用这一种时,第一种可不用)
    4)conftest.py共享机制
    在某些大的业务场景下,很多用例当中,会使用相同的前置准备工作,和后置清理工作。
    pytest框架提供了一个fixture共享的机制 ,可以让不同的用例模块,使用同一个fixture。这就是conftest.py文件。在测试用例文件当中,不需要引入conftest.py文件。直接调用fixture的函数名,会自动去conftest.py当中查找的。
    1)conftest.py层级作用域
    conftest.py 在哪个目录下,此目录下(包含子目录)的所有用例可使用其中的fixture
    根目录下的conftest.py,作用域是整个项目。
    某个python包内,作用域就是该包内
    那么有个问题,如果出现了同名fixture怎么办呢?
    这里涉及到了,测试用例在执行时,调用fixture的顺序。一般来讲,按 就近原则 调用。
    测试用例文件中的fixture > 当前目录中的fixture > 上级目录中的fixture > 根目录中的fixture
    5)fixture嵌套

嵌套使用即:一个fixture,可以做另外一个fixture的参数,即 init()可作为ini_req_assert函数的入参
如果用例当中,调用了func_fix3,那么执行顺序为:
【低级别可调用高级别或同级别 ,反之则不行】
func_fix的前置
func_fix3的前置
----测试用例----
func_fix3的后置
func_fix的后置

@pytest.fixture(scope="class")
def func_fix():
    print("---- 注册帐号 开始1 -----")
    yield True
    print("---- 注册帐号 结束4 -----")

@pytest.fixture
def func_fix3(func_fix):
    print("****  登陆账号2 ****")
    print(func_fix)
    yield func_fix
    print("****  登陆完成3 ****")

6.数据驱动
在测试用例方法上打标签@pytest.mark.parametrize(“case”, cases)

7.使用pytest运行测试用例时,fixture ‘XXX‘ not found的原因以及解决方法
https://blog.csdn.net/weixin_42023035/article/details/132769168?

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值