15、接口自动化之读取excel测试数据(一次性读取所有数据 对内存要求会高一些)

一、读取EXCEL中指定行的所有数据+花边概念

# excel处理 EXCEL去处理测试数据 测试结果 pip install openpyxl

# 存入Excel里面 Python去操作Excel
# 1、只支持这种后缀  .xlsx   ---》openpyxl只支持这种格式

from openpyxl import load_workbook

# 打开Excel
# Open the given filename and return the workbook
wb = load_workbook(r"D:\PycharmProjects\class_01\testcase_02\test.xlsx")

# 2、定位表单
sheet = wb['test']  # 传表单名  返回一个表单对象

# #3、定位单元格  行列值
# res = sheet.cell(1,1).value

# 表单的最大行
print("最大行值:{}".format(sheet.max_row))
# 表单的最大列
print("最大列值:{}".format(sheet.max_column))
# print("拿到的结果是:",res)

#数据从excel表中拿出来数字还是数字类型,其余都是字符串类型
#读取第一行的所有数据
print("url:{0},类型是{1}".format(sheet.cell(1, 1).value, type(sheet.cell(1, 1).value)))
print("data:{0},类型是{1}".format(sheet.cell(1, 2).value, type(sheet.cell(1, 2).value)))
print("code:{0},类型是{1}".format(sheet.cell(1, 3).value, type(sheet.cell(1, 3).value)))
print("method:{0},类型是{1}".format(sheet.cell(1, 4).value, type(sheet.cell(1, 4).value)))

二、拓展:强转字符类型:把数据类 转换成 原本数据类型 

s = 'True'
print(s,type(s))
# 把数据类型转换成原本的数据类型
print(eval(s), type(eval(s)))

三、读取excel中的所有值

from openpyxl import load_workbook

wb = load_workbook(r"D:\PycharmProjects\class_01\testcase_02\test.xlsx")
#定位表单
sheet = wb['test']  # 传表单名  返回一个表单对象


#res=sheet.cell(1,1)
#错误演示一:指定为到单元格 并未取值  (输出提示:<Cell 'test'.AI>)
#print(res)
#get_method、get_url、get_data、get_expected



#读取EXCEL中的所有值
test_data=[]
for i in range(1,sheet.max_row+1):#1~5的值
    sub_data={}#空列表
    #print("url:{0},类型是{1}".format(sheet.cell(1, 1).value, type(sheet.cell(1, 1).value)))
    sub_data['url']=url=sheet.cell(i, 1).value

    #print("data:{0},类型是{1}".format(sheet.cell(1, 2).value, type(sheet.cell(1, 2).value)))
    sub_data['data']=data=sheet.cell(i, 2).value

    #print("method:{0},类型是{1}".format(sheet.cell(1, 4).value, type(sheet.cell(1, 4).value)))
    sub_data['method']=method=sheet.cell(i, 3).value

    #print("code:{0},类型是{1}".format(sheet.cell(1, 3).value, type(sheet.cell(1, 3).value)))
    sub_data['expected']=expected=sheet.cell(i, 4).value
    test_data.append(sub_data)
print(test_data)

四、EXCEL读取数据之封装成函数

from openpyxl import load_workbook

class DoExcel:
    def __init__(self,file_name,sheet_name):
        self.file_name=file_name
        self.sheet_name=sheet_name

    def get_data(self):
        wb = load_workbook(self.file_name)
        # 传表单名  返回一个表单对象
        sheet = wb[self.sheet_name] #注意:不要写成字符串,属性和方法都要实例去调用,要用self
        #读取EXCEL中的所有值
        test_data=[]
        for i in range(1,sheet.max_row+1):#1~5的值
            sub_data={}
            #print("url:{0},类型是{1}".format(sheet.cell(1, 1).value, type(sheet.cell(1, 1).value)))
            sub_data['url']=url=sheet.cell(i, 1).value

            #print("data:{0},类型是{1}".format(sheet.cell(1, 2).value, type(sheet.cell(1, 2).value)))
            sub_data['data']=data=sheet.cell(i, 2).value

            #print("method:{0},类型是{1}".format(sheet.cell(1, 4).value, type(sheet.cell(1, 4).value)))
            sub_data['method']=method=sheet.cell(i, 3).value

            #print("code:{0},类型是{1}".format(sheet.cell(1, 3).value, type(sheet.cell(1, 3).value)))
            sub_data['expected']=expected=sheet.cell(i, 4).value

            test_data.append(sub_data)
        #返回获取到的数据
        return test_data

if __name__ == '__main__':
    print(DoExcel(r"D:\PycharmProjects\class_01\testcase_02\test.xlsx",'test').get_data()
)

五、实操

a.首先编写请求函数

import requests

class HttpRequest():
    def http_request(self, url, data, method, cookie=None):
        if method.lower() == "get":
            # verify=False忽略证书  ssl
            res = requests.get(url, data, cookies=cookie, verify=False)
            return res
        elif method.lower() == "post":
            res = requests.post(url, data, cookies=cookie, verify=False)
            return res  # 返回的是一个消息实体
        else:
            raise  Exception('不支持的请求')

b.存在依赖关系,编写反射函数 

class GetData:
    Cookie = '小郭'

setattr(GetData,'Cookie','小黄')
print(GetData.Cookie)

c.读取excel函数

1、方法一(一次性读取所有)

from openpyxl import load_workbook

class DoExcel:
    def __init__(self,file_name,sheet_name):
        self.file_name=file_name
        self.sheet_name=sheet_name
        

    def get_data(self):
        wb = load_workbook(self.file_name)
        sheet = wb[self.sheet_name]  # 传表单名  返回一个表单对象
        #读取EXCEL中的所有值
        test_data=[]
        for i in range(1,sheet.max_row+1):#1~5的值
            #保证数据与excel中的格式一致
            sub_data={}
            #print("url:{0},类型是{1}".format(sheet.cell(1, 1).value, type(sheet.cell(1, 1).value)))
            sub_data['url']=url=sheet.cell(i, 1).value

            #print("data:{0},类型是{1}".format(sheet.cell(1, 2).value, type(sheet.cell(1, 2).value)))
            sub_data['data']=data=sheet.cell(i, 2).value

            #print("method:{0},类型是{1}".format(sheet.cell(1, 4).value, type(sheet.cell(1, 4).value)))
            sub_data['method']=method=sheet.cell(i, 3).value

            #print("code:{0},类型是{1}".format(sheet.cell(1, 3).value, type(sheet.cell(1, 3).value)))
            sub_data['expected']=expected=sheet.cell(i, 4).value

            test_data.append(sub_data)
        #返回获取到的数据
        return test_data

if __name__ == '__main__':
    print(DoExcel(r"D:\PycharmProjects\class_01\testcase_02\test.xlsx",'test').get_data()
)

 2、方法二(根据传入坐标获取值)

from openpyxl import load_workbook

class DoExcel:
    def __init__(self,file_name,sheet_name):
        self.file_name=file_name
        self.sheet_name=sheet_name
        #打开工作簿再去获取表单名,拿到表单对象,然后全部存储在self.sheet_obj里面
        self.sheet_obj=load_workbook(self.file.name)[self.sheet_name]

    def get_data(self,i,j):
        return self.sheet_obj.cell(i,j).value
      

if __name__ == '__main__':
   #i=1,j=1
   print(DoExcel(r"D:\PycharmProjects\class_01\testcase_02\test.xlsx",'test').get_data(1,1)

 

d、编写测试用例

import unittest
from testcase_01.test_http import HttpRequest
from testcase_01.test_reflect import GetData




# 登录接口
class TestHttp(unittest.TestCase):
    def setUp(self):
        print("我已经开始测试用例了")
    #超继承
    def __init__(self,methodName,url,data,method,expected):#通过初始化函数传参
        super(TestHttp,self).__init__(methodName)#保留父类的方法
        self.url = url
        self.data = data
        self.method = method
        self.expected = expected

    def test_api(self):
            res = HttpRequest().http_request(self.url, self.data, self.method,getattr(GetData,'Cookie'))
            if res.cookies:
                setattr(GetData, 'Cookie', 'res.cookies')
            try:
                self.assertEqual(self.expected, res.json()['code'])
            except Exception as e:
                print("test_api's error is {0}".format(e))
                raise e
            print(res.json())
    def tearDown(self):
        print("我已经执行完毕测试用例了")

f.读取ECEL添加测试集输出测试报告

import unittest
import HTMLTestRunner
import time
from testcase_01.test_case import TestHttp  # 具体到类名
from testcase_02.do_excel import DoExcel


# 使用DoExcel类来读取数据
test_data = DoExcel(r"D:\PycharmProjects\class_01\testcase_02\test.xlsx", 'test').get_data()
suite = unittest.TestSuite()  # 存储用例
for item in test_data:  # 遍历是为了创建实例
    #当请求的数据类型错误时,记得转换数据类型
    #针对expected,本身就是数字类型时,执行报错的话,可将它转换成str类型
    suite.addTest(TestHttp('test_api', item['url'], item['data'], item['expected'], item['method']))  # 实例方式去加载用例

if __name__ == "__main__":
    time1 = time.strftime("%Y-%m-%d %H-%M-%S")
    name1 = time1 + "report.html"

with open(name1, 'wb') as file:
    runner = HTMLTestRunner.HTMLTestRunner(
        stream=file,
        title="单元测试报告",
        description="测试用例执行统计1",
        verbosity=2
    )
    runner.run(suite)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值