如果有100个测试用例,重复的去写,如果验证的较多参数,这种情况下该如何做?copy后期会很大,管理很困难
1.根据case设计接口自动化框架
根据项目业务接口来编写一个excel
case编号 | 作用 | 是否执行 | 前置条件 | url | method | data | cookie操作 | 预期结果方式 | 预期结果 |
---|---|---|---|---|---|---|---|---|---|
caichen_001 | 获取广告位 | yes | api3/getbanneradvertver2 | post | {"username":"111111"} | yes | mec | ||
caichen_002 | 测试 | yes | caichen_001 | api3/beta4 | post | {"username":"111112"} | no | errorcode | 1006 |
caichen_003 | 新课程 | yes | api3/newcourseskill | post | {"username":"111113"} | write | json | ||
caichen_004 | 评价 | yes | api3/getdownrecommend | post | {"username":"111114"} | no | json | ||
caichen_005 | 课程信息 | yes | api3/getcourseintro | post | {"username":"111115"} | no | json | ||
caichen_006 | 播放列表 | yes | api3/getmedialist | post | {"username":"111116"} | no | json | ||
caichen_007 | 课程列表 | yes | api3/courselistinfo | post | {"username":"111117"} | no | json |
2.对excel操作进行封装
- 安装库pip install openpyxl
#handle_cookie.py
import openpyxl
from openpyxl import workbook
import sys
from collections.abc import Iterable
import os
base_path = os.getcwd()
sys.path.append(base_path)
class HandExcel:
def load_excel(self):
'''
加载excel
'''
open_excel = openpyxl.load_workbook(base_path+"/Case/caichen.xlsx")
return open_excel
def get_sheet_data(self,index=None):
'''
加载所有sheet的内容
'''
sheet_name = self.load_excel().sheetnames
if index == None:
index = 0
data = self.load_excel()[sheet_name[index]]
return data
def get_cell_value(self,row,cols):
'''
获取某一个单元格内容
'''
data = self.get_sheet_data().cell(row=row,column=cols).value
return data
def get_rows(self):
'''
获取行数
'''
row = self.get_sheet_data().max_row
return row
def get_rows_value(self,row):
'''
获取某一行的内容
'''
row_list = []
for i in self.get_sheet_data()[row]:
row_list.append(i.value)
return row_list
def excel_write_data(self,row,cols,value):
'''
写入数据
'''
wb = self.load_excel()
wr = wb.active
wr.cell(row,cols,value)
wb.save(base_path+"/Case/caichen.xlsx")
def get_columns_value(self,key=None):
'''
获取某一列得数据
'''
columns_list = []
if key==None:
key = 'A'
columns_list_data = self.get_sheet_data()[key]
for i in columns_list_data:
columns_list.append(i.value)
return columns_list
def get_rows_number(self,case_id):
'''
获取行号
'''
num = 1
cols_data = self.get_columns_value()
for col_data in cols_data:
if case_id == col_data:
return num
num = num+1
return num
def get_excel_data(self):
'''
获取excel里面所有的数据
'''
data_list = []
for i in range(self.get_rows()):
data_list.append(self.get_rows_value(i+2))
return data_list
excel_data = HandExcel()
if __name__ == "__main__":
handle = HandExcel()
##print(handle.get_rows_number('caichen_001'))
print(handle.get_excel_data())
复制代码
3.模型搭建
#coding=utf-8
import sys
import os
base_path = os.getcwd()
sys.path.append(base_path)
from collections.abc import Iterable
from Util.handle_excel import excel_data
import json
from Util.handle_header import get_header
from Util.handle_result import handle_result,handle_result_json,get_result_json
from Util.handle_cookie import write_cookie,get_cookie_value
from Util.codition_data import get_data
from Base.base_request import request
#['caichen_001', '登陆', 'yes', None, 'login', 'post', '{"username":"111111"}', 'yes', 'message', None]
class RunMain:
def run_case(self):
"""获取所有行数"""
rows = excel_data.get_rows()
for i in range(rows):
cookie=None
get_cookie = None
header = None
depend_data = None
data = excel_data.get_rows_value(i+2)
is_run = data[2]
if is_run == 'yes':
is_depend = data[3]
data1 = json.loads(data[7])
if is_depend:
'''
获取依赖数据
'''
depend_key = data[4]
depend_data = get_data(is_depend)
#print(depend_data)
data1[depend_key] = depend_data
method = data[6]
url = data[5]
is_header = data[9]
excepect_method = data[10]
excepect_result = data[11]
cookie_method = data[8]
if cookie_method == 'yes':
cookie = get_cookie_value('app')
if cookie_method == 'write':
'''
必须是获取到cookie
'''
get_cookie={"is_cookie":"app"}
if is_header == 'yes':
header = get_header()
res = request.run_main(method,url,data1,cookie,get_cookie,header)
#print(res)
code = str(res['errorCode'])
message = res['errorDesc']
if excepect_method == 'mec':
config_message = handle_result(url,code)
if message == config_message:
excel_data.excel_write_data(i+2,13,"通过")
else:
excel_data.excel_write_data(i+2,13,"失败")
excel_data.excel_write_data(i+2,14,json.dumps(res))
if excepect_method == 'errorcode':
if excepect_result == code:
excel_data.excel_write_data(i+2,14,"通过")
else:
excel_data.excel_write_data(i+2,13,"失败")
excel_data.excel_write_data(i+2,14,json.dumps(res))
if excepect_method == 'json':
if code == 1000:
status_str='sucess'
else:
status_str='error'
excepect_result = get_result_json(url,status_str)
result = handle_result_json(res,excepect_result)
if result:
excel_data.excel_write_data(i+2,13,"通过")
else:
excel_data.excel_write_data(i+2,13,"失败")
excel_data.excel_write_data(i+2,14,json.dumps(res))
if __name__ == "__main__":
run = RunMain()
run.run_case()
复制代码
4.获取配置信息
- 新建server.ini配置信息
[server]
host=http://www.caichen.com/
username=Wangcaichen
password=阿GG
is_run=3
复制代码
- 安装库 pip install configparser读取配置文件
#coding=utf-8
import sys
import os
import configparser
base_path = os.getcwd()
sys.path.append(base_path)
class HandleInit:
def load_ini(self):
file_path = base_path+"/Config/server.ini"
cf = configparser.ConfigParser()
cf.read(file_path,encoding="utf-8-sig")
return cf
def get_value(self,key,node=None):
'''
获取ini里面的value
'''
if node == None:
node = 'server'
cf = self.load_ini()
try:
data = cf.get(node,key)
except Exception:
print("没有获取到值")
data = None
return data
handle_ini = HandleInit()
if __name__ == "__main__":
hi = HandleInit()
print(hi.get_value("password"))
复制代码
5.项目通过配置文件获取host
# base_request.py
import sys
import os
import configparser
base_path = os.getcwd()
sys.path.append(base_path)
import requests
import json
from Util.handle_cookie import write_cookie
from Util.handle_json import get_value
from Util.handle_init import handle_ini
class BaseRequest:
def send_post(self,url,data,cookie=None,get_cookie=None,header=None):
'''
发送post请求
'''
response = requests.post(url=url,data=data,cookies=cookie,headers=header)
if get_cookie !=None:
'''
{"is_cookie":"app"}
'''
cookie_value_jar = response.cookies
cookie_value = requests.utils.dict_from_cookiejar(cookie_value_jar)
write_cookie(cookie_value,get_cookie['is_cookie'])
res = response.text
return res
def send_get(self,url,data,cookie=None,get_cookie=None,header=None):
'''
发视get请求
'''
response = requests.get(url=url,params=data,cookies=cookie,headers=header)
if get_cookie !=None:
cookie_value_jar = response.cookie
cookie_value = requests.utils.dict_from_cookiejar(cookie_value_jar)
write_cookie(cookie_value,get_cookie['is_cookie'])
res = response.text
return res
def run_main(self,method,url,data,cookie=None,get_cookie=None,header=None):
'''
执行方法,传递method、url、data参数
'''
#return get_value(url)
base_url = handle_ini.get_value('host')
if 'http' not in url:
url = base_url+url
if method == 'get':
res = self.send_get(url,data,cookie,get_cookie,header)
else:
res = self.send_post(url,data,cookie,get_cookie,header)
try:
res = json.loads(res)
except:
print("这个结果是一个text")
print("--->",res)
return res
request = BaseRequest()
if __name__ == "__main__":
request = BaseRequest()
request.run_main('get','http://www.baidu.com/login',"{'username':'11111'}")
复制代码
好了各位,以上就是这篇文章的全部内容了,能看到这里人啊,都是人才。
END绵薄之力
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!
加入我的软件测试交流群:110685036免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)
软件测试面试小程序
被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!
涵盖以下这些面试题板块:
1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux
6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础
获取方式 :