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

文章目录

  • 前言
  • 一、实现登录接口对象封装和调用
  •       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.mzph.cn/diannao/37846.shtml

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

相关文章

AVL树模拟

1.概念 虽然二叉搜索树可以缩短查找的效率,但如果数据有序或者接近有序时二叉搜索树树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。AVL 树是具有一下性质的二叉搜索树: 1.它的左右子树都是AVL树 2.左右子…

Mac 如何安装 wget

1.安装 Homebrew2.安装 wget3.检测 wget 是否安装成功 1.安装 Homebrew 在安装 wget 之前需要安装一个适用于 mac 的包管理器 Homebrew,打开 mac 终端执行如下命令进行安装: /usr/bin/ruby -e "$(curl -fsSL https://cdn.jsdelivr.net/gh/ineo6/h…

新手第一个漏洞复现:MS17-010(永恒之蓝)

文章目录 漏洞原理漏洞影响范围复现环境复现步骤 漏洞原理 漏洞出现在Windows SMB v1中的内核态函数srv!SrvOs2FeaListToNt在处理FEA(File Extended Attributes)转换时。该函数在将FEA list转换成NTFEA(Windows NT FEA)list前&am…

【Golang - 90天从新手到大师】Day14 - 方法和接口

一. go方法 go方法:在函数的func和函数名间增加一个特殊的接收器类型,接收器可以是结构体类型或非结构体类型。接收器可以在方法内部访问。创建一个接收器类型为Type的methodName方法。 func (t Type) methodName(parameter list) {}go引入…

解决“Duplicate keys detected: ‘ ‘.This may cause an update error.”问题

问题原因 出现“Duplicate keys detected”的错误,通常表示在v-for指令中使的:key绑定值有重复。 如果前端是静态数据,一般能自我避免:key绑定值有重复。如果前端是绑定的动态数据,那么需要另外提供一个唯一的键。 在这个例子中&#xff0c…

【LeetCode】接雨水

目录 一、题目二、解法完整代码 一、题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释&#xff…

【UML用户指南】-23-对高级行为建模-状态机

目录 1、概述 2、状态 2.1、状态的组成 3、转移 3.1、转移的组成 4、高级状态和转移 4.1、进入效应和退出效应 4.2、内部转移 4.3、do活动 4.4、延迟事件 4.5、子状态机 5、子状态 5.1、非正交子状态 5.2、历史状态 5.3、正交子状态 6、分叉与汇合 7、主动对象…

GOROOT GOPATH GOPROXY GO111MODULE

GOROOT GOROOT代表Go的安装目录。可执行程序go(或go.exe)和gofmt(或gofmt.exe)位于 GOROOT/bin目录中。 配置GOROOT环境变量,其值为Go的安装目录;然后在环境变量PATH中添加GOROOT/bin路径。 注意:GOROOT变量只是代表了安装目录,不…

【面试题】信息系统安全运维要做什么

信息系统安全运维是确保信息系统稳定、可靠、安全运行的一系列活动和措施。 其主要包括以下几个方面: 1.系统监控: 实时监测信息系统的运行状态,如服务器的性能指标、网络流量、应用程序的运行情况等。通过监控工具,及时发现系统…

企业数据治理的下一步是数据资产管理?

随着信息技术的飞速发展和数字化转型的深入推进,企业数据已成为驱动业务增长和创新的核心要素。当企业数据治理工作取得显著成效后,如何进一步发挥数据的价值,实现数据资产的有效管理,成为企业面临的重要课题。 数据治理的基石作用…

学习感悟丨在誉天学习数通HCIP怎么样

大家好,我是誉天学员的徐同学,学习的数通HCIP课程。 在学校的时候,听说下半年就要出去实习了,心中坎坷不安,现在我学到的知识远远不够的。然后就想着学点东西充实一下自己的知识面和专业能力,有一次和同学谈…

【漏洞复现】飞企互联——SQL注入

声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 飞企互联-FE企业运营管理平台是一个基于云计算、智能化、大数据…

[图解] 向量数据库之何谓乘积量化器?

Product Quantization 在前面一节讲解了向量数据库索引相关的内容,那么本节将会讲解其中压缩方法的量化手段:乘积量化器。 简单来说将向量的所有维度划分为多个子空间,每个子空间一部分维度,然后每个子空间独立去找最近距离。例如…

haproxy实现代理和负载均衡

HaProxy介绍: haproxy是法国开发者威利塔罗在2000年使用C语言开发的一个开源软件,是一款具备高并发(一万以上)、高性能的TCP和HTTP负载均衡器,支持基于cookie的持久性,自动故障切换,支持正则表达式及web状态统计&…

Numpy array和Pytorch tensor的区别

1.Numpy array和Pytorch tensor的区别 笔记来源: 1.Comparison between Pytorch Tensor and Numpy Array 2.numpy.array 4.Tensors for Neural Networks, Clearly Explained!!! 5.What is a Tensor in Machine Learning? 1.1 Numpy Array Numpy array can only h…

信息学奥赛初赛天天练-39-CSP-J2021基础题-哈夫曼树、哈夫曼编码、贪心算法、满二叉树、完全二叉树、前中后缀表达式转换

PDF文档公众号回复关键字:20240629 2022 CSP-J 选择题 单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项) 5.对于入栈顺序为a,b,c,d,e的序列,下列( )不合法的出栈序列 A. a,b&a…

螺旋矩阵问题C代码

给定一个n行m列的二维数组,要求按顺时针螺旋顺序输出矩阵中的所有元素,n和m小于等于10 如下图是一个三行四列的螺旋矩阵 要求输出 1 2 3 4 8 12 11 10 9 5 6 7 全局变量定义 int a[11][11]; int vis[11][11]; // 访问标记数组关键代码如下 int dx[] …

MySQL高级-MVCC-基本概念(当前读、快照读)

文章目录 1、MVCC基本概念1.1、当前读1.1.1、创建表 stu1.1.2、测试 1.2、快照读 1、MVCC基本概念 全称Multi-Version Concurrency Control,多版本并发控制。指维护一个数据的多个版本,使得读写操作没有冲突,快照读为MySQL实现MVCC提供了一个…

镂空的文字?分享 1 段优质 CSS 代码片段!

大家好,我是大澈! 本文约 800 字,整篇阅读约需 1 分钟。 每日分享一段优质代码片段。 今天分享一段优质 CSS 代码片段,实现 CSS 文字镂空的效果。 老规矩,先阅读代码片段并思考,再看代码解析再思考&#…

Leetcode3190. 使所有元素都可以被 3 整除的最少操作数

Every day a Leetcode 题目来源:3190. 使所有元素都可以被 3 整除的最少操作数 解法1:遍历 遍历数组,累加最少操作数,即 min(num % 3, 3 - num % 3)。 代码: /** lc appleetcode.cn id3190 langcpp** [3190] 使所…