好久没发过帖子了,在狂沙大神的指导下完成了 appium 关键字驱动自动化测试,可能设计方法有所缺陷,欢迎指正,另外尤其是断言方面欠缺比较多。

设计思路

1、将 appium 的关键字存放在 excel 表中。
2、然后通过 jxl 读取 excel 表的关键字进行元素查找、执行等相关动作。
3、测试相关数据存放在 excel 另一 sheet 表中,主表和子表根据测试用例 ID 号进行关联。
4、用例断言只要是采用截图对比以及元素文本获取对比的方式。
5、最后将断言结果写在 excel 相应的表格中。

先贴张 excel 的布局图吧!

接下来还是贴代码吧!

excel 表关键字获取

File file = new File("e:\\data.xls");   //采用的是jxl.jar读取写入表格方式
    InputStream in = new FileInputStream(file);  //新建一可读取本地内容的文件
    Workbook workbook = null;
    workbook = Workbook.getWorkbook(in);  //获取本地可读取的文件
    mworkbook =  workbook;
    Sheet sheet0 = mworkbook.getSheet(0);   //获取第一个sheet表
    int rowLength0 = sheet0.getRows();  

    for(int k=0;k<2;k++){ //测试用例执行的遍数
        for(int i=1;i<rowLength0;i++){
            Cell FI = sheet0.getCell(5, i);  //获取sheet0表的第i行第5列
            String strFI = FI.getContents();  //获取该单元格的内容
            mstrFI = strFI;
          //  定位方式

            Cell GI = sheet0.getCell(6, i);
            String strGI = GI.getContents();   
            mstrGI = strGI;
           // 测试对象实体

            Cell HI = sheet0.getCell(7, i);
            String strHI = HI.getContents();
            mstrHI = strHI;
          //  操作方法  

            Cell AI = sheet0.getCell(0, i);
            String strAI = AI.getContents();
            mstrAI = strAI;
         //  测试用例ID

            Cell II = sheet0.getCell(8, i);
            String strII = II.getContents();
            mstrII = strII;

读取子表的测试数据

if(parameter.equals(mstrII)){      
  // System.out.println(i); 
   Sheet sheet1 = mworkbook.getSheet(1);   
   msheet1=sheet1;
   int rowLength1 = sheet1.getRows();
   for(int n=1;n<rowLength1;n++){
       Cell AJ = sheet1.getCell(0, n);  
       String strAJ_1 = AJ.getContents(); 
       String strAJ = parameter_1 + ":" + strAJ_1;
       if(strAJ.equals(mstrII)){   //根据测试用例ID将主表的测试用例与子表的测试数据进行关联
           m =n;
           int j;
           j=m+k;  //获取下一轮对应测试用例ID号的行值,K为执行测试用例的遍数
           mj=j;
           System.out.println("j"+j); 

           //如下为将j的行值存到list中,然后判断list中数据,如果元素相当则执行getsunlist(),如果不相当,则释放list,然后将参数初始化,并重新将数据添加到list中
           mList.add(j);  
           if (mList.size() > 1) { 
               for (int ii=0;ii<mList.size();ii++) {
                   for (int iii=ii+1;iii<mList.size();iii++) {
                       if (mList.get(iii) != mList.get(ii)){
                           // System.out.println("不等于");
                            mList.clear(); 
                            mList.add(j);
                            a=2;
                          // return;
                       }
                       break;  
                   }
               }
               getSublist();

           }
           else if (mList.size() == 1) {                            
               getSublist();
           }
           break;  //每读取完一次子表的测试数据后即跳出子表,回到主表继续寻找控件并执行相关动作
       } 
       else{
           continue;  //如果在子表没找到对应的测试ID号,则continue继续查找
       }
   }

将断言结果写入对应的表格位置

     //如下方法是将子表中各字段的断言结果存到list中有进行布尔运算后存到子表对应位置
     boolean b1= result1.equals("true") ? true : false;    //将子表string的值转换成布尔值
     mListC.add(b1);
     boolean b2=true;
     for(int c=0;c<mListC.size();c++){
         if(mListC.get(c)==false){
             b2=false;
         }
         else{
             b2=true;
         }   
     }
    String strb2;
    strb2 = String.valueOf(b2);
    sheet1_1.addCell(new Label(1,mj,strb2)); 
}

else{
    Thread.sleep(500);   
    getActions(mstrHI,null,driver);  //null为空测试数据,获取元素的执行动作
    getResult(driver);   //根据控件不同的执行动作做不同的断言方式
    sheet0_1.addCell(new Label(9+k,i,result));   //将相应的断言结果插入到主表对应的位置


↙↙↙阅读原文可查看相关链接,并与作者交流