#3 楼 @seveniruby “以至于现在我们组就算不做接口测试, 也会习惯的挂上拦截代理去分析整个交互流程. 确保每个环节都是对的”,这点我非常赞同,我之前也写过分层框架实现该功能了,优点多多。
HAR 是个标准,对于通用化确实非常好,特别是对于打算开源的工具。但实际应用中,可能有些场景需求其无法满足,可能有的人自定义一套内部标准,只要实现解析这套标准的方法即可。我之前也写过一套自定义的标准,是结合分层思想的,把部分内容裁剪掉了,也增加了部分内容,以下是 demo:
{
"testcase": "layTestCase",
"scope": 7,
"dbDependController": true,
"uiDependController": true,
"useProxy": true,
"controller": [
{
"step": 1,
"url": "{internetAddr}inProduct/product.screen",
"method": "get",
"param": "productId=${productId}",
"postBody": false,
"encode": "GBK",
"proxy": "xx.xx.xxx.xx:8080",
"delay": 0,
"isDownload": "buy1"
},
{
"step": 2,
"url": "{internetAddr}login.do",
"method": "get",
"param": "date=#{UTC}",
"postBody": false,
"checkPoint": "\"code\":\"1\"",
"encode": "GBK",
"delay": 0,
"proxy": "xx.xx.xxx.xx:8080"
},
{
"step": 3,
"url": "{internetAddr}insProduct/saveChoices.do",
"method": "post",
"param": "totalPsn=2&childPsn=1&productPeriod=12&startDate=#{getDate(1)},
"postBody": false,
"regx": "idProduct={input type=\"hidden\" id=\"idProduct\" name=\"idProduct\" value=\"(.*)\"/>}#1,
"encode": "GBK",
"delay": 0,
"proxy": "xx.xx.xxx.xx:8080",
"isDownload": "buy2"
},
{
"step": 4,
"url": "{internetAddr}insuranceProduct/checkProdcut.do",
"method": "post",
"param": "idOrder=${idOrder}&idProduct=${idProduct}",
"postBody": false,
"encode": "GBK",
"delay": 0,
"proxy": "xx.xx.xxx.xx:8080"
}
],
"database": [
{
"refStep": 3,
"mode": "sql",
"dbName": "dbName1",
"queryParam": "${idOrder},${idProduct}",
"sql": "select id,amount from table where id =? and product=?",
"compareType": "content",
"dbAssert": "ID_PRODUCT=P004,AMOUNT=1"
},
{
"refStep": 4,
"mode": "proc",
"dbName": "dbName2",
"queryParam": "iiiooo,${idProduct},#{getDate(1)},2012-05-05,null,null,null",
"sql": "gs_package_calc.calc_sus_day",
"compareType": "content",
"dbAssert": "a,3,null"
}
],
"ui": [
{
"refStep": 1,
"chkImages": "tzlc,perINfo"
}
]
}