分层封装的接口测试框架

目的:

       避免自动化工程的多耦合性和维护性差的问题:接口、参数、断言糅杂在case中,一个改变则整个工程都改变

实现:

     工程分为api层+配置层+util层+日志+报告+数据层

  1. Baseapi层是api的父类,其中在__init方法中初始化一个requestUtil对象

             (RequestUtil对象实现了从配置文件中读取对应域名,完成请求url的拼接,请求参数的替换)

class base_api:
    def __init__(self):
        self.req = requestUtil()
    def api(self,reqdata):
        #将参数转化为字典结构
        #将字典使用关键字传参**req传递给request方法
        '''关键字传参,参数有啥就传啥,不用指定'''
        result = requests.request(**reqdata)#关键字传参
        return result

  2.Api层:

    一个接口是一个方法 ,请求信息配置在yaml文件中(yaml文件封装了请求url、method、parm)

 

#1.从yaml读取到对应url的配置
#2.替换url的域名
#3.替换参数
queryparm:
  method: get
  url: /mtx/queryparam
  params:
    id: $id
    name: $name
getuser:
  method: get
  url: /getuser
  params:
    id: $id

 

 

 

 【说明】api层继承baseapi父类,api层的每一个方法就实现了一个接口调用,有3个步骤:

       1.从yaml读取到对应url的配置

       2.调用requestUtil的方法去替换url的域名和参数

       3.请求接口并返回    

from api.base_api import base_api
from util.yamlUtil import yamlUtil

class testApi(base_api):
    def queryparm(self, parms):
        # 将参数写在yaml文件中,作为数据驱动
        # 1.从yaml读取到对应url的配置
        # 2.调用requestUtil的方法去替换url的域名和参数
        # 3.请求接口并返回
        data = yamlUtil("../api/getquery.yaml").readyaml()
        interface = data["queryparm"]
        interface = self.req.makeInterface(interface,parms)
        result = self.api(interface)
        return result

 

         

 3.用例数据的传递

               用例数据使用yaml数据驱动完成,写在data这个package下

        4.用例层

               Base_testcase :将case中都需要用到的实例化的步骤写在basecase的__init方法中

             Testcase层:调用api层,完成业务调用,并进行断言,如果是数据驱动的用例,需要将断言也写到datayaml中

5.配置层

    util 这个package下目前仅将环境信息配置到yaml中

  • RequestUtil:使用对应环境的域名拼接url,并替换参数
  • StringUtil:实现字符串的处理,主要进行yaml中参数替换
  • YamlUtil:读取yaml

 

11月10日备注:

                    此文章仅为学习pytest接口自动化框架初步整理,后期还需要增加post等其他请求方法、日志、报告处理部分,增加多业务case执行,继续优化完善框架。

posted @ 2021-11-10 10:47  真果粒豆  阅读(103)  评论(0编辑  收藏  举报