上一篇的文章响应比较热烈,今天来写篇进阶代码,大体分为两部分,csv读出所有的接口文件和 把所有的测试结果写进csv文件里
首先我先讲一下,读接口文件
test_interface.csv接口文件样式:
给大家解释一下部分列的含义
url访问地址,expresult预期结果,interfaceName接口名称,一串数字那一列(2,6,2)是参数个数,代码里面会用到,后面就是参数名称及参数值了。
下面直接上代码:
import csv
file=open("test_interface.csv","r")
table=csv.reader(file)
userinfo={}
for row in table:
url=row[1]
expresult=row[3]
interfaceName=row[5]
#上面的就是分别拿到url,预期结果,接口名称,下面才是重点,因为每个请求参数个数会不一样这里要再套个循环读取请求参数,会有一点弯弯绕
#j拿到参数个数,因为在第七列所以拿row[6]
j=int(row[6])
#这里的意思是,i从7开始,每次加2,一直到i大于2*j+7结束,大家可以想一下对不对
for i in range(7,2*j+7,2):
#row[i]为参数名,row[i+1]为参数值
userinfo[row[i]]=row[i+1]
这样我们就拿到请求参数全部信息了
print(userinfo)
userinfo={}
下面是把测试结果写到csv文件里面
#这段是测试代码
file=open("test_all.csv","a")
#模拟响应回来数据是resData
resData={"接口名":"登录接口","实际响应结果":"成功","测试结论":"通过"}
#这次循环是分别拿到resData的key和value值
for key,value in resData.items():
print(key,value)
#写进文件里面
file.write(str(key)+","+str(value)+",")
#每个响应写完要换行 所以要\n
file.write("\n")
file.close()
好了,两个主体介绍完了 上整体代码:
import requests
import csv
class workflow_forgotpassword_final_test():
#这里因为每个请求都会经历这一步,所以在这里进行封装,每个参数意义,已经在上面介绍过了,相信大家这段都应该看得懂吧,拿到响应数据
def all_test(self,url,userinfo,expresult,interfaceName):
resData={}
response=requests.post(url,data=userinfo).text
resData["接口实际返回值"] = str(response)
r=response.find(expresult)
if r>0:
print(interfaceName,"pass")
resData["测试结论"]="pass"
else:
print(interfaceName,"fail")
resData["测试结论"] = "fail"
#这里resData拿到两对值一个是接口实际返回值,另外一个是测试结论
return resData
#这个是把测试结果写进csv文件
def res_report(self,interfaceName,reportFileName,resData):
#a为追加写,w为覆盖写
file=open(reportFileName,"w")
#第一列为接口名称
file.write(interfaceName+",")
#后面是遍历响应回来的数据
for key,value in resData.items():
file.write(key+","+value+",")
file.write("\n")
file.close()
#主函数调用
if __name__ == '__main__':
#对象实例化
final_obj=workflow_forgotpassword_final_test()
file=open("test_interface.csv","r")
#定义结果文件名称
reportFileName="test_resAll.csv"
resData={}
table=csv.reader(file)
for row in table:
url=row[1]
expresult=row[3]
interfaceName=row[5]
#在这里为什么要定义一个空的userinfo,因为下面的循环,每循环一次就是一个请求的所有参数,如果这里不是空的 ,下次整体循环的时候,就会追加了,肯定不对的
userinfo={}
# print(url,interfaceName,expresult)
j=int(row[6])
for i in range(7,2*j+7,2):
userinfo[row[i]]=row[i+1]
#拿到参数,调用发送请求,以及断言部分
resData=final_obj.all_test(url,userinfo,expresult,interfaceName)
#结果写进csv
final_obj.res_report(interfaceName,reportFileName,resData)
好了,大功告成,以后不管有什么请求只需要往test_interface.csv文件填充就好了,最后附上结果文件样子:
略有瑕疵,响应数据分开了,不过可以优化的,交给大家了,这样其实也可以用啦
最后,欢迎大家多多留言,还有最后一篇接口自动化框架的,大家期待下吧