Selenium之如何監聽斷言
08-13
Selenium之如何監聽斷言
推薦閱讀:
來自專欄自動化測試5 人贊了文章
一.概述
測試用的執行通過與否,需要對比期望結果和實際結果的值,因此在自動化測試中我們需要進行斷言來獲得執行的結果那麼如果在執行的過程中有異常,該怎麼辦呢,我們是否要查看異常信息呢,於是乎如何得到我們所需要的異常信息成為我們需要思考的問題,該怎麼解決呢,其實so eazy!tesgNG的測試用例監聽器可以幫助我們解決這個問題。二.監聽斷言類AssertionListener1 public class AsserttionListener extends TestListenerAdapter{2
3 private Log log=new Log(this.getClass());45 @Override6 public void onTestStart(ITestResult result) {7 // TODO Auto-generated method stub8 Assertion.begin();9 }1011 @Override12 public void onTestFailure(ITestResult tr) {
13 // TODO Auto-generated method stub14 this.handleAssertion(tr);15 }1617 @Override18 public void onTestSkipped(ITestResult tr) {19 // TODO Auto-generated method stub20 this.handleAssertion(tr);21 }22
23 @Override24 public void onTestSuccess(ITestResult tr) {25 // TODO Auto-generated method stub26 this.handleAssertion(tr);27 }2829 private int index;3031 private boolean isNew=false;32
33 /**34 * 得到測試類所需的測試異常信息35 * @param tr36 */37 private void handleAssertion(ITestResult tr){38 Throwable throwable=tr.getThrowable();39 if(!Assertion.flag||throwable!=null){40 if(throwable==null){41 throwable=new Throwable();
42 isNew=true;
43 }44 StackTraceElement[] alltrace=new StackTraceElement[0];45 for (Error e : Assertion.errors) {46 alltrace=this.getAllStackTraceElement(tr, e, null, alltrace);47 }48 if(!isNew){49 alltrace=this.getAllStackTraceElement(tr, null, throwable, alltrace);50 }else{51 isNew=false;52 }
53 throwable.setStackTrace(alltrace);54 tr.setThrowable(throwable);55 Assertion.flag=true;56 Assertion.errors.clear();57 tr.setStatus(ITestResult.FAILURE);58 }59 }6061 /**62 * 得到測試類需要的StackTraceElement數組
63 * @param tr64 * @param e65 * @param throwable66 * @param alltrace67 * @return68 */69 private StackTraceElement[] getAllStackTraceElement(ITestResult tr,Error e,Throwable throwable,StackTraceElement[] alltrace){70 StackTraceElement[] traces=(e==null?throwable.getStackTrace():e.getStackTrace());71 StackTraceElement[] et=this.getKeyStackTrace(tr, traces);72 String msg=(e==null?throwable.getMessage():e.getMessage());
73 StackTraceElement[] message=new StackTraceElement[]{new StackTraceElement("message : "+msg+" in method : ",tr.getMethod().getMethodName(),tr.getTestClass().getRealClass().getSimpleName(),index)};74 index=0;75 alltrace=this.merge(alltrace, et);76 alltrace=this.merge(alltrace, message);77 return alltrace;78 }7980 /**81 * 根據測試類名獲得該測試類的StackTraceElement數組82 * @param tr
83 * @param stackTraceElements84 * @return85 */86 private StackTraceElement[] getKeyStackTrace(ITestResult tr,StackTraceElement[] stackTraceElements){87 List ets=new ArrayList();88 for (StackTraceElement stackTraceElement : ets) {89 if(stackTraceElement.getClassName().equals(tr.getTestClass().getName())){90 ets.add(stackTraceElement);91 index=stackTraceElement.getLineNumber();92 }93 }94 StackTraceElement[] et=new StackTraceElement[ets.size()];95 for (int i = 0; i < et.length; i++) {96 et[i]=ets.get(i);97 }98 return et;99 }100101 /**102 * 合併兩個StackTraceElement數組103 * @param trace1104 * @param trace2105 * @return106 */107 private StackTraceElement[] merge(StackTraceElement[] trace1,StackTraceElement[] trace2){108 StackTraceElement[] ste=new StackTraceElement[trace1.length+trace2.length];109 for (int i = 0; i < trace1.length; i++) {110 ste[i]=trace1[i];111 }112 for (int i = 0; i < trace2.length; i++) {113 ste[trace1.length+i]=trace2[i];114 }115 return ste;116 }1 public class Assertion {23 public static Log log=new Log(Assertion.class);45 public static boolean flag=true;67 public static List errors=new ArrayList();89 public static void begin(){10 flag=true;11 }1213 public static void end(){14 Assert.assertTrue(flag);15 }1617 public static void verifyEquals(Object actual, Object expected){18 try{19 Assert.assertEquals(actual, expected);20 }catch(Error e){21 errors.add(e);22 flag = false;23 }24 }2526 public static void verifyEquals(Object actual, Object expected, String message){27 try{28 Assert.assertEquals(actual, expected, message);29 http://log.info("方法驗證成功!");30 }catch(Error e){31 errors.add(e);32 flag = false;33 http://log.info("方法驗證失敗!");34 }35 }3637 }推薦閱讀:
※走進現代傢具生產線,自動化程度讓人感嘆
※銷售團隊應該實現自動化5個工作流程
※厲害了,上海港!洋山四期今天開港,成全球最大的自動化集裝箱碼頭!
※智能製造離不開的機器視覺
※ATE自動化測控設備開發實用技術指南(三)