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

news2024/12/23 5:36:46

一、前言

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

二、步骤演示

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的学习资料懂的都懂

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/46678.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

吉时利2604B系列数字源表,双通道,3A直流/10A脉冲

作为2600B系列源表SMU系列产品的一部分,2602B源表SMU是全新改良版双通道SMU,具有紧密集成的4象限设计,能同步源和测量电压/电流以提高研发到自动生产测试等应用的生产率。除保留了2602A的全部产品特点外,2602B还具有6位半分辨率、…

Android 面试题收集:Handler+Binder+Activity+时间分发机制+View绘制流程+……等

一、Handler相关知识 一个线程只有一个Looper,一个Messagequeue,可以创建多个handler。 1、Handler与Looper的关联是怎样的? 实例化 Handler 的时候 Handler 会去检查当前线程的 Looper 是否存在,如果不存在则会报异常,也就是…

关于TreeView的简单使用(Qt6.4.1)

前言 TreeView是在Qt6.3中加入的,弥补了Qt中无官方树图。笔者上手尝试了下,虽然有点麻烦,但官方也做了不少简化。 本次教程,笔者创建一个简单的示例,以帮助读者使用TreeView。 一、创建模型类 当前模型需要使用C定义…

人工智能概况笔记

文章目录一、人的智能与人工智能二、人工智能的发展历程三、人工智能的主要应用四、人工智能的伦理思考五、神经网络与深度学习六、国内外人工智能动向一、人的智能与人工智能 智能:基于推理的学习、理解和做出判断或意见的能力 人的智能(Human Intell…

【数据结构-树】哈夫曼树及其应用

文章目录1 哈夫曼树的构造2 哈夫曼树的应用——哈夫曼编码3 相关例子1 哈夫曼树的构造 将 n 个结点作为 n 棵仅含一个节点的二叉树,构成森林 F在 F 中选取两棵权值最小的二叉树,作为新结点的左右子树,并将新结点的权值置为左、右子树的根结点…

Nodejs -- 前后端身份认证概念及在Express中使用认证(Session,Cookie,JWT)

文章目录前后端的身份认证1 Web开发模式1.1 服务器端渲染的Web开发模式1.2 前后端分离的Web开发模式1.3 如何选择Web开发模式2 身份认证2.1 什么是身份认证2.2 为什么需要身份认证2.3 不同开发模式下的身份认证3 Session认证机制3.1 HTTP协议的无状态性3.2 如何突破HTTP无状态的…

【STL】set集合

构造函数 std::set<std::string> myset;这条指令将会创建一个空的set容器 该容器会默认采用std::less< T >的排序规则对成员进行排序。 这种排序方法适用于内置的数据类型&#xff0c;比如整型、浮点型、字符串等等。 std::set<std::string> myset{"j…

Linux 之 Ubuntu 上 Vim 的安装、配置、常用命令的简单整理

Linux 之 Ubuntu 上 vim 的安装、配置、常用命令的简单整理 目录 Linux 之 Ubuntu 上 vim 的安装、配置、常用命令的简单整理 一、简单介绍 二、Vim 的安装 三、vim 的 32 种工作模式 四、vim 的一些基础配置&#xff0c;及其说明 五、普通模式下的常用操作命令 六、插入…

域自适应——Bidirectional Learning for Domain Adaptation of Semantic Segmentation

论文题目&#xff1a;Bidirectional Learning for Domain Adaptation of Semantic Segmentation 本文的域位移是针对虚拟数据和真实数据之间的。 本文的贡献是&#xff1a; 提出了一种语义分割的双向学习系统 &#xff0c;其是一个学习分割适应模型和图像翻译模型的闭环学习系…

如何安装使用Jupyter Notebook?

大家好鸭&#xff01;我是小熊猫~ 今天来给大家介绍一下关于Jupyter Notebook的用法 关于它的组成部分就先不在这里详细解说啦~ 毕竟我可太懂你们啦~ 文章太长就会吃灰的~ 源码、资料电子书免费获取可点击这里 一、什么是Jupyter Notebook&#xff1f; 1. 简介 Jupyter Not…

vue3 弹窗开发之三,完善版

首先我们看一看整体的效果 点击图一的缩略图&#xff0c;查看大图&#xff08;如图二&#xff09;。同时弹窗内容底下有当前所有图片的缩略图展示&#xff0c;同时通过一个橙色的边框定位当前缩略图的位置。切换左右箭头滚动下一站或者上一张&#xff0c;同时底下缩略图同步有个…

mybatis的xml中<trim>标签的用法

文章目录1. 前言2. 先说结论3. 验证1. 情况一2. 情况二3. 情况三4. 情况四5. 验证prefixOverrides去掉的是trim内原sql内容1. 前言 在工作中离不开跟数据库打交道&#xff0c;目前流行的固然是mybatis&#xff0c;在xml中写sql的时候&#xff0c;可能会出现下面情况&#xff1a…

线性表的顺序实现【C语言版的真代码】

顺序表线性表顺序表顺序表的概念及其结构顺序表基本操作顺序表的初始化顺序表的插入顺序表的删除顺序表的查找线性表 线性表&#xff1a;一个线性表是含n个数据元素的有限序列。 它的逻辑结构要求是线性的&#xff0c;但其存储结构并没有做要求&#xff0c;即逻辑结构类似于如…

非DBA人员从零到一,MySQL InnoDB数据库调优之路(四)-数据备份与迁移

上一篇【非DBA人员从零到一&#xff0c;MySQL InnoDB数据库调优之路(三)-分区表与分库分表】 我认为分表在数据库的调优中是一种加法&#xff0c;通过拆分单表数据到多个表中&#xff0c;减少单表的压力&#xff0c;从而达到调优的效果&#xff0c;那么这一篇博文会通过对数据…

Spring Security权限管理原理

1.简介 授权是更具系统提前设置好的规则&#xff0c;给用户分配可以访问某一资源的权限&#xff0c;用户根据自己所具有的权限&#xff0c;去执行相应的操作&#xff0c;spring security提供的权限管理功能主要有两种&#xff1a; 基于过滤器的权限管理功能&#xff08;Filte…

Syntax Error: Error: Missing binary. See message above.

安装完nvm&#xff0c;选择后node版本&#xff0c;在idea中引入vue项目&#xff0c;npm install后&#xff0c;运行npm run serve后 控制台出现下面错误&#xff1a; Try running this to fix the issue: D:\Program Files\nodejs\node.exe E:\vue-project\node_modules\fibe…

篮球竞赛预约平台设计与实现的源码+文档

摘 要 随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;篮球竞赛预约平台也不例外&#xff0c;但目前国内仍都使用人工管理&#xff0c;市场规模越来越大&#xff0c;同时信息量也越来越庞大&#xff0c;人工管理显然已无法应对时代的变化&#x…

platform总线

1、什么是platform总线&#xff1f; platform是Linux内核抽象出来的软件代码&#xff0c;用于设备与驱动的连接&#xff0c;设备与驱动通过总线进行匹配&#xff1b;匹配成功后会执行驱动中的probe函数&#xff0c;在probe函数中可以获取到设备的信息&#xff1b; 设备与驱动…

gitlab的使用方法,详解gitlab操作

1.导读 本教程主要讲解了GitLab在项目的环境搭建和基本的使用&#xff0c;可以帮助大家在企业中能够自主搭建GitLab服务&#xff0c;并且可以GitLab中的组、权限、项目自主操作。 - GitLab简介 - GitLab环境搭建 - GitLab基本使用(组、权限、用户、项目) 2.GitLab简介 Gi…

debug - JLX12864C(ST7920-12864)液晶屏不能使用串行通讯的原因

文章目录debug - JLX12864C(ST7920-12864)液晶屏不能使用串行通讯的原因概述调试备注ENDdebug - JLX12864C(ST7920-12864)液晶屏不能使用串行通讯的原因 概述 正在给板子写出厂测试程序, 买的12864型号是JLX12864C. STC官方给的例程是并行通讯, 好使. 但是想在测试程序中改为…