1.Excel文件内容
2.目录结构
3.接口项目文件
# httpclient.py
# 专门封装getpost请求方式
import json
import allure
import requests
class HttpClient:
# 只要用post,get请求方式 就创建会话
def __init__(self):
self.session = requests.Session()
# 发送请求 请求方式, 接口地址,接口参数类型,接口数据,头部,其他信息
# 判断 你要发送的是请求方式 如果get post
# post请求参数类型 json data
@allure.step('发送{method}请求')
def send_request(self,method,url,param_type=None,data=None,headers = None,**kwargs):
# 请求方式转成大写
method = method.upper()
param_type = param_type.upper()
print(method)
requestHeaders = None
if headers is not None:
requestHeaders = json.loads(headers)
if method == 'GET':
if param_type == 'url':
requestUrl = '%s%s'%(url,"" if data is None else data)
response = self.session.request(method=method,url=requestUrl,headers = requestHeaders,**kwargs)
else:
response = self.session.request(method=method,url=url,params = data,headers = requestHeaders,**kwargs)
elif method == 'POST':
if param_type == 'FORM':
response = self.session.request(method = method,url = url,data=data,**kwargs)
else:
# requestData = eval(data)
requestData = json.loads(data)
response = self.session.request(method = method,url = url,json=requestData,headers=requestHeaders,**kwargs)
pass
elif method == 'DELETE':
if param_type == 'FORM':
response = self.session.request(method = method,url = url,data=data,**kwargs)
else:
response = self.session.request(method = method,url = url,json=data,**kwargs)
elif method == 'PUT':
if param_type == 'FORM':
response = self.session.request(method = method,url = url,data=data,**kwargs)
else:
response = self.session.request(method = method,url = url,json=data,**kwargs)
else:
raise ValueError
return response
# 魔法方法 send_request 实例化类.方法名
# 实例化类 HttpClient(),send_request()
# a = HttpClient()
def __call__(self,method,url,param_type,data=None,headers = None,**kwargs):
return self.send_request(method,url,param_type,data,headers = headers,**kwargs)
def close_session(self):
self.session.close()
# excel_read.py
# 有数据
# 2.读取excel里面的数据
import openpyxl
class excelData:
def getExcel(self,filename):
# 找工作簿
workbook = openpyxl.load_workbook(filename)
# 表单 指定表单
sheet = workbook['Sheet1']
# 拿里面的数据 循环数据
rows_sheet = sheet.iter_rows()
print(rows_sheet)
list2 = []
for item in rows_sheet:
# print(item)
if item[0].value == 'id':
continue
# print(item)
# 这些值在元组里面的值,放在列表 4个学员 散的 拿出来的数据 会给别的文件用
# 测试 测试用例 一个文件夹 测试数据 4个学员 给他们
# 再定义一个空列表 班级 装了4个学员 只要拿到班级 拿到所有的学员
# list2放在循环里面和放在循环外面有区别的,要整个循环结束之后 拿到所有学员
# 之后才把他们一起放到列表中去
# 循环里面 循环第一次 列表有数据 循环第二遍 又重新创建一个列表
# 循环体结束了,代表整个循环结束了
list1 = []
for col in item:
list1.append(col.value)
list2.append(list1)
# print(list2)
return list2
# 把excel里面所有的值都拿出来了,为了后面好使用,封装起来
# 实例化类 方法 多断点 看一下数据是怎么放置进去列表中的
if __name__ == '__main__':
a = excelData().getExcel('../data/process.xlsx')
print(a)
# 1.已经把excel里面的数据拿到了
# 2,测试数据 测试登录 测试用例 正常情况 异常情况
# login_test.py
# 测试excel里面的数据
# 知识点 写这块 比较友好 读取数据测试
# 测试数据 做登录测试 用什么知识点 pytest/unittest 单元测试框架 自动化里面写用测试用例的
# 用代码去写测试用例 测试 unittest / pytest 管理用例 参数化 unittest / pytest
# 从yaml文件中拿到数据 excel文件中拿到数据 惊喜 生成测试报告
# 测试登录 登录数据拿到 拿到数据
# 拿到登录数据 发送请求 写过一次封装请求
import allure
import openpyxl
import pytest
from class43.base.httpclient import HttpClient
from class43.lib.excelRead import excelData
class TestCase:
@pytest.mark.parametrize('case',excelData().getExcel('./data/login1.xlsx'))
def test_commonapi(self,case):
# print('wwwwww',case)
if case[7] is not None:
allure.dynamic.feature(case[7])
if case[8] is not None:
allure.dynamic.story(case[8])
if case[9] is not None:
allure.dynamic.title(case[9])
if case[10] is not None:
allure.dynamic.description(case[10])
if case[11] is not None:
allure.dynamic.severity(case[11])
id = case[0]
url = case[1]
body = case[2]
method = case[3]
param_type = case[4]
expect = case[5]
httpclient = HttpClient()
# 发送请求 传参 参数哪里来? excel里拿?
# 我们要的参数已经拿到了 做接口测试
# method,url,param_type=None,data=None,headers = None,**kwargs
# 发送请求 发送失败 怎么办? 打个断点
common = httpclient(method = method,url = url,param_type=param_type,data = body)
# 打印结果 4个接口都获得了 结果 不清楚为什么会出现问题 调试
print(common.json())
dict_expect = eval(expect)
try:
assert dict_expect == common.json()
rel = '用例成功'
except Exception as e:
rel = '用例失败'
workbook = openpyxl.load_workbook('./data/login1.xlsx')
sheet = workbook['Sheet1']
# 数据写进去
sheet.cell(id+1,7).value=rel
workbook.save('./data/login1.xlsx')
if __name__ == '__main__':
pytest.main(['-sv','login_test.py'])
# 登录成功 生成测试报告
# process_test.py
# 测试excel里面的数据
# 知识点 写这块 比较友好 读取数据测试
# 测试数据 做登录测试 用什么知识点 pytest/unittest 单元测试框架 自动化里面写用测试用例的
# 用代码去写测试用例 测试 unittest / pytest 管理用例 参数化 unittest / pytest
# 从yaml文件中拿到数据 excel文件中拿到数据 惊喜 生成测试报告
# 测试登录 登录数据拿到 拿到数据
# 拿到登录数据 发送请求 写过一次封装请求
import allure
import openpyxl
import pytest
from class43.base.httpclient import HttpClient
from class43.lib.excelRead import excelData
class TestCase:
@pytest.mark.parametrize('case',excelData().getExcel('../data/process.xlsx'))
def test_commonapi(self,case):
id = case[0]
url = case[1]
body = case[2]
headers = case[3]
method = case[4]
param_type = case[5]
expect = case[6]
print('wwwwww',case)
httpclient = HttpClient()
# 发送请求 传参 参数哪里来? excel里拿?
# 我们要的参数已经拿到了 做接口测试
# method,url,param_type=None,data=None,headers = None,**kwargs
# 发送请求 发送失败 怎么办? 打个断点
common = httpclient(method = method,url = url,param_type=param_type,data = body,headers=headers)
# 打印结果 4个接口都获得了 结果 不清楚为什么会出现问题 调试
print(common.json())
dict_expect = eval(expect)
try:
assert dict_expect == common.json()
rel = '用例成功'
except Exception as e:
rel = '用例失败'
workbook = openpyxl.load_workbook('../data/process.xlsx')
sheet = workbook['Sheet1']
# 数据写进去
sheet.cell(id+1,8).value=rel
workbook.save('../data/process.xlsx')
if __name__ == '__main__':
pytest.main(['-sv','process_test.py'])
# 登录成功 生成测试报告
# 1.接口响应返回来的值,保存在变量中,所有数据的变量
# 2.从excel 麻烦一点 再标记一下 你要取的值 jsonpath uservar $..msg
# run.py
import os
import pytest
if __name__ == '__main__':
pytest.main(['-sv','./test_case/login_test.py','--alluredir','allure-results','--clean-alluredir'])
os.system('allure serve allure-results')
# 单接口测试
# excel做接口关联