学习了这么久的python,我们已经可以自己搭建一个简单的测试和框架了,先从简单的开始,有时我们编写接口的测试用例会用excel进行编写,以下面的接口测试用例模板为例,进行编写;
我们先来理一下思路:
1、我们需要获取文件,也就要知道文件的路径;
2、读取文件,取出要请求的URL,请求参数数据
3、用get或post方法调用接口
4、返回的数据与预期结果进行比较,判断用例结果
5、将请求报文、返回报文、测试结果、测试人员回写到excel中
6、生成测试报告
7、发送邮件
由此,我们来定义出框架的基本目录:
conf 文件夹用来存放配置文件;
common用来存放工具和方法
cases 用来存放测试用例
bin目录用来存放执行文件
log目录存放日志文件
report目录存放测试报告
我们先在配置文件中定义一些通用的信息,定义一个setting.py
import os
#当前文件的父目录
BASE_PATH=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
#测试用例的路径
CASE_PATH=os.path.join(BASE_PATH,'cases')
#生成测试报告的路径
REPORT_PATH=os.path.join(BASE_PATH,'report')
#生成日志的路径
LOG_PATH=os.path.join(BASE_PATH,'log','ATP.log')
#邮件的配置信息
USER_EMAIL='邮箱地址'
EMAIL_HOST='smtp.qq.com'#邮箱服务器
EMAIL_PASSWD='授权码'#QQ邮箱是授权码
RECV_EMAIL='接收邮件的地址'
#测试人员信息
TESTER='PYF'
common文件夹下写公用的方法信息等;
读取case信息,需要用到xlrd模块,调用接口需要用到requests模块,根据测试用例的格式,分理处data数据,将结果反写到excel中需要用到xlwt模块;
在编写的过程中可以一个方法一个方法的写,写完后自己测试一下是否能正常实现;
import xlrd
import xlwt
import os
import requests
from common.Mylog import log
from xlutils.copy import copy
class Mycase(object):
#获取测试用例文件中的测试用例
def getcase(self,case_path):
if os.path.isdir(case_path):
all_cases = []
for f in os.listdir(case_path):
book=xlrd.open_workbook(os.path.join(case_path,f))
sheet=book.sheet_by_index(0)
rows=sheet.nrows
for row in range(1,rows):
all_cases.append(sheet.row_values(row)[:8])
print(all_cases)
return all_cases
else:
raise Exception('测试用例不存在')
@classmethod
#get方法请求
def get(self,url,data=None):
datas=self.strToDict(data)
try:
res=requests.get(url,data=datas).json()
except Exception as e:
log.error('调用接口出错url:%s,请求报文:%s'%(url,datas))
return res,datas
@classmethod
#post方法请求
def post(self,url,data,reffer=None):
datas=self.strToDict(data)
try:
res=requests.post(url,data=datas).json()
except Exception as e:
log.error('调用接口出错url:%s,请求报文:%s'%(url,datas))
return res,datas
#将字符串转化成字典类型
@classmethod
def strToDict(self,data):
data_dict={}
for i in data.split('&'):
key=i.split('=')[0]
value=i.split('=')[1]
data_dict[key]=value
return data_dict
def checkRes(res,check_res):
res=res.replace("':'",'=').replace("':",'=')
for i in check_res.split(','):
if i not in res:
test_status='失败'
else:
test_status='通过'
return test_status
#all_res=[data,res,test_status,tester]
#将结果写入excel中
def write_excel(case_path,all_res):
book=xlrd.open_workbook(case_path)
book2=copy(book)
sheet=book2.get_sheet(0)
row=1
for res in all_res:
sheet.write(row,8,res[0])
sheet.write(row,9,res[1])
sheet.write(row,10,res[2])
sheet.write(row,11,res[3])
row+=1
book2.save(case_path)
在run.py文件中编写执行测试用例的代码,整合各个方法:
import os,sys
import time
from conf.setting import TESTER
#添加环境变量
BASE_PATH=os.path.dirname(
os.path.dirname(
os.path.abspath(__file__)
)
)
sys.path.insert(0,BASE_PATH)
from common.GetCase import Mycase
from conf.setting import CASE_PATH
import common.GetCase
class RunCase(object):
#找到测试用例
def find_case(self):
mycase=Mycase()
self.all_cases,self.case_file = mycase.getcase(CASE_PATH)
self.run_case(self.all_cases)
#运行测试用例
def run_case(self,all_cases):
excel_res=[]
for case in all_cases:
self.object=case[0]
self.mode=case[1]
self.case_id=case[2]
self.description=case[3]
self.url=case[4]
self.case_method=case[5]
self.data=case[6]
self.check_res=case[7]
if self.case_method.upper=='GET':
res,data=Mycase.get(url=self.url,data=self.data)
else:
res,data=Mycase.post(url=self.url,data=self.data)
test_status=common.GetCase.checkRes(res,check_res=self.check_res)
#根据写入excel的list格式,传入需要的参数
excel_res.append([data, res,test_status,TESTER])
print(excel_res)
common.GetCase.write_excel(self.case_file,excel_res)
运行查看结果:
mycase=RunCase()
mycase.find_case()
可以看到excel中已经写入了相应的信息,接下来就是完善测试报告,发送邮件信息