【接口自动化测试】第三节.实现项目核心业务接口自动化

news2024/9/20 5:57:37

文章目录

  • 前言
  • 一、实现登录接口对象封装和调用
  •       1.0 登录接口的接口测试文档
  •       1.1 接口对象层(封装)
  •       1.2 测试脚本层(调用)
  • 二、课程新增接口对象封装和调用
  •       2.0 课程新增接口的接口测试文档
  •       2.1 接口对象层(封装)
  •       2.2 测试脚本层(调用)
  • 三、合同上传接口对象封装和调用
  •       3.0 合同上传的接口测试文档
  •       3.1 接口对象层(封装)
  •       3.2 测试脚本层(调用)
  • 四、合同新增接口对象封装和调用
  •       2.0 合同新增接口的接口测试文档
  •       2.1 接口对象层(封装)
  •       2.2 测试脚本层(调用)
  • 总结


前言


一、实现登录接口对象封装和调用

1.0 登录接口的接口测试文档

接口信息:
1.验证码:
(1)地址:http://kdtx-test.itheima.net/api/captchaImage
(2)方法:get

2.登录:
(1)地址:http://kdtx-test.itheima.net/api/login
(2)方法:Post
(3)请求数据:
(4)请求头:Content-Type: application/json
(5)请求体:{"username": "admin", "password": " admin123","code":"2", "uuid":"验证码接口返回数据"}

1.1 接口对象层(封装)

封装的重要概念:
接口封装时,重点是依据接口文档封装接口信息,需要使用的测试数据是从测试用例传递的、接口方法被调用时需要返回对应的响应结果。

封装是通过根据接口API文档封装,所以定义在API的目录下。


实现的基本步骤:
(1)导包操作:

# 导包
import requests

(2)创建接口的类:

# 创建接口类
class LoginAPI:

(3)创建初始化方法:

初始化方法中需要指定接口的基本信息url。

# 初始化
    def __init__(self):
        # 指定url基本信息
        self.url_verify = "http://kdtx-test.itheima.net/api/captchaImage"
        self.url_login = "http://kdtx-test.itheima.net/api/login"

(4)创建验证码、登录方法:

接口方法被调用时候,需要返回对应的响应结果信息。只有返回之后,才能在测试用例中使用倒响应结果的值。

    # 验证码接口方法
    def get_verify_code(self):
        return requests.get(url=self.url_verify)

    # 登录接口方法
    def login(self, test_data):
        return requests.post(url=self.url_login, json=test_data)

备注:

(1)登录接口方法中的test_data。

因为要从外部传入测试数据,所以在方法定义时候创建一个参数来接收传递的数据。

(2)json = test_data

此处数据是请求体json中的数据。

因为json数据的请求体在request格式中是通过json参数进行处理。即:json = test_data.


实现图示说明:


1.2 测试脚本层(调用)

测试脚本层说明:

  • 重点关注测试数据准备和断言
  • 重点关注业务流程的处理
  • 直接调用接口对象层发送请求

实现的基本步骤:

(1)导包:
导入调用接口对象层中定义的登录接口api.login

# 导包
from api.login import LoginAPI
import pytest

(2)创建测试类:
测试类一般以Test开头进行命名。

# 创建测试类
class TestLoginAPI:

(3)设置前置处理和后置处理

前置处理中先实例化一个登录接口的对象

 # 前置处理
    def setup(self):
        # 实例化接口对象
        self.login_api = LoginAPI()
 # 后置处理
    def teardown(self):
        pass

(4)创建登录成功方法,并实现获取验证码和登录操作

# 1、登录成功
    def test01_login_success(self):
        # 获取验证码
        res_v = self.login_api.get_verify_code()
        print(res_v.status_code)
        print(res_v.json())
        # 打印uuid数据
        print(res_v.json().get("uuid"))

        # 登录
        login_data = {
            "username": "admin",
            "password": "HM_2023_test",
            "code": "2",
            "uuid": res_v.json().get("uuid")# 此处调用验证码中的uuid数据
        }
        res_l = self.login_api.login(test_data=login_data)
        print(res_l.status_code)
        print(res_l.json())

实例图示说明:


输出结果:


二、课程新增接口对象封装和调用

2.0 课程新增接口的接口测试文档

接口信息:
(1)URL:http://kdtx-test.itheima.net/api/clues/course
(2)方法:Post
(3)请求数据:
(4)请求头:{ "Content-Type ": "application/json ", "Authorization": "xxx " }
(5)请求体:{ "name": "测试开发提升课01", "subject": "6","price": 899,"applicablePerson": "2", "info": "测试开发提升课01"}

2.1 接口对象层(封装)

封装的重要概念:
接口封装时,重点是依据接口文档封装接口信息,需要使用的测试数据是从测试用例传递的、接口方法被调用时需要返回对应的响应结果。

封装是通过根据接口API文档封装,所以定义在API的目录下。


实现的基本步骤:
(1)导包操作:

# 导包
import requests

(2)创建接口的类:

# 创建接口类
class CourseAPI:

(3)创建初始化方法:

初始化方法中需要指定接口的基本信息url。

# 初始化
    def __init__(self):
        # 指定url基本信息
        self.url_add_course = "http://kdtx-test.itheima.net/api/clues/course"

(4)创建课程添加方法:

接口方法被调用时候,需要返回对应的响应结果信息。只有返回之后,才能在测试用例中使用倒响应结果的值。

此处方法中定义了test_data, token都是需要从外部接收的数据,所以最终的返回里面也要有响应结果的值。如test_data是json格式的,token是headers格式中的数据。

 def add_course(self, test_data, token):
        return requests.post(url=self.url_add_course, json=test_data, headers={"Authorization": token})

2.2 测试脚本层(调用)

实现的基本步骤:

(1)导包:
导入调用接口对象层中定义的登录接口api.login

# 导包
import pytest
from api.course import CourseAPI

(2)创建测试类:
测试类一般以Test开头进行命名。

# 创建测试类
class TestContractBusiness:
    # 初始化
    token = None

(3)设置前置处理和后置处理

前置处理中先实例化一个登录接口的对象

 # 前置处理
    def setup(self):
        # 实例化接口对象 
        self.course_api = CourseAPI()


    # 后置处理
    def teardown(self):
        pass

(4)创建课程新增方法,并实现课程新增操作

# 2、课程新增成功
    def test02_add_course(self):
        add_data = {"name": "测试开发提升课01", "subject": "6", "price": 899, "applicablePerson": "2",
                    "info": "测试开发提升课01"}
        response = self.course_api.add_course(test_data=add_data, token=TestContractBusiness.token)
        # 提取登录成功之后的token数据并保存在类的属性中
        TestContractBusiness.token = res_l.json().get("token")

三、合同上传接口对象封装和调用

3.0 合同上传的接口测试文档

接口信息:
(1)URL: http://kdtx-test.itheima.net/api/common/upload
(2)方法:Post
(3)请求数据:
(4)请求头:{ "Content-Type ": " multipart/form-data ", "Authorization": "xxx " }
(5)请求体:{" file " : 合同文件"}
思考:
① 如何提交multipart/form-data数据?
通过使用:
requests.请求方法(url, data=None, json =None, headers=None, files =None)
步骤① 读取文件数据
f = open(" test.pdf ", " rb ")
步骤② 设置请求数据
response = requests.post(url=xxx, files= {" file " : f"})

3.1 接口对象层(封装)

实现的基本步骤:
(1)导包操作:

# 导包
import requests

(2)创建接口的类:

# 创建接口类
class ContractAPI:

(3)创建初始化方法:

初始化方法中需要指定接口的基本信息url。

 # 初始化
    def __init__(self):
        self.url_upload = "http://kdtx-test.itheima.net/api/common/upload"

(4)创建课程添加方法:

接口方法被调用时候,需要返回对应的响应结果信息。只有返回之后,才能在测试用例中使用倒响应结果的值。

 # 合同上传接口
    def upload_contract(self, test_data, token):
        return requests.post(url=self.url_upload, files={"file": test_data}, headers={"Authorization":  token})

3.2 测试脚本层(调用)

实现的基本步骤:

(1)导包:
导入调用接口对象层中定义的登录接口api.login

# 导包
import pytest
from api.contract import ContractAPI

(2)创建测试类:
测试类一般以Test开头进行命名。

# 创建测试类
class TestContractBusiness:
    # 初始化
    token = None

(3)设置前置处理和后置处理

前置处理需要先处理验证码获取和登录接口操作,依次为前提才能进行文件上传。

 # 前置处理
    def setup(self):
        # 实例化接口对象
        self.login_api = LoginAPI()
        self.course_api = CourseAPI()
        self.contract_api = ContractAPI()

    # 1、登录成功
    def test01_login_success(self):
        # 获取验证码
        res_v = self.login_api.get_verify_code()
        print(res_v.status_code)
        print(res_v.json())
        # 打印uuid数据
        print(res_v.json().get("uuid"))

        # 登录
        login_data = {
            "username": "admin",
            "password": "HM_2023_test",
            "code": "2",
            "uuid": res_v.json().get("uuid")
        }
        res_l = self.login_api.login(test_data=login_data)
        print(res_l.status_code)
        print(res_l.json())
        # 提取登录成功之后的token数据并保存在类的属性中
        TestContractBusiness.token = res_l.json().get("token")
        print(TestContractBusiness.token)


    # 后置处理
    def teardown(self):
        pass

(4)创建合同上传方法,并实现合同上传操作

 # 3、上传合同成功
    def test03_upload_contract(self):
        # 读取pdf文件数据
        f = open("../data/test.pdf", "rb")
        response = self.contract_api.upload_contract(test_data=f, token=TestContractBusiness.token)
        print(response.json())

 四、合同新增接口对象封装和调用

2.0 合同新增接口的接口测试文档

接口信息:
新增合同:
(1)url地址:http://kdtx-test.itheima.net/api/contract
(2)方法:Post
(3)请求数据:
(4)请求头:{ "Content-Type ": "application/json ", "Authorization": "xxx " }
(5)请求体:{ "name": "测试888", "phone": "13612345678", "contractNo": "HT10012003",
"subject": "6", "courseId": " 99", "channel": "0", "activityId": 77, "fileName": "xxx"}

2.1 接口对象层(封装)

封装的重要概念:
接口封装时,重点是依据接口文档封装接口信息,需要使用的测试数据是从测试用例传递的、接口方法被调用时需要返回对应的响应结果。

封装是通过根据接口API文档封装,所以定义在API的目录下。


实现的基本步骤:
(1)导包操作:

# 导包
import requests

(2)创建接口的类:

# 创建接口类
class ContractAPI:

(3)创建初始化方法:

初始化方法中需要指定接口的基本信息url。

 # 初始化
    def __init__(self):
        self.add_contrat = "http://kdtx-test.itheima.net/api/contract"

(4)创建合同添加方法:

接口方法被调用时候,需要返回对应的响应结果信息。只有返回之后,才能在测试用例中使用倒响应结果的值。

此处方法中定义了test_data, token都是需要从外部接收的数据,所以最终的返回里面也要有响应结果的值。如test_data是json格式的,token是headers格式中的数据。

# 新增合同接口
    def add_contract(self,test_data,token):
        return requests.post(url=self.add_contrat,json=test_data,headers={"Authorization":  token})

2.2 测试脚本层(调用)

实现的基本步骤:

(1)导包:
导入调用接口对象层中定义的登录接口api.login

# 导包
import pytest
from api.contract import ContractAPI

(2)创建测试类:
测试类一般以Test开头进行命名。

# 创建测试类
class TestContractBusiness:
    # 初始化
    token = None

(3)设置前置处理和后置处理

前置处理中先实例化一个登录接口的对象

 # 前置处理
    def setup(self):
        # 实例化接口对象 
        self.contract_api = ContractAPI()


    # 后置处理
    def teardown(self):
        pass

(4)创建课程新增方法,并实现课程新增操作

 # 4、新增合同成功
    def test04_add_contract(self):
        add_contract = {"name": "测试888",
                        "phone": "13612341888",
                        "contractNo": "HT20026194",
                        "subject": "6",
                        "courseId": 99,
                        "channel": "0",
                        "activityId": 77,
                        "fileName": "/profile/upload/2023/01/05/86e5a3b8-b08c-470c-a17d-71375c3a8b9f.pdf"
        }
        response = self.contract_api.add_contract(test_data=add_contract, token=TestContractBusiness.token)
        print(response.json())
        # 提取登录成功之后的token数据并保存在类的属性中
        TestContractBusiness.token = res_l.json().get("token")

总结

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

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

相关文章

软考高项备考经验分享

高项备考经验分享 在备考被论文卡两次后,这次终于通过了高项,分不是很高,比较幸运,对这次考试做个总结与分享,希望对同学们有所帮助。 1、备考时间 首先备考时间上不建议拉的太长,每天坚持看书3~6个月时…

Ubuntu22.04 源码安装 PCL13+VTK-9.3+Qt6,踩坑记录

Ubuntu 22.04LTS;cmake-3.25.0;VTK-9.3;PCL-1.13;Qt6.6 PCL可以通过 apt 命令直接安装(sudo apt install libpcl-dev),apt 命令安装的 VTK 是简略版,没有对 Qt 支持的包,所以笔者使用源码安装 PCL 和 VTK。 1. 安装 VTK 1) 安装 ccmake 和 VTK 依赖项: sudo apt-g…

食品行业怎么用JSON群发短信

食品作为日常生活不可缺少的元素,市场需求是很稳定的,但是份额就那么多,商家都要来抢占的话,就需要运营推广各凭本事,市场运营中选择合适的推广方式,可以增加店铺销售额,很多实体店或商城都会建…

几个常见的FPGA问题之序列发生器、编码器、D触发器

几个常见的FPGA问题之序列发生器、编码器、D触发器 语言 :Verilg HDL 、VHDL EDA工具: Vivado 几个常见的FPGA问题之序列发生器、编码器、D触发器一、引言二、背景1、序列发生器(Sequence Generator)2、编码器(Encoder)3、D触发器(D Flip-Flop)二、问题及解决方案1. 序…

PKG打包sqlite3项目,如何添加node_sqlite3.node依赖

项目地址:https://github.com/helson-lin/pkg_sqlite 在ffandown项目内,由于项目使用了sqlite3,在跨平台打包的时候,除了本机外其他平台打包之后运行缺少node_sqlite3.node依赖。 为了解决问题,百度了很久&#xff0c…

后端之路第三站(Mybatis)——结合案例讲Mybatis怎么操作sql

先讲一下准备工作整体流程要做什么 我们要基于一个员工管理系统作为案例,进行员工信息的【增、删、改、查】 原理就是用Mybatis通过java语言来执行sql语句,来达到【增、删、改、查】 一、准备工作 1、引入数据库数据 首先我们把一个员工、部门表的数…

Transformers是SSMs:通过结构化状态空间对偶性的广义模型和高效算法(二)

文章目录 6、针对SSD模型的硬件高效算法6.1、对角块6.2、低秩块6.3、计算成本 7、Mamba-2 架构7.1、块设计7.2、序列变换的多头模式7.3、线性注意力驱动的SSD扩展8、系统优化对于SSMs8.1、张量并行8.2、序列并行性8.3、可变长度 9、实证验证9.1、合成任务:联想记忆9…

Springcloud-消息总线-Bus

1.消息总线在微服务中的应用 BUS- 消息总线-将消息变更发送给所有的服务节点。 在微服务架构的系统中,通常我们会使用消息代理来构建一个Topic,让所有 服务节点监听这个主题,当生产者向topic中发送变更时,这个主题产生的消息会被…

【产品经理】订单处理9-台账库存管理

在订单处理过程中,台账库存的具体设计怎么做? 在订单处理过程中,分配仓库成功后要扣除仓库库存并计算商品缺货情况,仓库库存就是台账库存。 1,台账库存是针对某个仓库的库存,且台账库存只计算此商品SKU的库…

随州职业技术学院2024年成人高等继续教育招生简章

随州职业技术学院,这所历史悠久、声誉卓著的学府,如今正以其独特的魅力与实力,向广大成人学习者敞开怀抱,宣布启动2024年成人高等继续教育的招生工作。 在这片知识的沃土上,学院以其严谨的教学态度,为无数…

动手学深度学习(Pytorch版)代码实践 -卷积神经网络-20填充与步幅

20填充与步幅 import torch from torch import nn# 此函数初始化卷积层权重,并对输入和输出提高和缩减相应的维数 def comp_conv2d(conv2d, X):# 这里的(1,1)表示批量大小和通道数都是1#将输入张量 X 的形状调整为 (1, 1, height,…

最佳学习率和Batch Size缩放中的激增现象

前言 《Surge Phenomenon in Optimal Learning Rate and Batch Size Scaling》原文地址GitHub项目地址Some-Paper-CN。本项目是译者在学习长时间序列预测、CV、NLP和机器学习过程中精读的一些论文,并对其进行了中文翻译。还有部分最佳示例教程。如果有帮助到大家&a…

llm学习-1(包含如何使用github的codespace):

本文学习参考:datawhalechina/llm-universe: 本项目是一个面向小白开发者的大模型应用开发教程,在线阅读地址:https://datawhalechina.github.io/llm-universe/ 一些可使用的大模型地址: Claude 使用地址 PaLM 官方地址 Gemini…

24年hvv前夕,微步也要收费了,情报共享会在今年结束么?

一个人走的很快,但一群人才能走的更远。吉祥同学学安全https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247483727&idx1&sndb05d8c1115a4539716eddd9fde4e5c9&scene21#wechat_redirect这个星球🔗里面已经沉淀了: 《Ja…

机械拆装-基于Unity-总体设计

前言 在工业设计和制造领域,零部件的拆装技术是一个重要的应用场景,比如我们在工程训练课程中经历的摩托车发动机拆装课程,是机械类学生的必修课程。虚拟拆装系统模拟和仿真了模型的拆装过程,虽然SolidWorks等机械设计软件能够解决…

apipost的安装和测试添加接口能否正常使用

1.进入官网,点击免费使用(我是windows 64位,选合适自己的配置) 2.开始安装 选仅为我安装——下一步 选择自己的安装目录——点安装 等待 运行——完成 3.apipost一些基本操作——实现添加内容 (1)新建接口…

【05】从0到1构建AI生成思维导图应用 -- 前端交互实现

【05】从0到1构建AI生成思维导图应用 – 前端交互实现 大家好!最近自己做了一个完全免费的AI生成思维导图的网站,支持下载,编辑和对接微信公众号,可以在这里体验:https://lt2mind.zeabur.app/ 上一章:http…

5_Clark变换Simulink仿真详细步骤

一、Clark变换的计算过程 根据投影定理: Iα由Ia、Ib、Ic共同投影决定,根据几何原理,IαIa-cos(60)*Ib-cos(60)*Ic,即是IαIa-0.5*Ib-0.5*Ic Iβ由Ib、Ic共同投影决定,根据几何原理,Iβsin(60&a…

下一代的JDK - GraalVM

GraalVM是最近几年Java相关的新技术领域不多的亮点之一, 被称之为革命性的下一代JDK,那么它究竟有什么神奇之处,又为当前的Java开发带来了一些什么样的改变呢,让我们来详细了解下 下一代的JDK 官网对GraalVM的介绍是 “GraalVM 是…

【Python机器学习】模型评估与改进——交叉验证

交叉验证是一种评估泛化性能的统计学方法,它比单次划分训练集和测试集的方法更稳定、前面。在交叉验证中,数据被多次划分,并且需要训练多个模型。最常用的交叉验证是k折交叉验证,其中k是由用户指定的数字,通常取5或10,…