• Pytest接口测试框架实战项目搭建(三)


    一、前言

      前面相当于已经讲完整体框架搭建了,本篇主要讲述在实际业务系统的接口请求中,如何运用好该接口自动化测试框架。

    二、步骤演示

    1、在conf/api_path.py新增需要测试的接口,标黄底色为新加

      存放测试接口仅这一个文件就行,有需要测试的接口直接往里面加就好了。

    # -*- coding:utf-8 -*-
    '''
    @Date:2022/10/3  20:56
    @Author:一加一
    '''
    
    from tools.operate_config import OperateConfig
    from urllib.parse import urljoin
    
    class ApiPath:
    
        '''管理api地址'''
    
        def __init__(self,env=None):
            if env is None:
                self.env = OperateConfig().get_node_value('ENV', 'env')
            else:
                self.env = env
            self.y_api_url = OperateConfig().get_node_value(self.env,'y_api_url') #读取配置文件config.ini 的业务系统接口域名
            self.s_api_url = OperateConfig().get_node_value(self.env, 's_api_url') #读取配置文件config.ini 的s系统接口域名
    
            # s系统 api
            self.s_login_url = urljoin(self.s_api_url, "/xxx/auth/login") #登录
            self.s_exchangeToken_url = urljoin(self.s_api_url, "/xxx/auth/exchangeToken") #生成sToken
            self.employee_paging_list = urljoin(self.s_api_url,"/xxx/employee/paging/list") #查询员工列表获取companyId
    
            #  C系统 api
            self.c_customer_info_page = urljoin(self.y_api_url, "/xxx/customer-info/page") #客户列表查询

    2、 在data文件夹下新增qa1_c.json文件,用于存放接口的请求body

      json文件按环境区分,比如qa1环境的业务系统C,就建一个qa1_c.json;qa1环境的业务系统B,就建一个qa1_b.json;若是qa2,则再新建一个qa2_b.json

      所以qa1环境的业务系统C,所有接口的请求body均放在该文件里就好了,写法规则为:"接口名称":{json数据},具体如下(为了便于理解,下面写了2个接口的请求body,标黄的是本次演示的客户列表查询接口的请求body)

    {
      "customer_info_page": {
        "pageNum": 1,
        "pageSize": 10,
        "cName": "上海有限公司",
        "cState": "",
        "sName": "",
        "proState": "",
        "buType": "",
        "rnCode": "",
        "unRisk": "0"
      },
    
    "customer_sure": {
        "ccId": "6968800792",
        "fileList": [
          {
            "url": "/a9b982e8067242899f8524e988918405.jpeg",
            "name": "baibu.jpeg"
          }
        ]
      }
    }

    3、在tools文件夹下新增get_cjson.py,用于读取业务系统C的接口请求body,即读取qa1_c.json里的数据

      一个系统只需要建一个读取json的公共方法就行了,比如要获取业务系统C的json数据,就建get_cjson.py,要获取业务系统B的json数据就建get_bjson.py

    知识点:B接口的id是依赖A接口返回的id,所以需要用到封装好的修改json方法,具体看set_c_customer_sure_id(self,ccId)函数的处理

    # -*- coding:utf-8 -*-
    
    from conf.setting import CASE_DATA_PATH
    from tools.operate_json import OperationJson
    from tools.operate_config import OperateConfig
    import os
    
    class GetcJson:
    
        def __init__(self,env):
            if env is None:
                env = OperateConfig().get_node_value('ENV', 'env')
            self.c_data_json = os.path.join(CASE_DATA_PATH, env + "_c.json")  # 按配置文件设置的环境读取,比如这里读取的文件就是qa1_c.json
      # 获取客户列表查询的json
        def get_c_customer_info_page(self):
            return OperationJson(self.c_data_json).key_get_data("customer_info_page")
       
         #客户确认接口:给变量字段set值
         def set_c_customer_sure_id(self,ccId):
            OperationJson(self.c_data_json).write_datas(ccId, "customer_sure", "ccId")

    4、在testcase文件夹下新增test_cc.py,用于编写业务测试用例

      注意类名要用Test开头,可直接执行该文件,或者用excute.py执行

    '''
    @Date:2022/11/13  18:36
    @Author:一加一
    '''
    
    import allure
    from tools.common import *
    from tools.get_cjson import *
    from conf.api_path import ApiPath
    from tools.get_headerjson import *
    
    @allure.feature("CC业务")
    @allure.story("客户管理")
    class TestCc:
        # 实例化对象
        apiPath = ApiPath() # 实例化对象,获取接口域名
        getHeaderjson = GetHeaderjson(None) # 实例化对象,获取请求头
        getCjson = GetcJson(None) # 实例化对象,获取业务系统C的json数据,即接口请求body
    
        @allure.title("case1:客户确认场景")
        def test_customer(self):
            with allure.step("step1:查询列表"):
                # 查询列表接口测试
                res_json = Common.r_post(url=TestCc.apiPath.c_customer_info_page,
                                         headers=TestCc.getHeaderjson.get_c_headers(),
                                         json=TestCc.getCjson.get_c_customer_info_page())
                # 断言返回结果
                Common.assert_tg_code_message(res_json)
                # 提取返回结果中的ccId字段
                ccId = res_json['data']['list'][0]['ccId']
                # 将获取的ccId set到json文件中
                TestCc.getCjson.set_c_customer_sure_id(ccId)
    
        @allure.title("case2:业务场景2")
        def test_12(self):
            with allure.step("step1:获取列表"):
                print("测试获取列表")
            with allure.step("step2:获取响应结果"):
                print("测试第二步")

     5、执行excute.py后效果如下

    1)allure测试报告

     2)控制台会将详细日志打印出来,因为excute.py的pytest.main是带日志输出,即-s

     3)封装的日志生成的log文件如下

     4)qa1_c.json文件

      因涉及到set接口字段变量,所以运行完后,qa1_c.json文件中的ccId正确展示插入值,后续接口要用到该请求体时,直接用就行,因为ccId已处理成了变量

      以上就是整个框架的搭建和使用啦,后面可能会结合streamlit做成前端页面,到时看自己学的怎么样先,后续再更新博客。

    重点:学习资料  

    600g的学习资料懂的都懂

  • 相关阅读:
    Postman接口测试实战,这5个问题你一定要知道
    上抖音热搜榜需要怎么做?
    计算机网络的OSI七层模型
    Python爬虫详解(一看就懂)
    (十七)VBA常用基础知识:读写text文件
    如何判断当前市场是否适合投资进而控制自己的仓位
    Redis和Mysql数据同步的两种方案
    九个前端神奇库,让你的前端项目瞬间美化,甲方看了都落泪
    WPF 依赖属性原理、 附加属性
    Sonarqube-8.9版本测试单元测试覆盖率
  • 原文地址:https://blog.csdn.net/m0_60054525/article/details/128106069