oython+requests+excel+unittest做接口自动化测试传递不了token

在进行接口自动化测试时,作者发现当从Excel文件读取token时遇到问题,代码直接运行无误,但通过Excel读取就失败。代码涉及使用openpyxl读取Excel,以及使用requests库发送HTTP请求。测试框架为unittest,使用ddt进行数据驱动。问题在于无法正确地从响应中提取并存储token。
摘要由CSDN通过智能技术生成

如题,在做接口自动化测试的时候,出现了一个问题,到现在还没解决,请大家帮忙看下要怎么处理,在代码里面传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("测试用例执行完毕")

抓耳挠腮好几天了解决不了,麻烦各位了
在这里插入图片描bu述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值