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

文章目录

  • 前言
  • 一、实现登录接口对象封装和调用
  •       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…

【Git】GitIgnore不生效

这里可能有两种原因,一个没有刷新Git缓存,二是Git忽略规则有问题 更新Git缓存 git rm -r --cached . git add . git commit -m "modify git ignore rule"Ignore规则 检查下忽略文件的目录表示是否正确 XXX忽略任意目录下名为XXX的文件 …

新手第一个漏洞复现: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引入…

在 MATLAB 中显示 3D 图像

文章目录 前言1. 曲面图 (Surface Plot)2. 网格图 (Mesh Plot)3. 散点图 (Scatter Plot)4. 等值线图 (Contour Plot) 前言 提示:这里可以添加本文要记录的大概内容: 项目需要: 提示:以下是本篇文章正文内容,下面案例…

享元模式(设计模式)

享元模式(Flyweight Pattern)是一种结构型设计模式,它通过共享细粒度对象来减少内存使用,从而提高性能。在享元模式中,多个对象可以共享相同的状态以减少内存消耗,特别适合用于大量相似对象的场景。 享元模…

解决“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…

面向对象,常用类,集合,异常,JDBC,mysql数据库内容的复习,

1,面向对象 面向对象与面向过程对比 面向过程:关注过程,适合解决简单直接的问题,代码结构以函数为单位,如C语言。 面向对象:关注类,适合解决复杂问题更加适合解决复杂的项目中的问题等等&…

跨平台编程:在Conda中搭建R语言环境的终极指南

🌐 跨平台编程:在Conda中搭建R语言环境的终极指南 🌐 在数据科学和统计分析领域,R语言以其强大的数据处理能力和丰富的图形表示功能而广受欢迎。然而,对于习惯了使用Linux操作系统的用户来说,如何方便地在…

【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. 集合框架中的泛型 在Java的集合框架中,泛型被广泛使用以确保类型安全并减少运行时错误。以下是一个使用泛型ArrayList的示例: java import java.util.ArrayList; import java.util.List; public class GenericCollectionsExamp…

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

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

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

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

算法练习——函数、递归和递推

在此记录一些有关函数、递归和递推的问题。所有题目均来自洛谷的题单能力提升综合题单Part1 入门阶段 - 题单 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) (实际上都没有用递推做) [NOIP2001 普及组] 数的计算 题目描述 给出正整数 n n n&#xf…

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

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

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

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

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

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