如题,在做接口自动化测试的时候,出现了一个问题,到现在还没解决,请大家帮忙看下要怎么处理,在代码里面传token就没问题,换到excel里面就不行了
这是获取excel的
from openpyxl import load_workbook
class Do_Excel:
def __init__(self,file_name,sheet_name):
self.file_name=file_name
self.sheet_name=sheet_name
def getdata(self):
wb = load_workbook(self.file_name)
sheet = wb[self.sheet_name]
test_data = []
for i in range(1, sheet.max_row+1):
sub_data = {}
sub_data['method'] = sheet.cell(i, 1).value
sub_data['url'] = sheet.cell(i, 2).value
sub_data['data'] = sheet.cell(i, 3).value
sub_data['header'] = sheet.cell(i, 4).value
sub_data['expected'] = sheet.cell(i, 5).value
test_data.append(sub_data)
return test_data
if __name__ == '__main__':
print(Do_Excel("C:\\Users\\1\\PycharmProjects\\APITEST\\testlogin.xlsx", "Sheet1").getdata())
这是反射token的
class Get_data:
token=None#存储Token
这是HTTP请求
import requests
login_url=""
login_header={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0",
"Accept": "application/json, text/plain, */*",
"Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
"Accept-Encoding": "gzip, deflate",
"Content-Type": "application/json;charset=utf-8",
"Content-Length": "69"}
class HttpRequest:
@staticmethod
def http_requests(http_method, url, data, header):
try:
if http_method.upper() == 'GET':#get请求
res = requests.get(url, header, verify=False)
elif http_method.upper() == 'POST':#post请求
res = requests.post(url, json=data, headers=header,verify=False)
else:
print("输入的请求方法错误")
except Exception as e:
print("请求方法有误{0}".format(e))
raise e
return res#返回消息实体
if __name__ == '__main__':
# 请求参数
login_data = {"loginName":"","password":""}
res = HttpRequest().http_requests("post", login_url, login_data, login_header)
print(res.json())
这是测试testhttp请求(读取表格的,这样的获取不到token,如果在 if res.json():下面写入
setattr(Get_data, ‘token’, res.json()[‘data’][‘token’]))会报bool错误去掉token报没有token
import unittest
from APITEST.http_request import HttpRequest
# from APITEST.project_path import *
from APITEST.get_token import Get_data #用这个必须把下面的全局变量注释掉
from APITEST.do_excel import Do_Excel
from ddt import ddt, data#列表嵌套列表,或列表嵌套字典
# TOKEN = None#全局变量
test_data=Do_Excel("", "").getdata()
@ddt
class TestHttp(unittest.TestCase):
def setUp(self):
print("正在执行测试用例中")
@data(*test_data)
def test_api(self, item):
res = HttpRequest.http_requests(item["method"], item["url"], eval(item["data"]), eval(item["header"]))
if res.json():
setattr(Get_data, 'token', res.json()['data'])这里获取到的token并将token放到请求头里面
self.assertEqual(str(item["expected"]), res.json()['msg'])
print("获取到的结果是{0}".format(res.json()['msg']))
def tearDown(self):
print("测试用例执行完毕")
这是直接在代码里面传的,这样用不会有错误
import unittest
from APITEST.http_request import HttpRequest
from APITEST.get_token import Get_data
class TestHttp(unittest.TestCase):
def setUp(self):
print("正在执行测试用例中")
self.login_url = ""
# self.data = {"loginName":"","password":""}
self.header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0",
"Accept": "application/json, text/plain, */*",
"Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
"Accept-Encoding": "gzip, deflate",
"Content-Type": "application/json;charset=utf-8",
"Content-Length": "69"}
def test_login_1(self): # 登录
data = {"loginName":"z","password":""}
res = HttpRequest().http_requests("post", self.login_url, data, self.header)
if res.json():
# TOKEN=res.json()['data']['token']
setattr(Get_data, 'token', res.json()['data']['token'])
try:
self.assertEqual("success", res.json()['msg'])
except AssertionError as e:
print("test_login's error as {}".format(e))
print(res.json())
def test_select_driver(self):#查找设备
select_url = ""
data = {"": ""}
select_header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Firefox/95.0",
"Accept": "application/json, text/plain, */*",
"Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
"Accept-Encoding": "gzip, deflate",
"Content-Type": "application/json;charset=utf-8",
"Content-Length": "69",
"authorization": getattr(Get_data,'token')}
res_1 = HttpRequest().http_requests("get", select_url, data, select_header)
print(res_1.json())
try:
self.assertEqual("ok", res_1.json()['msg'])
except AssertionError as e:
print("test_select_driver's error as {}".format(e))
print(res_1.json())
def tearDown(self):
print("测试用例执行完毕")
抓耳挠腮好几天了解决不了,麻烦各位了