多测师肖sir___接口自动化测试框架(python+request+unittest+ddt)

接口自动化测试框架
一、接口自动化测试框架(python+request+unittest+ddt)
首先我们新建一个新项目:名称zdh
二、在一个项目中:新建6个包
第一个包conf包用来填写配置参数、地址等
第二个包data 包用来存放测试用例的表格
第三个包report 包用来存放测试报告
第四个包case 用例包 用来编写测试用例
第五个包run包 运行包 用来运行所有的用例或邮件等
第六个包utils 包 工具类包 存放所有自己封装的语句和外包导入的工具函数

在这里插入图片描述
三、我们开始来编写框架,今天这个接口自动化框架只要是为了实现一个接口有多条用例的情况;
详解:
(1)cmf_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.session=requests.Session() # 创建session对象保持会话
    def  send(self,method,url,data= None,json=None,
              params=None,headers= None):
        method=method.lower() #接口请求方法中都转换成小写格式
        if   method=='get': #对mehod做判断
             response=self.session.get(url,params)
        elif method=='post': # 还有很多异常分支
            response=self.session.post(url,data,headers)
        elif method=='post_json':
            response=self.session.post(url,json,headers)
        elif  method=='delete':
            response=self.session.delete(url,data)
        elif  method=="put":
            response=self.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.filename=filename   #把传进来实行参数赋值给到实例变量
        self.read(self.filename) #我要读ini文件进行读取
    def  get_value(self,section,option): #获取ini文件的数据
         value=self.get(section,option) #
         return value
path=os.path.join(conf_path,"cms_conf.ini")
c=R_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.filename=filename
        self.sheet_name=sheet_name
    def open(self): #打开excel 表格取对应的sheet页面
        #load_workbook是打开表格,加载打开页面
        self.wb=openpyxl.load_workbook(self.filename)
        #self.wb这个对象读取对应sheet页面
        self.sh=self.wb[self.sheet_name]  #根据页面名来读取
    def read_data(self):  #定义一个读取数据
        self.open() #先调用open打开表格
        datas=list(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)
            case=dict(zip(title,values)) #把
            # print(case)
            cases.append(case) #把所有数据添加到列表
        return cases  #把所有的用例作为返回参数
    def write_excel(self,row,colum,value=None):
        self.open()
        self.sh.cell(row,colum,value)
        self.wb.save(self.filename)
if __name__ == '__main__':
   path=os.path.join(data_path,"apicase.xlsx"
   c=R_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):
        request=Send_requests()
        url=c.get_value('env','url')+'/cms/manage/loginJump.do'
        data={'userAccount': 'admin', 'loginPwd': '123456'}
        headers={"Content-Type":"application/x-www-form-urlencoded"}
        response=request.send(method='post',url=url,data=data,headers=headers)
        print(response.json())
        return request
if __name__ == '__main__':
    DX=Cms_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 c

case_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_id+1  #记录当前跑了几条用例

        # 2.发送接口请求
        response = self.request.send(method=method,url=url,data=data,headers=headers)
        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包,将内容运行生成报告,发送邮件邮件
第一:将报告模板,邮件导入工具类中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

多测师软件测试培训师肖sir

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值