多测师是一家拥有先进的教学理念,强大的师资团队,业内好评甚多的接口自动化测试培训机构!

17727591462

联系电话

您现在所在位置:接口自动化测试培训 > 新闻资讯

Selenium之如何监听断言-自动化测试

更新时间:2022-04-25 09:27:31 作者:多测师 浏览:173

  一.概述

  测试用的执行通过与否,需要对比期望结果和实际结果的值,因此在自动化测试中我们需要进行断言来获得执行的结果,那么如果在执行的过程中有异常,该怎么办呢,我们是否要查看异常信息呢,于是乎如何得到我们所需要的异常信息成为我们需要思考的问题,该怎么解决呢,其实so eazy!tesgNG的测试用例监听器可以帮助我们解决这个问题。

Selenium之如何监听断言-自动化测试

  二.监听断言类AssertionListener

  1 public class AsserttionListener extends TestListenerAdapter{

  2

  3 private Log log=new Log(this.getClass());

  4

  5 @Override

  6 public void onTestStart(ITestResult result) {

  7 // TODO Auto-generated method stub

  8 Assertion.begin();

  9 }

  10

  11 @Override

  12 public void onTestFailure(ITestResult tr) {

  13 // TODO Auto-generated method stub

  14 this.handleAssertion(tr);

  15 }

  16

  17 @Override

  18 public void onTestSkipped(ITestResult tr) {

  19 // TODO Auto-generated method stub

  20 this.handleAssertion(tr);

  21 }

  22

  23 @Override

  24 public void onTestSuccess(ITestResult tr) {

  25 // TODO Auto-generated method stub

  26 this.handleAssertion(tr);

  27 }

  28

  29 private int index;

  30

  31 private boolean isNew=false;

  32

  33 /**

  34 * 得到测试类所需的测试异常信息

  35 * @param tr

  36 */

  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 }

  60

  61 /**

  62 * 得到测试类需要的StackTraceElement数组

  63 * @param tr

  64 * @param e

  65 * @param throwable

  66 * @param alltrace

  67 * @return

  68 */

  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 }

  79

  80 /**

  81 * 根据测试类名获得该测试类的StackTraceElement数组

  82 * @param tr

  83 * @param stackTraceElements

  84 * @return

  85 */

  86 private StackTraceElement[] getKeyStackTrace(ITestResult tr,StackTraceElement[] stackTraceElements){

  87 Listets=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 }

  100

  101 /**

  102 * 合并两个StackTraceElement数组

  103 * @param trace1

  104 * @param trace2

  105 * @return

  106 */

  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 {

  2

  3 public static Log log=new Log(Assertion.class);

  4

  5 public static boolean flag=true;

  6

  7 public static Listerrors=new ArrayList();

  8

  9 public static void begin(){

  10 flag=true;

  11 }

  12

  13 public static void end(){

  14 Assert.assertTrue(flag);

  15 }

  16

  17 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 }

  25

  26 public static void verifyEquals(Object actual, Object expected, String message){

  27 try{

  28 Assert.assertEquals(actual, expected, message);

  29 log.info("方法验证成功!");

  30 }catch(Error e){

  31 errors.add(e);

  32 flag = false;

  33 log.info("方法验证失败!");

  34 }

  35 }

  36

  37 }

  以上内容为大家介绍了自动化测试中的Selenium之如何监听断言,本文由多测师亲自撰写,希望对大家有所帮助。了解更多自动化测试相关知识:https://www.aichudan.com/xwzx/

联系电话

17727591462

返回顶部