pytest之conftest.py文件使用

log:

       使用pytest框架做接口自动化,一般情况下接口测试前置操作首先需要进行鉴权,基于pytest里面fixture共享机制,可以将鉴权部分提取到配置文件里,pytest可以识别加载conftest.py(这个py文件是自己手动创建的,不会生成),此文件配置好后可以全局生效,但是conftest.py是有一些规范要求,具体规范如下:

  • conftest.py 文件名是固定的,不能更改
  • 一般情况下将conftest.py文件放在管理用例的包下面
  • 不同目录可以有自己的conftest.py,一个项目中可以有多个conftest.py
  • pytest会默认读取conftest.py里面的所有fixture
  • 测试用例文件中不需要手动import conftest.py 或 from ... import conftest.py

下面举几个简单的示例:

fixture具体解释请自行百度,这不做过多说明,不写参数默认是function(函数级别的引用)

示例一、在用例里面进行前置鉴权操作,用例里面进行参数引用:

import pytest
import requests
from readConfig import readconf_ip
host = readconf_ip("vblog")

# 共享登录获取到的cookie值
@pytest.fixture
def login():
    login_param = {
        "username": "sang",
        "password": 123
    }
    res = requests.post(url=host + "/login", data=login_param)
    cookie = res.headers['Set-Cookie']
    return {"Cookie": cookie}


def test_001(login):
    """
    :param login: 共享的参数cookie值
    :return: 
    """
    print("开始执行第一条用例,获取列表")
    res = requests.get(url=host + "/currentUserName", headers=login)
    print("执行结果", res.text)


def test_002(login):
    print("执行第二条用例,获取文章列表")
    param = {"page": 1, "count": 6}
    res = requests.get(url=host + "/admin/article/all?",params=param, headers=login)
    print(f"请求URL:{res.url}\n请求方法:GET\n请求参数:{param}\n响应状态:{res.status_code}\n响应文本:{res.text}\n响应时间:{res.elapsed}")
    json_res = res.json()
    assert json_res["totalCount"] == 18398

示例二、在conftest.py进行共享,且在用例里面引用

conftest.py写法:

import pytest
import requests
from readConfig import readConf,readconf_ip

vblog = readconf_ip("vblog")


@pytest.fixture
def login():
    login_param = {
        "username": readConf(sec="user", opt="username"),
        "password": readConf(sec="user", opt="password")
    }
    res = requests.post(url=vblog + "/login", data=login_param)
    cookie = res.headers['Set-Cookie']
    return {"Cookie": cookie}

测试用例引用

import requests
from readConfig import readconf_ip
host = readconf_ip("vblog")


def test_001(login):
    """
    login鉴权参数直接引用,无需在用例文件进行import conftest.py导入
    """
    print("开始执行第一条用例,获取列表")
    res = requests.get(url=host + "/currentUserName", headers=login)
    print("执行结果", res.text)


def test_002(login):
    print("执行第二条用例,获取文章列表")
    param = {"page": 1, "count": 6}
    res = requests.get(url=host + "/admin/article/all?",params=param, headers=login)
    print(f"请求URL:{res.url}\n请求方法:GET\n请求参数:{param}\n响应状态:{res.status_code}\n响应文本:{res.text}\n响应时间:{res.elapsed}")
    json_res = res.json()
    assert json_res["totalCount"] == 18398, "实际与预期的不符"

以上内容已实践测试通过,可正常使用

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值