前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pytest测试实战|Conftest.py详解

Pytest测试实战|Conftest.py详解

作者头像
无涯WuYa
发布2024-04-23 16:36:59
750
发布2024-04-23 16:36:59
举报

Pytest测试实战

The pytest framework makes it easy to write small, readable tests, and can scale to support complex functional testing for applications and libraries. 这段话很好地阐述了Pytest的设计思想与强大的特性。之前详细地阐述了Pytest测试框架搜索规则Pytest测试框架执行方式Pytest测试框架参数化Pytest测试框架Fixture详解,本文章主要详细地阐述下Pytest测试框架中Conftest.py特性。

Conftest.py实战

Fixture强大的特性在实际的工作中是非常有价值并且是实用的,这样可以根据需求,在对应的测试模块中编写Fixture函数来达到测试需求的目的。但是这样也产生了新的问题,如有三个测试模块,并且测试需求都是需要Fixture函数,那么也就意味着每个测试模块都需要编写对应的Fixture函数代码了。这样显然是很不合理的。但是这样的案例在企业里面也是非常常见的情况,如授权的Fixture函数,不管哪个测试模块都是需要这个Fixture函数的。既然存在问题,有没有好的解决思路呢?在Pytest测试框架中提供了conftest.py来专门解决这部分问题。 通过conftest.py可以共享Fixture, 再本质的说就是通过conftest.py⽂件来达到共享Fixture函数。根据这个特性可以把一个测试工程中有多个测试模块共同使用到的公共Fixture函数分离到conftest.py文件中。使用conftest.py文件需要注意的点是:conftest.py是一个模块文件,但是不能导入。第二是建议把conftest.py文件位置存放在测试工程的根目录下,如下所示。

在工程的根目录下不言而喻,它是能够针对工程下所有的测试模块里面符合执行的所有测试函数(测试方法)都是共享Fixture函数的。这里以登录授权为案例,演示下授权的Fixture函数分离到conftest.py文件后,如何在多个测试模块中达到共享的特性。在test包下创建测试模块。在conftest.py里面编写获取授权登录的TOKEN的Fixture函数,源码如下:

代码语言:javascript
复制
#! /usr/bin/env python
# -*- coding:utf-8 -*-
# author:无涯

import  pytest
import  requests

@pytest.fixture()
def login():
  r=requests.post(
    url='http://0.0.0.0:8000/login/auth/',
    json={"username":"13484545195","password":"asd888"},
    headers={'content-type':'application/json'})
  return r.json()['token']

@pytest.fixture()
def headers(login):
return {'Authorization':'JWT {token}'.format(token=login)}

在测试模块中分别调用conftest.py里面的Fixture函数headers,test_index.py模块源码如下。

代码语言:javascript
复制
#! /usr/bin/env python
# -*- coding:utf-8 -*-
# author:无涯

import  requests

def test_case_index(headers):
  r=requests.get(url='http://0.0.0.0:8000/interface/index',headers=headers)
  assert r.status_code==200

test_platform.py源码如下。

代码语言:javascript
复制
#! /usr/bin/env python
# -*- coding:utf-8 -*-
# author:无涯

import  requests

def test_case_query(headers):
r=requests.get(
url='http://0.0.0.0:8000/interface/products?name=无涯课堂',
headers=headers)
  assert r.status_code==200

整体目录结构如下所示。

在测试模块中都引用了conftest.py里面的Fixture函数headers,执行test包下所有的测试模块,执行后的结果信息如下。

如上所示可以看到执行结果都是通过的。

特别需要强调的是在一个测试工程下,不建议使用多个conftest.py的文件,这样会引起混乱,而且维护成本也高。不是所有的Fixture函数都是需要分离到conftest.py的,分离到conftest.py文件的Fixture函数一定是多个测试模块都共同需要共享这个Fixture函数,如果某个Fixture函数仅仅是某个测试模块中私有使用,这种情况其实完全就没分离的必要性。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档