目前互聯(lián)網(wǎng)金融火的一塌糊涂,基于互聯(lián)網(wǎng)金融平臺(tái)的自動(dòng)化測(cè)試的項(xiàng)目也是如火如荼的進(jìn)行。筆者手頭上負(fù)責(zé)一個(gè)p2p項(xiàng)目的測(cè)試框架開發(fā),因此如何設(shè)計(jì)一套有效的測(cè)試框架也成為工作所需和互相交流測(cè)試經(jīng)驗(yàn)的必須。
這個(gè)網(wǎng)站的后臺(tái)主要是php和java, 也就是說,一些基礎(chǔ)的服務(wù),如充值提現(xiàn),投標(biāo)起息還款,是采用spring mvc的框架來寫的,然后php來調(diào)用java的API,java平臺(tái)通過intercepter將php 傳遞過來的http請(qǐng)求映射到對(duì)應(yīng)的controller,controller再通過map映射到對(duì)應(yīng)的服務(wù)和實(shí)現(xiàn)。
簡(jiǎn)單來說網(wǎng)站框架就類似如下:
網(wǎng)站一些基本的業(yè)務(wù)如注冊(cè)登錄,用戶中心,投資、紅包等等由用戶前臺(tái)觸發(fā)php調(diào)用,一些活動(dòng)、紅包、禮品券等等由后臺(tái)觸發(fā)php調(diào)用,充值提現(xiàn)投資起息還款由java平臺(tái)實(shí)現(xiàn)。
基于這樣的平臺(tái)的自動(dòng)化測(cè)試框架選型的時(shí)候,筆者考慮過以下幾種:
一種是采用基于selenium,集成thinkphp的框架來寫。主要的原理就是利用selenium的firefox插件來錄制,頁面上的html元素和javascript腳本,然后做2次封裝將這些錄取到的元素和js封裝成一個(gè)個(gè)的標(biāo)準(zhǔn)對(duì)象,保存到標(biāo)準(zhǔn)對(duì)象庫,然后再添加一些數(shù)據(jù)庫的數(shù)據(jù)準(zhǔn)備和數(shù)據(jù)清理函數(shù),以及數(shù)據(jù)庫增刪改查語句。
然后在引擎腳本中,引用和調(diào)用這些對(duì)象的方法,類似如edit,type等等,然后就在頁面跳轉(zhuǎn)的時(shí)候加上馭循環(huán)和一些判斷,檢測(cè)頁面元素的值是否存在,或者是檢測(cè)一些方法返回值,或者是采用斷言來處理數(shù)據(jù)庫查詢到的結(jié)果和頁面上返回的結(jié)果做匹對(duì),可以在以selenium為基本的框架的時(shí)候,引入thinkPHP或者YII框架加快開發(fā)腳本速度。
另外一種是采用QTP方式來使用,其基本原理也和采用selenium原理大同小異,唯一的差別就是QTP提供了一個(gè)很好和強(qiáng)大的基本類庫,以及一個(gè)很好的對(duì)象識(shí)別機(jī)制obeject Spy,QTP的基本類庫里面基本什么都有,java,.net, web,乃至于dephi……
在識(shí)別對(duì)象的時(shí)候可以直接通過java里面的類來映射,也可以直接用web相關(guān)類庫里面的類,甚至是windows平臺(tái)類……QTP提供了多種識(shí)別方式以幫助定位對(duì)象,這樣只用修改少量的對(duì)象屬性,在回放腳本和編輯核心代碼的時(shí)候,就可以起到事半功倍的效果,但是QTP也有缺點(diǎn),就是對(duì)于Js的處理不方便,還有就是時(shí)刻需要啟動(dòng)QTP,而不能和一些開源測(cè)試框架特別是java開源項(xiàng)目,來實(shí)現(xiàn)自動(dòng)部署測(cè)試用例和自動(dòng)打包的集成。
ruby +watir 的原理和selenium也是類似,也是一種基于WEB GUI的自動(dòng)化測(cè)試框架,筆者研究甚少,也就不多言了。
但是由于p2p行業(yè)的特性,這些基于web的自動(dòng)化測(cè)試框架有很多不適合的地方,跟投資充值提現(xiàn)相關(guān)的這些相關(guān)的功能,比較在乎的不僅僅是頁面上的一些元素功能的顯示,更關(guān)心的是這個(gè)數(shù)據(jù)的正確性。
如果采用基于GUI的方式做自動(dòng)化測(cè)試,個(gè)人感覺針對(duì)頁面元素的識(shí)別和校驗(yàn)往往并不能反映數(shù)據(jù)正確性,而在處理頁面元素異常的時(shí)候,也往往無法針對(duì)復(fù)雜業(yè)務(wù)邏輯和數(shù)據(jù)做較強(qiáng)的處理和效益,而且GUI是模擬人工處理,在執(zhí)行效率上面,也是效果較差,而且如果出現(xiàn)某個(gè)頁面元素?zé)o法識(shí)別或者異常,有可能中斷整個(gè)頁面的處理,在分析代碼覆蓋率的時(shí)候,基于web的方式也不是那么容易分析。
目前的這個(gè)項(xiàng)目,java向PHP平臺(tái)提供的主要是基于HTTP協(xié)議的restful應(yīng)用,之所以采用restful,而不用webservice來處理傳輸數(shù)據(jù)相關(guān),是因?yàn)閣ebservice即便是采用json而不是xml來處理傳輸數(shù)據(jù),相比較restful也顯得較重,json還需要加密解密解析、序列化什么的,而在 restful 里面直接就可以通過 http 請(qǐng)求對(duì)資源進(jìn)行操作。
因此筆者覺得還是從controller層直接進(jìn)行接口測(cè)試比較直接有效,又考慮到 spring框架里面提供了mock http請(qǐng)求的方法,而web UI的正確性相對(duì)于后臺(tái)業(yè)務(wù)數(shù)據(jù)正確性的優(yōu)先級(jí)就沒有那么高了,而spring的測(cè)試框架里面雖然可以通過斷言controller層返回的ModleAndView對(duì)象校驗(yàn)controller的正確性,即通過接口測(cè)試來效益結(jié)果,但是如果controller層后面的對(duì)象 太多的話,一旦出現(xiàn)問題也不便于排錯(cuò)。
因此基本的測(cè)試框架思路就是采用spring mvc提供的mock restful的工具類,然后引入斷言機(jī)制和數(shù)據(jù)庫處理,來逐個(gè)controller分析業(yè)務(wù)邏輯的正確性和數(shù)據(jù)正確性。而sping MVC本身也提供了一套測(cè)試框架,可以通過服務(wù)端測(cè)試和客戶端測(cè)試分別來測(cè)試。
服務(wù)端測(cè)試在使用spring mvc測(cè)試框架之前,可能采取類似如下代碼:
@Test
public void serverSample() {
MockHttpServletRequest request = new MockHttpServletRequest();
ModelAndView mav = new sampleController.function(parameters);
ModelAndViewAssert.assertViewName(mav, user/view);
ModelAndViewAssert.assertModelAttributeAvailable(mv, user);
}
}
采用服務(wù)器端測(cè)試后,可以采用如下兩種方法:
standalone:
public class ServerTest {
@Autowired
private MockMvc mockMvc;
@Before
public void init() {
SampleController sample = new SampleController();
mockMvc = MockMvcBuilders.standaloneSetup(SampleController).build();
}
}
?? 集成:
public class ServerTest {
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Before
public void init() {
mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
}
}
? 測(cè)試:
@Test
public void testSample() throws Exception {
MvcResult result = mockMvc.perform(MockMvcRequestBuilders.get(/user/1))
.andExpect(MockMvcResultMatchers.view().name(user/view))
.andExpect(MockMvcResultMatchers.model().attributeExists(user))
.andDo(MockMvcResultHandlers.print())
.andReturn();
Assert.assertNotNull(result.getModelAndView().getModel().get(user));
}
以上是采用spring MVC的服務(wù)端測(cè)試方法,至于客戶端則有幾種方法,
1.通過jetty啟動(dòng)容器,真實(shí)映射到controller層實(shí)現(xiàn);
2.使用spring boot測(cè)試
3.使用mock service server測(cè)試,第三種方式基本上屬于使用resttemplate來測(cè)試客戶端比較好的方法;
即先通過MockRestServiceServer創(chuàng)建RestTemplate的Mock Server,然后添加客戶端請(qǐng)求斷言,判斷客戶端請(qǐng)求的斷言是否正確,3、添加服務(wù)端響應(yīng),檢查服務(wù)器端相應(yīng)是否正確。
客戶端相關(guān)代碼在網(wǎng)絡(luò)上也有很多資源,因此也就不再贅敘,這里主要是提供一種基于spring mvc框架和基于restful應(yīng)用如何測(cè)試controller層的思想。
最后感謝每一個(gè)認(rèn)真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:【保100%免費(fèi)】
軟件測(cè)試面試小程序
被百萬人刷爆的軟件測(cè)試題庫?。?!誰用誰知道!??!全網(wǎng)最全面試刷題小程序,手機(jī)就可以刷題,地鐵上公交上,卷起來!
涵蓋以下這些面試題板塊:
1、軟件測(cè)試基礎(chǔ)理論 ,2、web,app,接口功能測(cè)試 ,3、網(wǎng)絡(luò) ,4、數(shù)據(jù)庫?,5、linux
6、web,app,接口自動(dòng)化 ,7、性能測(cè)試?,8、編程基礎(chǔ),9、hr面試題 ,10、開放性測(cè)試題,11、安全測(cè)試,12、計(jì)算機(jī)基礎(chǔ)文章來源:http://www.zghlxwxcb.cn/news/detail-638167.html
文檔獲取方式:
這份文檔和視頻資料,對(duì)于想從事【軟件測(cè)試】的朋友來說應(yīng)該是最全面最完整的備戰(zhàn)倉(cāng)庫,這個(gè)倉(cāng)庫也陪伴上萬個(gè)測(cè)試工程師們走過最艱難的路程,希望也能幫助到你!以上均可以分享,點(diǎn)下方小卡片領(lǐng)取。??文章來源地址http://www.zghlxwxcb.cn/news/detail-638167.html
到了這里,關(guān)于銀行軟件測(cè)試:基于互聯(lián)網(wǎng)金融平臺(tái)的測(cè)試框架設(shè)計(jì)與分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!