后台接口自动化(基于QT4S)

后台接口自动化(基于QT4S)

导语 根据测试金字塔理论,自动化收益由高到低依次是单元测试,API接口测试和UI测试。其中单元测试的主体一般是开发人员,API接口测试和UI测试的主体是测试人员。相比迭代变化快、编写成本高而且运行耗时长的UI测试,API接口测试的ROI要高得多,是最适合测试人员做自动化测试的地方。本文基于此点考虑,重心放在基于QT4S和业务相结合,探讨最有效用和最能解决业务痛点的一些心得和总结。

一、背景:

后台测试一般会分为接入层的测试和逻辑层的测试。自动化测试实施在接入层,还是逻辑层,或者都需要,是测试人员需要考虑的问题。后台架构比较简单,且很少依赖第三方的产品,做接入层的自动化测试比较常见;对于后台架构比较复杂,有较多第三方依赖的产品,做逻辑层的自动化要更容易一些。
先看一下腾讯课堂的业务逻辑,分为前端、cgi接口、逻辑svr三大部分。目前的考虑是做接入层的自动化,覆盖主流程上常用的模块。
在这里插入图片描述

二、技术方案

QT4S,即Quick Test for Server,是基于QTA框架的面向后台测试的自动化解决方案。基于QT4S架构实现的后台接口测试,该框架封装好了消息(Message)处理、通道(Channel)连接和常用的测试框架,我们只需要关注自己的业务逻辑代码上的实现和封装。

2.1项目目录:

ke------------------------------------------------产品模块
----- conf----------------------------------------配置相关(账号和环境)
-----kelib----------------------------------------自定义库(后台PB文件)
-----test_resources--------------------------接口定义
-----testcases---------------------------------测试用例
--------------------------cgitest----------------测试用例脚本编写(初始化、请求,检查返回)
--------------------------cgitestdata----------测试用例数据(请求和回包数据)
在这里插入图片描述

2.2接口定义

拿到一个接口的完整信息,包括接口name、请求的方式**(GET或POST)**和接口的请求参数。

from ke.test_resources.cgiresource import KeBaseCgi

class GetAgencyBargainListCgi(KeBaseCgi):

def __init__(self, tuin = None):
super(GetAgencyBargainListCgi, self).__init__(tuin)
self.name = "cgi-proxy/agency/get_agency_bargain_list"
        self.reqdata.method = "GET"
        self.reqdata.params = {}

def set_params(self, params):
	self.reqdata.params = params

如何获取到相应的接口信息呢?通过浏览器打开会请求该接口的页面,在network中可以查看到所有请求和响应包的格式和数据。
在这里插入图片描述

2.3测试用例实现

导入模块:接口定义库、接口请求和响应包的数据、测试用例基类和测试数据基类。
初始化:测试数据初始化准备req_data和resp_data、接口请求res = cgi.send()
断言:testcase.py中提供了很多实用的断言方法包括check_retcode、assert_equal和assert_等方法。

from ke.test_resources.cgi.bargain_info.GetAgencyBargainListCgi import GetAgencyBargainListCgi  # 导入cgi接口定义文件
from ke.testcases.cgitestdata.bargain_info.GetAgencyBargainListData import GetAgencyBargainListReqData, GetAgencyBargainListRespData      # 导入接口的抓包数据(请求和回包)
from ke.testcases.tscene import TBaseScene        # 测试用例基类
from newtown.servertest.tselector import TData    # 测试数据基类  

class GetAgencyBargainListTest(TBaseScene):
'''
    GetAgencyBargainListTest 获取机构砍价活动列表主用例
    '''
    owner = 'xxx'
    timeout = 5
    priority = TBaseScene.EnumPriority.High
    status = TBaseScene.EnumStatus.Design

def run_test(self):
        uin = "2692197731"                  # 不同环境uin不一样,测试专用机构账号
        agency_manager_info_resp_data = TData(GetAgencyBargainListRespData).get_test_param('MAIN') # 初始化响应
        agency_manager_info_req_data = TData(GetAgencyBargainListReqData).get_test_param('MAIN')   # 初始化请求
        cgi = GetAgencyBargainListCgi(uin)             # 接口初始化
        cgi.set_params(agency_manager_info_req_data)   
        res = cgi.send()                               # 请求接口
		self.check_retcode(cgi.name, res, 0)                   # 响应数据断言
		self.start_step("检查机构id是 %s" % agency_manager_info_resp_data['agency_id'])
		self.assert_equal('检查机构id', res['result']['items'][0]['agency_id'],agency_manager_info_resp_data['agency_id'])
		self.assert_equal('检查砍价活动id', res['result']['items'][0]['act_id'],agency_manager_info_resp_data['act_id'])

if __name__ == "__main__":
    	GetAgencyBargainListTest().debug_run()
2.4测试数据构造

测试数据包括请求数据ReqData和响应数据RespData
每个部分的数据又包括线上的online和测试环境的offline两套环境

#!/usr/bin/env python
#-*- coding: utf-8 -*-

#接口请求数据
GetAgencyBargainListReqData = {
"online": {
"a_id": 30099,
            "page": 0,
            "count": 10
    },
    "offline": {
"MAIN": {
"a_id": 30099,
            "page": 0,
            "count": 10
        },
    }
}

#接口响应数据
GetAgencyBargainListRespData = {
"online":{

    },
    "offline":{
"MAIN" :{
"act_id": 246,
            "agency_id": 30099,
            "course_id": 60047,
            "course_name": "测试课程包普通课程E",
            "industry_1st": 1002,
            "industry_2st": 2011,
            "industry_3st": 3060,
            "origin_price": 500,
            "term_id": 1000018223,
        },

    }
}

三、复杂场景测试

在腾讯课堂产品业务中,营销工具模块占了很大一部分,属于核心功能模块和用户反馈关注较多的模块。针对这一块的后台接口自动化就很有必要性。
举个例子,针对营销工具中的砍价活动这一部分。涉及到的接口较多,单条测试用例的执行只能做比较简单的收益不高的自动化。按照正常的逻辑来实现多条测试用例的联动,完成一个全流程的测试需要花费很多时间在等待数据状态变化上。所以,如何把这一部分的流程简单化,需要做到实时修改DB数据,实时联动多条用例达到一个可以覆盖真实场景的用例。另外,多条测试用例的联动对异常测试来说也是非常重要的。
未完待续!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值