关于接口自动化测试(2)

上一篇主要简单的讲了get和post请求的接口自动化代码,这一篇再记录一下关于利用数据驱动来进行的接口自动化测试

首先数据驱动就是通过一些数据文件提供的数据来进行的接口测试,文件可以是csv文件,也可以是excel文件,也可以是yaml文件等等

另外引入一个概念fixture修饰器,本篇代码就是通过@pytest.fixture传递参数

scope: 作用域     autouse: 是否自动加载    name : 引用名称     parmas: 参数     ids:执行显示函数名称后缀

fixture中传的参数为list,list中有多少数据,就会生成多少测试用例,用例的操作步骤都一样,只是数据不一样,在执行过程中,再把list的中每个数据赋给对应接口调用

import pytest
import requests

base_url = "http://39.107.96.138:3000/api/v1/"
testdata = {
        "accesstoken":"49b2e830-4305-475d-b6b5-52287cc5daaa",
        "title":"2313131231231232",
        "tab":"ask",
        "content":"xxxxxxxxxxxxx"
    }

@pytest.fixture(scope="module",autouse=True,name="topic_id")
def newtopic():
    url = base_url + 'topics'
    r = requests.post(url, json=testdata)
    jsonData = r.json()

    return jsonData['topic_id']


def test_update_topic(topic_id):
    """
    编辑话题
    :return:
    """
    print("test_update_topic",topic_id)

然后我们就可以进行数据驱动的测试了

首先创建一个csv文件(解决中文乱码问题可以用记事本打开,另存为utf-8即可)

首先来一段关于csv文件的代码(注意csv文件的路径)

import pytest
import os
import csv
import requests


"""
使用csv中的数据进行数据驱动测试
"""

dir=os.path.dirname(os.path.dirname( os.path.dirname(__file__)))

csvfile = os.path.join(dir,'data/data.csv')

csvdata = []
with open(csvfile,encoding='utf8') as file:
    filedata= csv.reader(file)
    next(filedata)
    for x in filedata:
        csvdata.append(x)

print(csvdata)
"""
 [['0418178a-b80c-4e15-aa8f-bab03a3491cb', '1111111111', 'ask', '22222222222', '错误的accessToken'], ['49b2e830-4305-475d-b6b5-52287cc5daaa', '', 'ask', '2222222222', '标题不能为空'], ['49b2e830-4305-475d-b6b5-52287cc5daaa', '1', 'ask', '2222222222', '标题字数太多或太少'], ['49b2e830-4305-475d-b6b5-52287cc5daaa', '1111111111', '', '2222222222', '必须选择一个版块'], ['49b2e830-4305-475d-b6b5-52287cc5daaa', '1111111111', 'ask', '', '内容不可为空']]
  ||   数据格式转换一下
  \/
[{"token":"0418178a-b80c-4e15-aa8f-bab03a3491cb","tab":"ask"},{....}]
"""


@pytest.fixture(params=csvdata)
def data(request):
    return request.param

base_url = "http://39.107.96.138:3000/api/v1/"

def test_topics(data):
    url = base_url + 'topics'
    testdata={
        "accesstoken": data[0],
        "title": data[1],
        "tab": data[2],
        "content": data[3]
    }
    r = requests.post(url, json=testdata)
    jsonData = r.json()

    assert jsonData['error_msg'] == data[4]

通过对csv文件的读取就已经实现了一个简答的接口自动化测试。

相同的原理进行一次Excel的数据驱动

import pytest
import os
import requests
from openpyxl import load_workbook
from openpyxl.worksheet.worksheet import Worksheet


"""
使用Excel中的数据进行数据驱动测试
"""

dir=os.path.dirname(os.path.dirname( os.path.dirname(__file__)))

excelfile = os.path.join(dir,'data/data.xlsx')

workbook = load_workbook(excelfile)
worksheet:Worksheet = workbook['topic_data']
exceldata = []
for row in worksheet.iter_rows(min_row=2,max_row=6,min_col=1,max_col=5,values_only=True):
    # print(row)
    exceldata.append(row)



"""
 [['0418178a-b80c-4e15-aa8f-bab03a3491cb', '1111111111', 'ask', '22222222222', '错误的accessToken'], ['49b2e830-4305-475d-b6b5-52287cc5daaa', '', 'ask', '2222222222', '标题不能为空'], ['49b2e830-4305-475d-b6b5-52287cc5daaa', '1', 'ask', '2222222222', '标题字数太多或太少'], ['49b2e830-4305-475d-b6b5-52287cc5daaa', '1111111111', '', '2222222222', '必须选择一个版块'], ['49b2e830-4305-475d-b6b5-52287cc5daaa', '1111111111', 'ask', '', '内容不可为空']]
  ||   数据格式转换一下
  \/
[{"token":"0418178a-b80c-4e15-aa8f-bab03a3491cb","tab":"ask"},{....}]
"""


@pytest.fixture(params=exceldata)
def data(request):
    return request.param

base_url = "http://39.107.96.138:3000/api/v1/"

def test_topics(data):
    url = base_url + 'topics'
    testdata={
        "accesstoken": data[0],
        "title": data[1],
        "tab": data[2],
        "content": data[3]
    }
    r = requests.post(url, json=testdata)
    jsonData = r.json()

    assert jsonData['error_msg'] == data[4]

注意代码中有一段需要进行格式的转化,返回的格式体为json格式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值