• 多测师肖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]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    (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')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    (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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    在这里插入图片描述
    这个封装完以后,就涉及到数据的入参(如,环境,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"))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    我们封装一个编写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,'通过')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    在封装一个登录的公共方法

    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()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    然后再开始在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()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    封装好了用例模板以后就可以安装格式进行读取
    在这里插入图片描述

    写好用例以后,我们要在run包,将内容运行生成报告,发送邮件邮件
    第一:将报告模板,邮件导入工具类中

  • 相关阅读:
    数据分析师如何用SQL解决业务问题?
    vw+rem自适应布局
    ClickHouse教程 — 第二章 ClickHouse快速入门
    EasyCVR视频监控+AI智能分析网关如何助力木材厂安全生产?
    vue diff 算法学习
    gabse8a 认证培训课后题(二)
    信奥中的数学:约数
    冯诺依曼体系结构
    从 Pulsar Client 的原理到它的监控面板
    记录一次Java笔试题
  • 原文地址:https://blog.csdn.net/m0_47403059/article/details/134268220