關于數據型驅動自動化測試實現

發表于:2016-11-17來源:segmentfault作者:最光陰89點擊數: 標簽:
在ui自動化測試過程中,目前存在最大的缺陷就是如果產品的ui或者結構改了那么這個項目進行的自動化測試腳本可能要面臨全面維護。這也是目前ui自動化面臨的很讓人崩潰的事情。

在ui自動化測試過程中,目前存在最大的缺陷就是如果產品的ui或者結構改了那么這個項目進行的自動化測試腳本可能要面臨全面維護。這也是目前ui自動化面臨的很讓人崩潰的事情。因此現在很多互聯網產品項目發現ui自動化在測試中的價值越來越小,因為互聯網產品的迭代太快,自動化測試組往往剛剛完善了自動化腳本,項目也跑起來了。突然來了項目大改版,崩潰啊,這意味這代碼要重新進行維護,而且維護成本很高??赡芫S護完了產品需求又改了,往往跟不上腳步。因此我UI自動化比較適合以下兩種情況的項目:1.產品原型趨于穩定階段,2.手機固件項目(因為手機固件是在原生安卓上修改的,原生安卓的的系統構架通常短時間內很少會做重大改版,即使小改動也是一年一次)。
以前我們的自動化項目都是趨于關鍵字驅動,數據和代碼是揉雜在一起的。我們寫自動化測試用例的流程大概是這樣的(以魅族社區發帖舉例子只走流程不包括斷言):點擊發帖按鈕—輸入標題—輸入正文—點擊發送按鈕
代碼如下:
UiObject write_title=new UiObject(new UiSelector().resourceId("com.meizu.mzbbs:id/et_write_title"));

//assertTrue("write_title focusable is false", write_title.isFocused()==true);
Configurator config = Configurator.getInstance();
config.setKeyInjectionDelay(40);
write_title.setText(Utf7ImeHelper.e(“帖子標題”));
sleep(2000);
UiObject richet_post=new UiObject(new UiSelector().resourceId("com.meizu.mzbbs:id/richet_posts"));
richet_post.click();
sleep(2000);
//assertTrue("richet_post focusable is false", richet_post.isFocused()==true);
richet_post.setText(Utf7ImeHelper.e(“帖子正文”));
config.setKeyInjectionDelay(0);
sleep(2000);
UiObject send_post=new UiObject(new UiSelector().resourceId("com.meizu.mzbbs:id/action_send_posts"));
send_post.clickAndWaitForNewWindow(3000);
sleep(3000);

這樣測試流程走通了,但是如過遇到以下問題1.resourceId改變了或者控件名稱改變了(uiautomator也可以用控件名稱定位控件)這就意味著我需要在代碼中修改這些控件資源id或者name了。2.原始流程是A-B-C這種固定流程,萬一流程中添加了F步驟變成A-F-B-C了,意味著在中間要插入一段代碼,在無數行代碼中找到這段代碼然后插入,這樣一定是很麻煩的而且還要調試。3.如果這個功能不要了意味著這些幸幸苦苦寫的代碼就白寫了。相信以上問題都是大家在自動化測試實踐過程中所到很蛋疼的問題。這也是為什么現階段大家越來越對ui自動化持懷疑態度了,進而轉向接口自動化的原因,因為隨著產品的持續迭代維護成本越來越高。

原文轉自:https://segmentfault.com/a/1190000007494058

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97