使用python+requests进行接口测试我们已经进行了初步的认识,那么如何进行接口的自动化测试呢,目前企业中接口自动化多以excel,数据库mysql,yaml文件存放接口数据进行循环遍历进行接口请求。若不了解excel及数据库相关操作可阅读之前文章:
import xlrd
import json
import xlutils
from xlutils.copy import copy
excDir = './apitest.xls'
#保持原样式不变打开excel,转译取出的参数冲突时,需去掉样式
workbook = xlrd.open_workbook(excDir,formatting_info=True)
worksheet = workbook.sheet_by_index(0)
nrows = worksheet.nrows
url = 'http://39.107.96.138:3000/api/v1/topics'
wrbook = copy(workbook)
wrsheet = wrbook.get_sheet(0)
for i in range(1,nrows):
cellData = worksheet.cell_value(i, 6) # 第7列数据存放的参数
response = requests.get(url,params=cellData)
excelres = response.json()["success"]
wrsheet.write(i, 9, excelres) #excel写入获得结果 第10列写入结果
wrbook.save(r'./apitest-results.xls') #保存
可以看到我们采用了excel循环请求的方式,对接口进行了测试,最后把得到的数据存入到了excel之中,这里我们还可以进行优化,使用openpyxl库加断言的方式请求excel
import requests
import json
import openpyxl
def two():
excDir = r'./goodtest.xlsx'
workbook = openpyxl.load_workbook(excDir) #打开文件
sheets = workbook.sheetnames #获取所有表名
worksheet = workbook['Sheet1'] #获取Sheet1
nrows = worksheet.max_row #获取行数
cols = worksheet.max_column #获取列数
data = worksheet.cell(2,4).value #获取某单元格的值
for i in range(2,nrows+1):
url = worksheet.cell(i,4).value
plan = worksheet.cell(i,5).value
cellData = worksheet.cell(i,7).value
if plan == ('get'):
response1 = requests.get(url,params=cellData)
if response1.json()["success"] == True:
worksheet.cell(i,10,value="passee")
else:
worksheet.cell(i,10,value="fail")
if plan == ("post"):
cellData1 = json.loads(cellData, encoding='utf-8')
response2 = requests.post(url,data=cellData1)
if response2.json()["success"] == True:
worksheet.cell(i, 10, value="pass")
else:
worksheet.cell(i, 10, value="fail")
workbook.save(excDir)
以上才用了一个excel中存放多个接口的用例,循环判断请求方式进行不同的请求获取不同的用力参数进行请求,最后进行断言判断,将得到的结果写入到excel之中。
我们还可以采用数据库存放用例的方式进行循环遍历的请求:
import pymysql
import requests
#链接数据库
db = pymysql.connect(host='127.0.0.1',user='root',passwd='123456',db='ergou')
cursor = db.cursor() #创建游标
cursor.execute('select count(id) from test;') #查询语句
match = cursor.fetchone()
matchs = int(match[0]) #获取总数
cursor.execute('select url from test;')
url = cursor.fetchall() 获取每个数据的url
cursor.execute('select method from test;')
method = cursor.fetchall()
cursor.execute('select params from test;')
params = cursor.fetchall()
for i in range(0,matchs):
response = requests.get(''.join(url[i]),params=''.join(params[i])) # 请求数据且转换
if response.json()["success"]==True:
cursor.execute(f'update test set result = "pass" where id = {i}+1')
print(response.status_code)
print(response.text)
db.commit()
以上可以看到我们首先获取数据库中的数据,数据以元组的形式存放,我们需要进行格式的转换,最后别忘了数据库的提交哦。