Karate框架中用运行时动态数据生成CSV文件的问题求解
在Karate框架中用动态数据生成CSV文件的正确方法
问题出在哪
你当前的代码有两个核心问题:
- 数据格式不对:
karate.write生成CSV时,得传数组格式的对象集合,不是单个JSON对象。单个对象没法被解析成CSV的行数据。 - 变量引用错了:在
def data里用#(randomRoute)是无效的,Karate直接定义变量时不用#(),直接写变量名就行。
修正后的代码
# 生成动态数据 def randomRoute = "Karate Route_" + randomNumber(4) def retailerMobile = "+9233334345643" print retailerMobile print randomRoute # 正确构造单条数据(直接用变量,不用#()) def singleRow = { routeName: randomRoute, userMobile: retailerMobile, stop: "1" } # 把单条数据包成数组(CSV必须要数组格式的数据源) def csvData = [singleRow] # 生成JSON文件(这部分原代码没问题,可保留) karate.write(singleRow, 'routeRequirements.json') # 生成CSV文件 karate.write(csvData, 'routes.csv')
生成多行CSV的扩展用法
如果要生成多条数据的CSV,往数组里加更多对象就行:
def csvData = [ { routeName: randomRoute, userMobile: retailerMobile, stop: "1" }, { routeName: "Karate Route_" + randomNumber(4), userMobile: "+923333123456", stop: "2" } ] karate.write(csvData, 'multiRoutes.csv')
自定义CSV格式的方法
要是需要自定义表头顺序或者处理特殊格式,也可以手动拼CSV字符串再写入:
def csvContent = "routeName,userMobile,stop\n" + randomRoute + "," + retailerMobile + ",1" karate.write(csvContent, 'customRoutes.csv')
内容的提问来源于stack exchange,提问作者Zaeem Ahmed
相关产品推荐
相关产品推荐

