一、读取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)