接口自动化框架

接口自动化框架-随便写的,不要喷哈

前几天开始自己学习整理一个接口自动化框架,就在网上查了下,然后根据自己的理解和经验写了一个简陋版,这里和大家分享下,如果有不合理的地方,那是肯定的,所以大家就看看鄙人的思路,不要太较真,有好的建议什么的麻烦提给我,一起进步。
因为本人目前就对python有一定的了解,java早都忘了,所以本次使用python+unittest+ddt+BeautifulReport来完成这个任务。
下面,我要开始表演了……

大纲

个人理解,一个接口自动化框架,应该包括以下内容:

  1. 用例管理-本次使用Excel表格进行管理;
  2. 脚本用例管理;
  3. 获取Excel表格用例,并发起请求;
  4. 获取请求结果,进行断言校验;
  5. 日志打印;
  6. 发送结果邮件;

在这里插入图片描述

用例管理

目前因为是自己写的简陋版,所以没有做的那么完美,只是对基本的信息进行处理,其实其他的同理添加即可,后续我把它补足。
先来看看我的excel中保存了那些内容:
在这里插入图片描述
用例编号、名称没有什么好解释的;
请求方法:本次只针对https/http协议的请求,填写对应的http请求方法,get、post、delete等等;
请求URL:……
请求参数:F12查看正常发送的参数,或者按照接口文档自己组织,不过有个问题,可能在请求参数中是嵌套字典或列表,需要做下特殊处理,我这里把列表内容先当作字符串处理
{‘puid’: 34, ‘requestType’: ‘coverSweepReceiverApp’, ‘sendtype’: ‘C2B码申请’, ‘sendData’:’[{“fid”:523,“keyword”:“issCode”,“value”:“90880019”},{“fid”:525,“keyword”:“backUrl”,“value”:“http://101.231.204.84:8091/sim/notify_url2.jsp”},{“fid”:526,“keyword”:“qrType”,“value”:""},{“fid”:527,“keyword”:“reqAddnData”,“value”:""},{“fid”:646,“keyword”:“emvCodeIn”,“value”:""},{“fid”:528,“keyword”:“accNo”,“value”:“6216261000000002485”},{“fid”:529,“keyword”:“name”,“value”:“宋小”}]’}
注意:斜体部分,在正常的请求中属于列表,但是如果原样填写到excel中,发送get请求时组织的url不对,可能是我学艺不精,哪位大哥知道有更好的处理方法,麻烦告知一下。
后置处理器:后置处理器,就是在请求完成后,获取请求响应中的部分字段,供后续用例使用或其他后续操作,这里按照固定格式上送。

 ${qrNo}=[qrNo],或${qrNo}=[qrNo][0][data]

结果断言:就是将需要检查的字段组织填写。
还有前置处理器、数据库查询没有处理,后面再搞。

脚本用例管理

这里使用unittest+ddt处理,分下面几步:

  1. 读取excel表中关联的用例和相关字段(后续步骤介绍)
  2. 获取全局变量参数,对请求参数中的参数进行替换
  3. 发起http请求(后续步骤介绍)
  4. 后置处理器处理,将后置处理器字段的内容保存到全局变量参数中
  5. 断言结果校验

参数变量替换:
在本文中,全局参数变量保存如下格式:'${qrNo}': '6221364343281898240'
python中全局变量跨文件使用还是有些特别,我首先使用一个文件保存全局变量:

# GlobalVars.py
def _init():
    global _correlationDict
    _correlationDict = {}

def set_value(key, value):
    _correlationDict[key] = value

def get_value(key):
    try:
        return _correlationDict[key]
    except KeyError:
        return None

def get_values():
    '''
    :return: 返回整个字典值
    '''
    return _correlationDict

后续使用之前,首先要调用_init()进行初始化。

获取到全局变量后,进行参数替换:

        correlationDict = gv.get_values()
        for key in correlationDict:
            if key in params:
                params = params.replace(key, correlationDict[key])

后置处理器处理,将后置处理器中的参数保存到全局变量中,放到unittest的tearDown()中进行处理。

 ${qrNo}=[qrNo],或${qrNo}=[qrNo][0][data]

后置处理文件有如上两种格式,什么意思呢,因为响应的内容可能是简单的dict格式,但也有嵌套的形式,所以单独进行处理了。

    def tearDown(self):
        if self.tear_down is None:
            return
        tear_down_list = self.tear_down.split(';')
        for tdl in tear_down_list:
            param = tdl.split('=')
            values = self.result
            if param[1].count(']') == 1:
                gv.set_value(param[0], values[param[1][1:-1]])
            else:
                for key in param[1][1:-1].split(']['):
                    try:
                        tmp = values[int(key)]
                    except:
                        try:
                            tmp = values[key]
                        except:
                            break
                    values = tmp
                gv.set_value(param[0], values)

用例管理的主要内容就讲解完了,下一篇文章我再分析下后续的内容,发送请求、断言校验、Log模块、发送邮件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值