上一篇主要简单的讲了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格式