前言:
在接口测试中,接口的请求参数不可能一直一成不变,如果只有一两个接口的时候,可以直接在代码中更改对应的值,但如果接口多达上百个的时候,一行一行的在代码中改参数, 是极其痛苦的一件事。这个时候,使用数据参数化的优点就体现出来了,只需要把所有参数写到同一个地方,任一参数改变时,到指定地方修改该参数的值就可以了。
数据参数化的方式:
1、使用txt文件保存数据,这样的优点在于txt文件易于读取,不论是linux还是windows下都容易打开。
2、使用csv文件保存,优点在于,可以使用excel软件打开,这样看上去数据会比较清晰。
3、使用json文件(注意是文件),这样的优点也是可以直接查询key值得到对应的values。
但是!但是!但是!
从txt和csv文件中读取到的数据是这样的:
[request_id,nonce,aa,bb,cc]
可以看出是一个数组类型,那么提取值时就必须使用list[0],list[1],list[2]这样的方式提取,但真正的问题在于,你记得第一个对应的是哪一个值吗?如果在两个参数中间再增加一个参数,是不是就全乱了?所以理论上应该使用json文件做数据参数化,但是!但是!但是!json数据不支持注释,数据一多,也是乱七八糟的。那么该如何处理呢?
Python字典参数化:
其实,我们不必要缘木求鱼,也不必舍近求远,有时候我们寤寐思服,求而不得的东西,往往就在你容易忽略的地方,Python语言本身就提供了一个字典类型。使用字典做数据参数化,只需要dict["name"]就可以了。那么接下来就是实际的操作。
示例:
新建一个文件Data.py,将以下代码复制进去:
# 多个不同的参数时写成多个不同的字典即可
data={
"url":"https://openapi.dvr163.com/message/nonce", # url地址
"method":"get",#请求参数
}
在测试的demo中导入并使用:
import requests
import pandas
import time
from Data import data
#http请求demo
def GetTest(data):
#接口请求
url=data["url"]
Param={ # 传递的参数,字典类型,所有参数写在这里即可
"method":data["method"]
}
Rque=requests.get(url,Param) # 发起Get请求
#测试数据
data={
"Interface":"获取服务器验证码", #接口名称
"time":time.strftime('%Y-%m-%d_%H:%M:%S', time.localtime(time.time())), #测试时间,这里使用格式化时间,
"StatusCode":[Rque.status_code] ,#接口响应状态码
"Responseime":[Rque.elapsed.total_seconds()],#接口响应时间
"Response DATA": Rque.text, #响应的数据,这里建议使用text,因为不是每个接口都返回json格式
"Request body": Rque.request.body, # 发送的数据,get请求的数据会在url中
"Url": Rque.url, # 请求的url
#更多参数请自行添加
}
#写入csv中,以下两行代码建议封装成函数
dataCSV = pandas.DataFrame(data)
dataCSV.to_csv("chen.csv", index=False, mode="a", header=False, encoding="GBK")
GetTest(data)
"""
参考以上代码即可实现数据参数化,将字典单独存放到一个文件的好处是方便后面修改数据
在函数内调用时,记得要把参数传入,即 def GetTest(data):(注意括号中的data)
"""
目录结构:
总结:
数据参数化只须使用pyhton提供的字典类型即可。根据key值获取到相应的值,逻辑清晰也易于脚本的维护。