在我们工作过程中,有时需要一些接口进行联调。接口联调测试,就是按照业务要求,把接口进行组合测试。接口组合起来才能实现完整的业务,体现更大的价值。
接口联调测试业务分析:
原因:
项目中的接口是多个的
接口组合起来才能实现完整的业务
接口之间有些存在依赖关系
问题:
接口之间调用时,是否正确
接口组合起来,能否完成预定的业务
接口之间的依赖关系,是否能够正确实现。
接口联调测试工作计划分解
- 接口联调测试业务分析
- 接口测试联调测试设计
- 使用Postman工具进行测试
- 编写接口联调测试脚本
- 接口联调测试工作总结
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