通过requests + pytest + allure 实现接口自动化测试
1. 文件导入并读取文件,一般接口文档文件为excl或者csv文件。下面分别读取文件内容:
# csv 文件
url,params,method
http://apis.juhe.cn/simpleWeather/query,"{""city"":""北京"",""key"":""c00bcd3ea3822ee70d7d060e1c8085f6""}",get
http://apis.juhe.cn/sxpd/query,"{""men"":""蛇"",""women"":""羊"",""key"":""bf871cb11079dfbce489822a9461b0b9""}",post
# 读取csv文件
import csv # 导包
class ReadCsvClass():
def readCsvMethod(self):
item = [] # 定义一个空列表
rr = csv.reader(open("../datas/data.csv", "r")) # 以读的方式打开csv文件
for csv_i in rr: # 循环每一条数据
# print(csv_i)
item.append(csv_i) # 添加到定义好的列表中
item = item[1:] # 清洗掉第一行不需要的数据
return item # 以列表的方式返回csv读取的数据
rcc = ReadCsvClass()
print(rcc.readCsvMethod())
# excel 数据
url params method
http://apis.juhe.cn/simpleWeather/query {"city":"京","key":"c00bcd3ea3822ee70d7d060e1c8085f6"} get
http://apis.juhe.cn/sxpd/query {"men":"蛇","women":"羊","key":"bf871cb11079dfbce489822a9461b0b9"} post
# 读取exclx数据
from openpyxl import load_workbook # 导包,导入读取Excel文件的包
class UseExcel():
def get_TestExcel(self):
# 打开表
workbook = load_workbook("..datasdata.xlsx")
# 定位表单
sheet = workbook['Sheet1']
print(sheet.max_row) # 3 行
print(sheet.max_column) # 3 列
test_data = [] # 把所有行的数据放到列表中
for i in range(2, sheet.max_row + 1): # 从第二行开始读取数据,读到最后一行
sub_data = {} # 把每行的数据放到字典中
for j in range(1, sheet.max_column + 1): # 外层循环控制行,内层循环控制列
sub_data[sheet.cell(1, j).value] = sheet.cell(i, j).value # 键值对赋值
test_data.append(sub_data) # 拼接每行单元格的数据 并添加到列表中
return test_data # 返回一个列表嵌套字典的格式
t = UseExcel()
f = t.get_TestExcel()
print(f)
2.文件读取完成后,通过requests向该接口发送请求,并获取其中的响应码作为判断接口是否成功的标准。
# 请求csv中的接口
from readdatas.readcsv import ReadCsvClass # 导入读取的数据模块
ecc = ReadCsvClass() # 实例化
lists = ecc.readCsvMethod() # 获得读取csv的数据
import requests # 导入request的包
class RequestCsvClass():
def requestCsvMethod(self):
item = []
for csv_i in lists: # 循环取值,判断请求方式是get还是post,分别利用不同的requests发送请求
if csv_i[2] == "get":
rr = requests.get(csv_i[0], params=csv_i[1].encode("utf-8").decode("latin1")) # .encode("utf-8").decode("latin1"),如果报错,则使用这个
item.append(rr.status_code) # 获取响应码并添加
else:
rr = requests.post(csv_i[0], data=csv_i[1].encode("utf-8").decode("latin1"))
item.append(rr.status_code)
return item # 返回由响应码组成的列表
rc = RequestCsvClass()
print(rc.requestCsvMethod())
# 请求excel 表中的数据
from readdatas.readxlsx import UseExcel # 导入读取excle中的数据模块
ue = UseExcel() # 实例化
lists = ue.get_TestExcel() # 获取excle表中的数据
import requests
class RequestsExcelClass():
def requestsExcelMethod(self):
item = [] # 定义空列表添加状态响应码
for excel_i in lists: # 循环取值,判断请求方式是get还是post,分别利用不同的requests发送请求
if excel_i["method"] == "get":
rr = requests.get(excel_i["url"], params=excel_i["params"].encode("utf-8").decode("latin1"))
item.append(rr.status_code)
else:
rr = requests.post(excel_i["url"], data=excel_i["params"].encode("utf-8").decode("latin1"))
item.append(rr.status_code)
return item # 返回由状态码组成的数组
rc = RequestsExcelClass()
print(rc.requestsExcelMethod())
3.循环所有的状态码,使获取的状态码与200做对比,如果状态码不等于200,则接口错误
# csv接口文档使用pytest+allure实现错误展示
import pytest, os # 导包
from requestdata.requcsv import RequestCsvClass # 将含状态码的列表获取
rc = RequestCsvClass()
ff = rc.requestCsvMethod()
class TestClas():
def test001(self):
for c in ff: # 通过pytest断点判断状态码是否为200,不为200则显示错误
assert c == 200
if __name__ == '__main__':
pytest.main(['--alluredir', 'report/result', 'tsetcsv.py'])
split = 'allure ' + 'generate ' + './report/result ' + '-o ' + './report/html ' + '--clean'
os.system(split) # allure的固定代码
# excle接口文档使用pytest+allure实现错误展示
import pytest, os # 同上
from requestdata.readexcl import RequestsExcelClass
rc = RequestsExcelClass()
ff = rc.requestsExcelMethod()
class TestClas():
def test001(self):
for c in ff:
assert c == 200
if __name__ == '__main__':
pytest.main(['--alluredir', 'report/result', 'testexcl.py'])
split = 'allure ' + 'generate ' + './report/result ' + '-o ' + './report/html ' + '--clean'
os.system(split)