smartpostHTTP 請求代理工具
該項(xiàng)目是一個(gè)HTTP請求代理工具,可以實(shí)現(xiàn)錄入請求信息管理,請求組合,將會(huì)自動(dòng)保存請求服務(wù)返回的cookie 當(dāng)組合多個(gè)請求的時(shí)候,如何請求返回的cookie信息將會(huì)在后面的請求中返回給服務(wù)端。 是為了方便給restful接口進(jìn)行測試而設(shè)計(jì)開發(fā)的。當(dāng)前只滿足基本功能,后續(xù)將會(huì)繼續(xù)再次基礎(chǔ)上面進(jìn)行完善。
已經(jīng)部署在 PaaS@OSC:http://smartpost.oschina.mopaas.com/
主要功能介紹
基礎(chǔ)信息的錄入
該部分功能主要是將請求信息錄入到smartpost中,錄入的信息包括http請求頭部信息,請求方式POST/GET以及請求的參數(shù)。
請求參數(shù)設(shè)置說明
smartpost對請求參數(shù)支持form表達(dá)提交的數(shù)據(jù),該參數(shù)是鍵值對的形式,如果是POST那么將會(huì)以key1=value1的形式提交到服 務(wù)器端,如果是GET形式,則鍵值對參數(shù)追加到請求地址后面。除了form表單參數(shù)提交外,還支持json,xml,html以及text的格式參數(shù)。如 果選中json,那么發(fā)送給服務(wù)器端的Content-type就是application/json;charset=UTF-8,依次類推:xml則 是application/xml;charset=UTF-8;text:text/plain;charset=UTF-8;html:text /html;charset=UTF-8。所以選中非form的參數(shù)類型以后,不需要再在header里面設(shè)置Content-type屬性,除非你有特 殊的需求。
場景
我們在開發(fā)過程中,一般為了調(diào)試一個(gè)接口,可能需要發(fā)起多個(gè)url請求,比如一個(gè)查看商品的流程:
1. 首先需要打開電商網(wǎng)站的首頁
2. 查看商品
這里涉及到至少兩個(gè)個(gè)url的請求(首頁,商品)。而且這兩個(gè)請求在smartpost里面可以組合成一個(gè)場景,可以叫做【查看商品】。你可以執(zhí)行該場景,那么將會(huì)依照設(shè)定的URL請求循序來執(zhí)行請求,并返回執(zhí)行結(jié)果。
smartpost在這里所做的只是一個(gè)請求的組合。但是這樣還不夠,可以看到上面上個(gè)請求存在一定的關(guān)系。我這里先假設(shè)這個(gè)電商網(wǎng)站的地址是(假設(shè)這個(gè)請求叫做request_index)
上面是個(gè)首頁的地址,打開首頁將會(huì)看到很多的商品。我們一般會(huì)選擇一個(gè)商品,我不如再假設(shè)該電商網(wǎng)站首頁布局是這樣的:
<!-- lang: html --> <html> <head> <title>首頁</title> </head> <body> <div id="items"> <div class="item"> <img src="xxxx.jpg"> <a href="item-1222.html"></a> </div> <div class="item"> <img src="xxxx.jpg"> <a href="item-1223.html"></a> </div> </div> </body> </html>
那么假設(shè)我選擇上面item-1222.html,在smartpost里面怎么做額? 只需要將這個(gè)請求定義為(假設(shè)這個(gè)請求叫做request_item)
http://www.smpmall.com/#{html:'#items .item a&[attr:href]'[0]}
當(dāng)這個(gè)請求發(fā)生在request_index之后,那么將會(huì)從request_index請求返回的html里面解析出item-1222.html這個(gè)內(nèi)容替換上面#{html:'#items .item a&[attr:href]'[0]}表達(dá)式。
這里就是smartpost的存在上下文的場景,這也是smartpost設(shè)定場景的必要性?;谶@個(gè),開發(fā)可以對整個(gè)業(yè)務(wù)流程進(jìn)行測試。下面將對上下文的占位符配置進(jìn)行描述:
引用占位符配置
smartpost的占位符配置主要分文幾個(gè)部分
#{type:'expression'[index][default:defaultvalue]}
其中type可以是:html,json,header,cookie
expression則是當(dāng)前類型的匹配規(guī)則,比如type為header的時(shí)候,此時(shí)的expression則是header中的key值
[index]是可選配置,表示如果通過expression匹配了多個(gè),則只取指定的第幾個(gè)
[defalut:defaultvalue]也是可選配置,表示當(dāng)沒有匹配到制定的expression的值時(shí),默認(rèn)值是多少
下面主要對各個(gè)類型的expression進(jìn)行描述
1、type為header時(shí)
這個(gè)上面已經(jīng)例舉了,當(dāng)type為header的時(shí)候,expression表示是header的key值,將會(huì)將key對應(yīng)的value替換該占位符
2、type為cookie時(shí)
和為header類似,只是從返回的cookie里面取值
3、type為json時(shí)
此時(shí)expression是一個(gè)JSONPATH表達(dá)式,具體規(guī)則可以到這里看看 https://github.com/jayway/JsonPath
4、type為html時(shí)
這里的expression包含兩個(gè)部分前面是一個(gè)css選擇器,用于指定html元素,另一個(gè)是這個(gè)元素的哪個(gè)值。所以是這個(gè)結(jié)構(gòu):cssselector&[text|val|attr:attrName]
關(guān)于前面的cssselector這里就不說了,應(yīng)該都知道,說一下后面的&[text|val|attr:attrName]
比如上面的#{html:'#items .item a&[attr:href]'[0]}表示#items .item a CSS選擇器匹配的元素第0個(gè)元素屬性為href的值。只有為attr的時(shí)候需要指定是哪個(gè)屬性的值。
