提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
在进行接口自动化测试过程中,时常会遇到接口间参数传递问题,这时应如何设计接口测试脚本呢?
一、接口测试自动化
接口测试存在大量接口间参数传递问题,以下一点是平时工作中的试验解决方法,仅供参考~
二、使用步骤
1.正常场景接口测试
代码如下:
class ResetPasswordTest(unittest.TestCase):
def gettoken(self,username,question,answer):
url='http://localhost:8081/jwshoplogin/user/forget_check_answer.do'
userinfo={"username":username,
"question":question,
"answer":answer
}
response=requests.post(url,userinfo).json()
return response["data"]
def test_updatepassword(self):
url='http://localhost:8081/jwshoplogin/user/forget_reset_password.do'
userinfo={"username":"王七",
"passwordNew":"123456",
"forgetToken":self.gettoken("王七","最爱的美食","小葱拌豆腐")
}
response=requests.post(url,userinfo).text
if response.find("修改密码成功")>0:
print("测试通过")
运行结果:
说明正常场景可以进行参数传递,修改密码成功。
2.通过数据文件读取参数传入
2.1可控参数个数读取试验
数据文件如下:
代码如下:
#导入库文件
import csv
#只读方式打开数据文件
file=open("./testdatafile/ind_interface/ind_resetpassword_data.csv", "r")
#读取数据文件
table=csv.reader(file)
#初始化读取开始行下标
number=0
#循环读取文件数据
for row in table:
#从数据文件第二行开始获取数据
if number>0:
#获取需要读取的参数个数
i=int(row[0])
#循环读取参数
for j in range(1,i+1):
print(row[j])
print("\n")
number+=1
试验结果:
2.2与正常场景代码合并
代码如下:
import csv
import requests
import unittest
class ResetPasswordTest(unittest.TestCase):
def setUp(self) -> None:
self.url = 'http://localhost:8081/jwshoplogin/user/forget_reset_password.do'
self.file1 = open("../../testdatafile/ind_interface/ind_resetpassword_data.csv", "r")
def tearDown(self) -> None:
self.file1.close()
def gettoken(self,username,question,answer):
url='http://localhost:8081/jwshoplogin/user/forget_check_answer.do'
userinfo={"username":username,
"question":question,
"answer":answer
}
response=requests.post(url,userinfo).json()
return response["data"]
def test_updatepassword(self):
# url='http://localhost:8081/jwshoplogin/user/forget_reset_password.do'
# userinfo={"username":"王七",
# "passwordNew":"123456",
# "forgetToken":self.gettoken("王七","最爱的美食","小葱拌豆腐")
# }
# response=requests.post(url,userinfo).text
# if response.find("修改密码成功")>0:
# print("测试通过")
# 读取数据文件
table = csv.reader(self.file1)
# 初始化读取开始行下标
number = 0
#接口名称
interfacename='回答完密保问题后修改密码'
# 循环读取文件数据
for row in table:
#获取参数名
args=["username","passwordNew","forgetToken"]
# 初始化请求参数
userinfo = {}
# 从数据文件第二行开始获取数据
if number > 0:
# 获取需要读取的参数个数
i = int(row[0])
# 循环读取参数
for j in range(1, i + 1):
userinfo[args[j-1]]=row[j]
# print(userinfo)
# 如果参数个数为3并且token值为空,则继续获取后面两个参数
if i == 3 and row[3] == "":
question=row[4]
answer=row[5]
#通过gettoken方法获取token值
userinfo["forgetToken"]=self.gettoken(userinfo["username"],question,answer)
# print(userinfo)
# print("\n")
# print(row[6])
#发送接口请求
response=requests.post(self.url,userinfo).text
# print(response)
#比对实际结果与期望结果
if row[6] in response:
print("接口测试通过")
else:
print("接口测试失败")
#行号+1
number+=1
2.3将测试结果写入测试报告文件
import csv
import requests
import unittest
class ResetPasswordTest(unittest.TestCase):
def setUp(self) -> None:
self.url = 'http://localhost:8081/jwshoplogin/user/forget_reset_password.do'
self.file1 = open("../../testdatafile/ind_interface/ind_resetpassword_data.csv", "r")
self.file2 = open("../../testresultfile/ind_interface/ind_resetpassword_result.csv", "w")
# 写入表头
self.file2.write("接口名称" + "," + "请求参数个数" + "," + "用户名" + "," + "新密码" + "," + "token" + "," + "密保问题" + "," + "答案" + "," + "测试结果" + "\n")
def tearDown(self) -> None:
self.file1.close()
self.file2.close()
def gettoken(self,username,question,answer):
url='http://localhost:8081/jwshoplogin/user/forget_check_answer.do'
userinfo={"username":username,
"question":question,
"answer":answer
}
response=requests.post(url,userinfo).json()
return response["data"]
def test_updatepassword(self):
# url='http://localhost:8081/jwshoplogin/user/forget_reset_password.do'
# userinfo={"username":"王七",
# "passwordNew":"123456",
# "forgetToken":self.gettoken("王七","最爱的美食","小葱拌豆腐")
# }
# response=requests.post(url,userinfo).text
# if response.find("修改密码成功")>0:
# print("测试通过")
# 读取数据文件
table = csv.reader(self.file1)
# 初始化读取开始行下标
number = 0
#接口名称
interfacename='回答完密保问题后修改密码'
# 循环读取文件数据
for row in table:
#获取参数名
args=["username","passwordNew","forgetToken"]
# 初始化请求参数
userinfo = {}
# 从数据文件第二行开始获取数据
if number > 0:
# 获取需要读取的参数个数
i = int(row[0])
# 循环读取参数
for j in range(1, i + 1):
userinfo[args[j-1]]=row[j]
# print(userinfo)
# 如果参数个数为3并且token值为空,则继续获取后面两个参数
if i == 3 and row[3] == "":
question=row[4]
answer=row[5]
#通过gettoken方法获取token值
userinfo["forgetToken"]=self.gettoken(userinfo["username"],question,answer)
# print(userinfo)
# print("\n")
# print(row[6])
#发送接口请求
response=requests.post(self.url,userinfo).text
# print(response)
#比对实际结果与期望结果
if row[6] in response:
self.file2.write(interfacename + "," + row[0] + "," + row[1] + "," + row[2] + "," + row[3] + "," + row[4] + "," + row[5] + "," + "测试通过" + ",")
# print("接口测试通过")
else:
self.file2.write(interfacename + "," + row[0] + "," + row[1] + "," + row[2] + "," + row[3] + "," + row[4] + "," + row[5] + "," + "测试失败" + ",")
# print("接口测试失败")
self.file2.write("\n")
#行号+1
number+=1
运行结果
总结
以上就是今天要讲的内容,本文仅仅简单介绍了接口自动化测试——参数传递的测试数据文件设计及实现的使用,如有谬误,还望指正,万分感谢。