接口联调测试

在我们工作过程中,有时需要一些接口进行联调。接口联调测试,就是按照业务要求,把接口进行组合测试。接口组合起来才能实现完整的业务,体现更大的价值。

接口联调测试业务分析:

原因:

项目中的接口是多个的

接口组合起来才能实现完整的业务

接口之间有些存在依赖关系

问题:

接口之间调用时,是否正确

接口组合起来,能否完成预定的业务

接口之间的依赖关系,是否能够正确实现。

接口联调测试工作计划分解

  1. 接口联调测试业务分析
  2. 接口测试联调测试设计
  3. 使用Postman工具进行测试
  4. 编写接口联调测试脚本
  5. 接口联调测试工作总结

1、接口联调测试业务分析

首先我们对接口进行整体联调分析,要对所有的接口有一个全局认识,包括接口名称、接口功能、接口参数、接口返回值,把他们列一个表格,把抽象工作任务转化为具体的工作成果物。

2、接口测试联调测试设计

目前针对用户注册、用户登录、忘记密码、提交密保问题答案、回答完密保问题后修改密码等作为一个接口联调的测试。

3、使用Postman工具进行测试

3.1 身份验证技术

我们的接口网络访问是基于HTTP协议的,它是一种无状态的协议。虽然已经登录成功。但是重新打开一个页面后,相当于中心发送新的请求,服务器就无法判断是登录后的用户还是未登录的用户。所以必须通过一种方式记录用户的身份,在发送页面请求时需要带着这个信息发给服务器。

cookie:

登录以后,在浏览器端本地生成一个文件,保存在浏览器的客户端。

一般会存储用户的身份信息。

可以删除,删除后,重新登录可以再次生成。

有些系统也会通过cookie记录一些用户的操作习惯。

以谷歌浏览器为例,浏览器查看cookies

点击设置--安全和隐私设置---Cookie及其他网站数据。

在隐私和安全中,查看所有网站数据和权限

也可以在清除浏览数据时,删除掉

session:

登录后,服务器端发送一个随机的session ID值,来进行用户身份的识别。

有时效性,代码中进行设计,一般30分钟

token:

登录后,服务器端发送一个token令牌

有时效性

可以支持多平台访问,可支持访问第三方网站或系统。

3.2 用Postman 进行接口调用

用户注册、用户登录、忘记密码、提交密保问题答案、回答完密保问题后修改密码,只考虑正确的情况。

用户注册

用户登录

忘记密码提示密保接口、

提交密保问题答案、会得到一个新的token

回答完密保问题后修改密码,要将上个接口返回的token作为参数传进去。

4、编写接口联调测试脚本

4.1 设计类图

方法1:一个 接口对应一个类

接口比较少时可以采用(3个左右)

方法2:设计一个类对应多个测试方法,一个测试方法进行一个接口测试。

本类的设计采用方案2。将用户注册、用户登录、忘记密码、提交密保问题答案、回答完密保问题后修改密码设计成一个类中的五个方法。

用户注册:yhzc_test()

用户登录:yhdl_test()

忘记密码:wjmi_test()

提交密保问题答案:tjmbwtda_test()

回答完密保问题后修改密码:hdwtxgmm_test()

首先画一个类的设计图,这个也是需要具备的一个能力

可以在wps中找到,插入---流程图

更多图形---UML类图

下面就会出现uml类图的模板

也可以在visio中,选择“文件”-“新建”-“软件和数据库”-“UML模型图”;

添加类的方法

在提交密保问题答案,tjmbwtda_test()方法需要把获取的token作为返回值

回答完密保问题后修改密码方法,hdwtxgmm_test()需要将获得的token传入进去。

4.2  设计流程图

定义一个类,定义五个方法。

1、一个方法对应一个接口测试,参数:URL接口请求地址、接口参数,返回值

2、只考虑正常接口数据的测试

3、提交密保问题答案接口的返回值forgettoken,要作为回答完密保问题后修改密码的输入参数,方法中要定义一个方法参数。

以用户注册为例

每一个测试方法具体实现过程:

1、设置接口请求地址

2、设置接口参数

3、发送请求并接收响应

4、对响应结果进行判断:测试通过,测试失败

4.3 脚本实现

1、先把类定义好

2、实现一个方法,就调试一个方法,需要在main中进行。

3、方法调试通过后,再加入其他方法

# 针对多个接口进行联调测试,接口内容如下:
# 1、用户注册接口
# 2、用户登录接口
# 3、忘记密码接口
# 4、提交密保问题答案
# 5、回答完密保问题后修改密码接口
import requests
# 定义一个接口联调的测试类
class workflow_forgetpassword_test():
    # 用户注册接口
    def yhzc_test(self):
        url="http://localhost:8080/jwshoplogin/user/register.do"
        # 正确的用户注册数据
        userinfo={"username":"张海1",
                  "password":"123456",
                  "email":"1234561@qq.com",
                  "phone":"13311095555",
                  "question":"最喜欢的水果",
                  "answer":"苹果"}
        # 发送注册请求,并获取响应
        response=requests.post(url,data=userinfo).text
        print(response)
        r=response.find("注册成功")
        if r>0:
            print("用户注册接口测试通过")
        else:
            print("用户注册接口测试失败")
    # 2、用户登录接口
    def yhdl_test(self):
        url="http://localhost:8080/jwshoplogin/user/login.do"
        # 正确的用户登录数据
        userinfo={"username":"张海1",
                    "password":"123456"}
        # 发送登录请求,并获取响应
        response=requests.post(url,data=userinfo).text
        print(response)
        r=response.find("登录成功")
        if r>0:
            print("用户登录接口测试通过")
        else:
            print("用户登录接口测试失败")
    # 3、忘记密码接口
    def wjmi_test(self):
        url="http://localhost:8080/jwshoplogin/user/forget_get_question.do"
        # 正确的用户忘记密码数据
        userinfo={"username":"张海1"}
        # 发送用户忘记密码请求,并获取响应
        response=requests.post(url,data=userinfo).text
        print(response)
        r=response.find("最喜欢的水果")
        if r>0:
            print("用户忘记密码接口测试通过")
        else:
            print("用户忘记密码接口测试失败")
    # 4、提交密保问题答案
    def tjmbwtda_test(self):
        url="http://localhost:8080/jwshoplogin/user/forget_check_answer.do"
        # 提交密保答案
        userinfo={"username":"张海1",
                  "question":"最喜欢的水果",
                  "answer":"苹果"}
        # 发送提交问题答案接口请求,并获取响应
        response=requests.post(url,data=userinfo).text
        print(response)
        # 1、字符串类型的返回结果,转化为字典类型
        dic={}
        dic=eval(response)
        token=dic["data"]
        print(token)
        # r=response.find("data")
        r = response.find(token)
        if r>0:
            print("提交问题答案接口请求接口测试通过")
        else:
            print("提交问题答案接口请求接口测试失败")
        # 返回获取到的token
        return token
    # 5、回答完密保问题后修改密码接口
    def hdwtxgmm_test(self,token):
        url="http://localhost:8080/jwshoplogin/user/forget_reset_password.do"
        # 提交密保答案
        print("传入的token",token)
        userinfo={"username":"张海1",
                  "passwordNew":"123456",
                  "forgetToken":token}
        # 发送提交问题答案接口请求,并获取响应
        response=requests.post(url,data=userinfo).text
        print(response)
        r = response.find("修改密码成功")
        if r>0:
            print("提交问题答案接口请求接口测试通过")
        else:
            print("提交问题答案接口请求接口测试失败")
        # 返回获取到的token

if __name__ == '__main__':
    workflowobj=workflow_forgetpassword_test()
    # 1、用户注册接口
    workflowobj.yhzc_test()
    # 2、用户登录接口
    workflowobj.yhdl_test()
    # 3、忘记密码接口
    workflowobj.wjmi_test()
    # 4、提交密保问题答案
    token=workflowobj.tjmbwtda_test()
    # print("返回的token",token)
    # 5、回答完密保问题后修改密码接口
    workflowobj.hdwtxgmm_test(token)
    # 2、用户登录接口
    workflowobj.yhdl_test()

代码的运行结果为:

{"status":0,"data":"注册成功"}
用户注册接口测试通过
{"status":0,"msg":"登录成功","data":{"id":26,"username":"张海1","password":null,"email":"1234561@qq.com","phone":"13311095555","question":"最喜欢的水果","answer":"苹果","role":0,"createTime":1718710825000,"updateTime":1718710825000}}
用户登录接口测试通过
{"status":0,"data":"最喜欢的水果"}
用户忘记密码接口测试通过
{"status":0,"data":"3c2898f3-762e-4130-8d4f-de9c204b321d"}
3c2898f3-762e-4130-8d4f-de9c204b321d
提交问题答案接口请求接口测试通过
传入的token 3c2898f3-762e-4130-8d4f-de9c204b321d
{"status":0,"msg":"修改密码成功"}
提交问题答案接口请求接口测试通过
{"status":0,"msg":"登录成功","data":{"id":26,"username":"张海1","password":null,"email":"1234561@qq.com","phone":"13311095555","question":"最喜欢的水果","answer":"苹果","role":0,"createTime":1718710825000,"updateTime":1718710825000}}
用户登录接口测试通过

Process finished with exit code 0

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构与算法】最小生成树

文章目录 最小生成树(MST)定义 构造最小生成树Prim算法Kruskal算法 最小生成树(MST) 连通图的生成树包含图的所有顶点,并且只含有尽可能少的边。对于生成树来说,若砍去它的一条边,则会使生成树…

DOOPRIME:日本央行7月加息与否取决于数据,购债规模调整无强烈信号

摘要 日本央行行长植田和男近日在议会发言中表示,7月份是否加息将取决于经济数据表现,而购买日本国债与加息是两个独立的问题,不会通过削减购债规模来释放强烈的政策信号。这一表态引发了市场的广泛关注,投资者和经济学家对此进行…

【elementui源码解析】如何实现自动渲染md文档-第四篇

目录 1.前言 2.md-loader - index.js 1)md.render() 2)定义变量 3)while stripTemplate stripScript genInlineComponentText 4)pageScript 5)return 6)demo-block 3.总结 所有章节&#x…

MyBatis逆向工程和MyBatisX插件的使用

文章目录 1.ORM思维2.逆向工程3.MyBatisX插件的使用 1.ORM思维 ORM(Object-Relational Mapping,对象-关系映射)是一种将数据库和面向对象编程语言中的对象之间进行转换的技术。它将对象和关系数据库的概念进行映射,最后我们就可以…

发生了什么?法国市值蒸发超1.8万亿元

KlipC报道:一周前,法国总统马克龙意外宣布提前举行国会议员选举,引发了法国政坛遭受巨震。仅仅一周内,法国股市遭受重大打击,其市值蒸发了约2580亿美元(约1.8万亿人民币)。 多家大型金融机构多…

【Go语言精进之路】构建高效Go程序:了解string实现原理并高效使用

🔥 个人主页:空白诗 🔥 热门专栏:【Go语言精进之路】 文章目录 引言一、Go语言的字符串类型1.1 字符串的定义1.2 字符串的零值可用1.3 字符串的不可变性1.4 字符串的拼接1.5 字符串的常用方法1.6 实际使用示例 二、字符串的内部表…

【Git】多人协作 -- 详解

一、多人协作(1) ⽬前,我们所完成的工作如下: 基本完成 Git 的所有本地库的相关操作,git 基本操作,分支理解,版本回退,冲突解决等等。 申请码云账号,将远端信息 clone…

【牛客面试必刷TOP101】Day33.BM70 兑换零钱(一)和BM71 最长上升子序列(一)

文章目录 前言一、BM70 兑换零钱(一)题目描述题目解析二、BM71 最长上升子序列(一)题目描述题目解析总结 前言 一、BM70 兑换零钱(一) 题目描述 描述: 给定数组arr,arr中所有的值都为正整数且不重复。每个值代表一种面值的货币,每种面值的货币…

数据安全未来之路,天空卫士荣誉领榜《中国数据安全50强(2024)》

《中国数据安全50强(2024)》 数世咨询首份《中国数据安全50强(2024)》报告发布。天空卫士凭借其卓越的技术创新、市场领导力、业务收入能力和企业发展能力,在众多竞争者中脱颖而出,荣登50强榜单&#xff0…

yolov5模型pt转engine

目录 1. 环境准备1.1 安装tensorrt1.1.1 pip安装1.1.2 压缩包安装 2. pt转engine 1. 环境准备 1.1 安装tensorrt 1.1.1 pip安装 pip install tensorrt 1.1.2 压缩包安装 很可能会失败,最保险的方法是下载tensorRT的压缩包,比如:下载Tenso…

分享:2024年(第12届)“泰迪杯”数据挖掘挑战赛省级奖项获奖名单公示

本次竞赛有评选省奖的省份有广东省、广西壮族自治区、河北省、湖北省。各省奖项依据“泰迪杯”全国评审专家组统一评阅的最终成绩区分省份后从高到低依序按比例产生。 广东省 省级奖项获奖名单公示 奖项设置: 一等奖:约占该省份队伍总数的5%&#xff0…

【正则表达式】入门

参考视频:10分钟快速掌握正则表达式_哔哩哔哩_bilibili 这个网站用来测试写的正则表达式效果:regex101: build, test, and debug regex 示例: 限定符 ? 表示前一个字符可有可无 比如这里输入:de? 匹配结果可以得到d和de * 前…

【Android WebView】WebView基础

一、简介 WebView是一个基于webkit引擎、展现web页面的控件。Android的Webview在低版本和高版本采用了不同的webkit版本内核,4.4后直接使用了Chrome。 二、重要类 以WebView类为基础,WebSettings、WebViewClient、WebChromeClient为辅助共同完成安卓段加…

微服务中的相关概念

Eureka Eureka 是由 Netflix 开发的一个服务发现和注册中心,广泛应用于微服务架构中。Eureka 主要用于管理和协调分布式服务的注册和发现,确保各个服务之间能够方便地找到并通信。它是 Netflix OSS(Netflix Open Source Software&#xff09…

指针和数组

同一指针相减的绝对值得到的是之间元素的个数 #include"stdio.h" #include"string.h" int main() {int arr[10]{0};printf("%d\n",&arr[9]- &arr[0]);return 0; } 不同类型的指针减去指针没有意义 地址加地址,指针加指针没…

UE5 C++ 跑酷游戏练习 Part1

一.修改第三人称模板的 Charactor 1.随鼠标将四处看的功能的输入注释掉。 void ARunGANCharacter::SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) {// Set up action bindingsif (UEnhancedInputComponent* EnhancedInputComponent CastChecked&…

【Linux基础IO】常见的对文件操作的函数、文件描述符fd、访问文件的本质分析

目录 fopen函数 chdir函数 fclose函数 fwrite和fread函数 open函数 umask函数 write函数 read函数 close函数 文件描述符fd 进程访问文件的本质分析 fopen函数 参数mode: w方式打开文件:1、如果被打开文件不存在,系统会在使用fopen函…

玄机平台流量特征分析-常见攻击事

前言 熟悉常见的攻击流量特征,我们就可以通过主机的一个流量情况来判断主机遭受了何种攻击。这里来看看玄机平台的一道题目。 步骤1.1 这里需要我们找出恶意扫描者,也就是黑客的ip。下载好附件之后用wiresharke打开,直接筛选http协议的流量…

CSS【实战】抽屉动画

效果预览 技术要点 实现思路 元素固定布局(fixed)在窗口最右侧外部js 定时器改变元素的 right 属性,控制元素移入,移出 过渡动画 transition transition: 过渡的属性 过渡的持续时间 过渡时间函数 延迟时间此处改变的是 right …

C# Winform 侧边栏,切换不同页面

在项目中我们经常遇到需要在主界面上切换不同子页面的需求,常用做法是左侧显示子页面菜单,用户通过点击左侧菜单,实现右边子页面的展示。 实例项目实现: 项目左侧侧边栏实现FlowLayoutPanel使用显示不同子窗体 实例链接&#xf…