网站推广软件推荐,湖南湘信建设工程有限公司网站,建设银行网站 购买外汇,企业为什么要建站大家在接口测试的过程中#xff0c;很多时候会用到对CSV的读取操作#xff0c;本文主要说明Python3对CSV的写入和读取。下面话不多说了#xff0c;来一起看看详细的介绍吧。
1、需求
某API#xff0c;GET方法#xff0c;token,mobile,email三个参数
token为必填项mobil… 大家在接口测试的过程中很多时候会用到对CSV的读取操作本文主要说明Python3对CSV的写入和读取。下面话不多说了来一起看看详细的介绍吧。
1、需求
某APIGET方法token,mobile,email三个参数
token为必填项mobile,email 必填其中1项mobile为手机号,email为email格式
2、方案
针对上面的API在做接口测试时需要的测试用例动辄会多达10, 这个时候采用数据驱动的方式将共性的内容写入配置文件或许会更合适。
这里考虑把API、参数、以及预期结果预行在格式化的CSV里保存利用csv组件从CSV里读取URL、参数以及预期结果Requests组件发起请求将响应结果与预期结果进行比对最后把比对结果写到结果CSV。
流程如下图 3、实现
1、在上代码之前先安装好如下几个组件
csv 读写CSV文件jsonrequests 发起请求获取响应结果unittest 测试用例调度
2、data.csv(本示例选取部分用例 3、reader_CSV函数代码示例
import csvimport jsonimport requestsimport timeimport unittestdef readCSV(self,filename)::param filename: 需要读取的数据文件:return: [{data1},{data2}...]datas []try:#以DictReader的方式读取数据文件方便与json互做转换with open(filename,r) as csvfile :#从文件里读取到的数据转换成字典列表的格式reader csv.DictReader(csvfile)for row in reader:data {}data[id] row[id]data[url] row[url]data[token] str(row[token])data[mobile] row[mobile]data[email] row[email]data[expect] json.dumps(row[expect]) \if isinstance(row[expect],dict) \else row[expect] #如果expect读取出来的不是json则取其原值否则转为json格式保存到result里datas.append(data)return datas#如果文件找不到返回空的datasexcept FileNotFoundError:print(文件不存在,filename)return datas4、request_URL函数示例(包含GET请求和POST请求2个方法)
def get_request(self,url,params):通用的调用GET接口方法:param url:string 接口路径:param params:{:,:} 需要传入的参数:return: response响应体print(调用API...)r requests.get(url,paramsparams)print(r.text)return rdef post_request(self,url,params):通用的调用POST接口方法:param url: string 接口路径:param params: {:,:} 需要传入的参数:return:response响应体print(调用API...)r requests.post(url,paramsjson.dumps(params)) #post的方法必须用json.dumps()转化成json格式print(r.text)return r5、assert_Result函数示例
def assertResult(self,except_value,real_value):校验样本字符串中是否包含指定字符串:param except_value: string 指定字符串:param real_value: string 样本字符串:return: Boolean 样本中包含指定字符串返回True,否则返回Falseifsuccess except_value in str(real_value)return ifsuccess6、write_CSV函数示例
def writeCSV(self,filename,results):写入csv文件指定内容:param filename: string 需要写入的文件名称:param results: [{data1},{data2},...] 写入的内容:return: 无print(写文件:,filename)#以DictWriter的方式写文件with open(filename,w) as csvfile:headersid,url,token,mobile,email,expect,real_value,assert_value.split(,)writer csv.DictWriter(csvfile,fieldnamesheaders)#写表头writer.writeheader()#写数据if results.__len__() 0 :for result in results:writer.writerow(result)csvfile.close()7、test_interface1函数示例
def test_interface1(self):#指定读取的数据文件名称data_file ../data/data.csv#指定最终结果生成的数据文件名称result_file ../data/result_{}.csv.format(str(time.time()).split(.)[0])#读取指定文件的数据datas self.readCSV(data_file)#数据文件有内容则调用接口否则直接测试结束if datas.__len__() 0:results []#获取数据文件里的每一行for testcase in datas :result {}result[id] testcase[id]result[url] testcase[url]result[token] testcase[token]result[mobile] testcase[mobile]result[email] testcase[email]result[expect] testcase[expect]#组装参数params {token:result[token],mobile:result[mobile],email:result[email]}#调用API接口获取响应结果real_value self.get_request(result[url],params)#调用assert方法检查预期结果是否在响应结果中存在assert_value self.assertResult(result[expect],real_value.text)result[real_value] real_value.textresult[assert_value] assert_value#获取每一行里的所有字段以及实际结果和验证结果results.append(result)#执行完所有记录后将所有结果写入result.csvself.writeCSV(result_file,results) #写入csv文件print(测试结束)
8、result_1523956055.csv(本示例中的测试结果请忽略 总结
python封装了很多方法对于测试来说开发速度相对较快接口自动化测试如果采用CSV管理的数据驱动方式使用csvrequests是测试开发不容错过的利器之一。
最后感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走 这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴上万个测试工程师们走过最艰难的路程希望也能帮助到你