石家庄个人做网站,东营市住宅与房地产信息网,网站建设经验交流材料,做电信网站运营商接口自动化测试框架 一、接口自动化测试框架#xff08;pythonrequestunittestddt#xff09; 首先我们新建一个新项目:名称zdh 二、在一个项目中#xff1a;新建6个包 第一个包conf包用来填写配置参数、地址等 第二个包data 包用来存放测试用例的表格 第三个包report 包用来…接口自动化测试框架 一、接口自动化测试框架pythonrequestunittestddt 首先我们新建一个新项目:名称zdh 二、在一个项目中新建6个包 第一个包conf包用来填写配置参数、地址等 第二个包data 包用来存放测试用例的表格 第三个包report 包用来存放测试报告 第四个包case 用例包 用来编写测试用例 第五个包run包 运行包 用来运行所有的用例或邮件等 第六个包utils 包 工具类包 存放所有自己封装的语句和外包导入的工具函数 三、我们开始来编写框架今天这个接口自动化框架只要是为了实现一个接口有多条用例的情况 详解 1cmf_ini 新建一个ini文件 ini 文件中格式 ini文件中的数据是动态变化 节点 键值
[env] #section #option
url http://cms.duoceshi.cn
headers {Content-Type:application/x-www-form-urlencoded}
[test_data]
username admin
pwd 123456
[db]
[email]2我们要把整个项目项目中的路径设计好。如下
# 定义项目的路径
# 获取当前运行脚本的绝对路径
import os
base_path os.path.dirname(os.path.dirname(__file__))
# print(base_path)
# 定义conf的路径
conf_path os.path.join(base_path,conf)
# 定义data的路径
data_path os.path.join(base_path,data)
# 定义report路径
report_path os.path.join(base_path,report)
#定义testcase路径
testcase_path os.path.join(base_path,testcase)3然后可以把我们接口用例写好用xlsx的表格 4创建一个接口调用的方法api 报名
#这个模块是用来封装发送接口请求的工具类我们首先先顶定义一个类Send_requests那么要根据类创建对象
保存会话我们请求的参数在Session() 点击下ctrl我们请求的method是哪一种我们去判断
import requests
class Send_requests(object): def __init__(self):self.sessionrequests.Session() # 创建session对象保持会话def send(self,method,url,data None,jsonNone,paramsNone,headers None):methodmethod.lower() #接口请求方法中都转换成小写格式if methodget: #对mehod做判断responseself.session.get(url,params)elif methodpost: # 还有很多异常分支responseself.session.post(url,data,headers)elif methodpost_json:responseself.session.post(url,json,headers)elif methoddelete:responseself.session.delete(url,data)elif methodput:responseself.session.put(url,data)return response这个封装完以后就涉及到数据的入参如环境url等我们可以去读取ini文件中的配置参数 首先要下载ConfigParser 模块
from configparser import ConfigParser #导入ConfigParser文件
from conf.cms_path import *
import os
class R_conf(ConfigParser): #可以使用继承可以不使用继承我们现在继承了ConfigParser类我们要调用def __init__(self,filename): #构造函数super(R_conf,self).__init__() #继承父类的构造方法self.filenamefilename #把传进来实行参数赋值给到实例变量self.read(self.filename) #我要读ini文件进行读取def get_value(self,section,option): #获取ini文件的数据valueself.get(section,option) #return value
pathos.path.join(conf_path,cms_conf.ini)
cR_conf(path)
print(c.get_value(env,url))
# print(c.get_value(test_data,username))我们封装一个编写read_excel.py 的py文件在utils下 我们要下载一个openpyxl 我们要实现读excel模块
#封装一个读取表格的工具类import openpyxl
from conf.cms_path import *class R_excel(object): #我们封装一个读取excel表格的数据def __init__(self,filename,sheet_name): self.filenamefilenameself.sheet_namesheet_namedef open(self): #打开excel 表格取对应的sheet页面#load_workbook是打开表格,加载打开页面self.wbopenpyxl.load_workbook(self.filename)#self.wb这个对象读取对应sheet页面self.shself.wb[self.sheet_name] #根据页面名来读取def read_data(self): #定义一个读取数据self.open() #先调用open打开表格dataslist(self.sh.rows) #把每一行的元数据放在list列表# print(datas)# for i in datas[0]:# print(i.value)title[i.value for i in datas[0]]cases[]for j in datas[1:]:values[k.value for k in j]# print(values)casedict(zip(title,values)) #把# print(case)cases.append(case) #把所有数据添加到列表return cases #把所有的用例作为返回参数def write_excel(self,row,colum,valueNone):self.open()self.sh.cell(row,colum,value)self.wb.save(self.filename)
if __name__ __main__:pathos.path.join(data_path,apicase.xlsxcR_excel(path,login)# c.read_data()c.write_excel(2,8,通过)
在封装一个登录的公共方法
from utils.read_conf import *
from utils.api import Send_requests
class Cms_login():def login(self):requestSend_requests()urlc.get_value(env,url)/cms/manage/loginJump.dodata{userAccount: admin, loginPwd: 123456}headers{Content-Type:application/x-www-form-urlencoded}responserequest.send(methodpost,urlurl,datadata,headersheaders)print(response.json())return request
if __name__ __main__:DXCms_login()DX.login()
然后再开始在testcase模块中编写用例 定义test_login
import unittest
from ddt import ddt,data,unpack,file_data
from utils.read_excel import *
from conf.cms_path import *
from utils.api import Send_requests
from utils.read_conf import ccase_file os.path.join(data_path,apicase.xlsx)ddt
class Test_Login(unittest.TestCase):excel R_excel(case_file,login)cases excel.read_data() #一个列表当中是5个字典每个字典都是一个用例# print(cases)request Send_requests() #创建了一个发送接口请求的对象data(*cases)def test_01_login(self,case):封装登录接口 #数据要从Excel表格里面拿# 1.准备接口的入参url c.get_value(env,url)case[url]print(url)# eval() 函数是用来执行一个字符串表达式并返回表达式的值headers eval(c.get_value(env,headers))method case[method]data eval(case[data])excepted eval(case[excepted])case_id case[case_id]case_id case_id1 #记录当前跑了几条用例# 2.发送接口请求response self.request.send(methodmethod,urlurl,datadata,headersheaders)result response.json()# print(result)# 3.对接口的响应内容进行断言try: #try尝试去执行代码self.assertEqual(excepted[msg],result[msg]) #断言期望结果和实际结果是否一直self.assertEqual(excepted[code],result[code])except Exception as e: #捕捉异常self.excel.write_excel(case_id,8,未通过)print(e)else:self.excel.write_excel(case_id,8,通过)if __name__ __main__:unittest.main()
封装好了用例模板以后就可以安装格式进行读取
写好用例以后我们要在run包将内容运行生成报告发送邮件邮件 第一将报告模板邮件导入工具类中