zoukankan      html  css  js  c++  java
  • [转]Robotium 数据驱动测试框架

    本文转自:http://www.cnblogs.com/morebetter/archive/2011/05/26/2058255.html

    refer to http://controlingquality.blogspot.com/2011/02/design-data-driven-framework-around.html

    被测试代码是简易计算器,代码: /Files/morebetter/android code/AndroidCalculator.rar

    1. 数据驱动测试架构

    • 测试数据源:TestData.csv

    First Value Second Value
    10 1.5
    20 3
    • 第一个输入框从First Value中读数据

    • 第二个输入框从Second Value中读数据

    • 点击Multiply

    • 比较测试结果和期望结果是否一致,将结果写到文件里

    2. 创建数据源文件

    格式如上图

    3. 把数据源文件上传到Emulator上

    1. 在被测试代码中创建res/raw/files文件夹。这样files文件夹就能被上传到Emulator上了

    2. 用Eclipse—Run As—Android Application 运行被测试代码

    3. 在Eclipse上加载DDMS,点击File Exploer,浏览Emulator-5554的所有文件

    image

    • 打开/data/data/com.calculator/files, 点击右侧上传到device的按钮,将csv文件上传到emulator上

    image

    4. 编辑测试case, 代码为:/Files/morebetter/android code/AndroidCalculatorTestApk.rar

    5. 运行测试case

    6. 将测试结果写到文件里,该文件存放在/data/data/com.calculator/files 下面

    7. 将测试结果导入到本地电脑中

    image

     就像作者说的,这个只是个简单的框架,大家可以根据自己的不同需求进行修改。 

    View Code
    package com.testcalculator;

    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Locale;

    import jxl.Cell;
    import jxl.Sheet;
    import jxl.Workbook;
    import jxl.WorkbookSettings;
    import jxl.read.biff.BiffException;
    import jxl.write.WritableSheet;
    import jxl.write.WritableWorkbook;

    import com.jayway.android.robotium.solo.Solo;    

    import android.content.Context;
    import    android.test.ActivityInstrumentationTestCase2;


    @SuppressWarnings(
    "unchecked")    
    public class TestCalculatorApk extends ActivityInstrumentationTestCase2
    {    

    private    static final String    TARGET_PACKAGE_ID="com.calculator";    
    private static final String    LAUNCHER_ACTIVITY_FULL_CLASSNAME="com.calculator.Main";    
    private    static Class<?>    launcherActivityClass;    
    Workbook wb;
    WritableWorkbook copy ;
    WritableSheet sheet ;
    Boolean FuntionResult 
    = false;
    Cell rowData[] 
    = null;
    private String[] FirstValue;
    private String[] SecondValue;
    private String[] ExpectedResult;
    int rowCount = '0';
    WorkbookSettings ws 
    = null;
    Workbook workbook 
    = null;
    Sheet s 
    = null;
    String[] TestResults;

    static{    
          
        
    try    
          {    
        launcherActivityClass
    =Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);    
          }    
    catch    (ClassNotFoundException e)    {    
          
    throw new RuntimeException("Class not found" +e);          
                              }          
        }     

    public TestCalculatorApk() throws    ClassNotFoundException    
      {    
        
    super(TARGET_PACKAGE_ID,launcherActivityClass);    
      }    
        
    private Solo solo;

    @Override    
    protected void setUp() throws Exception    
    {    
        solo 
    = new Solo(getInstrumentation(),getActivity());     
    }    

    public void    CanOpenSettings() 
        {    
            solo.pressMenuItem(
    0);    
        }

    public void testDisplayBlackBox() {
        getTestDataFile();
        TestResults 
    = new String[rowCount];
        
            
    for (int i = 1; i < rowCount; i ++ )
            {
                
    //Enter value in first editfield
                solo.enterText(0, FirstValue[i].toString());
                
                
    //Enter value in second editfield
                solo.enterText(1, SecondValue[i].toString());
            
                
    //Click on Multiply button
                solo.clickOnButton("Multiply");
            
                
    //Verify that resultant of first editfield and second editfield
                float First = Float.parseFloat(FirstValue[i].toString());
                
    float Second = Float.parseFloat(SecondValue[i].toString());
                
    float expectedResult = First*Second;
                
    //float expectedResult = Float.parseFloat(ExpectedResult[i].toString());
                float actualResult = Float.parseFloat(solo.getText(9).getText().toString());
                
                System.out.println(
    "Value in Resultant Field "+solo.getText(9).getText().toString());
                System.out.println(
    "Expected Value "+expectedResult);
                
                assertNotNull(solo.getText(
    9));
                assertEquals(
    "Values are not same", expectedResult, actualResult); 
                TestResults[i] 
    = "Pass";  
                    
                solo.clearEditText(
    0);
                solo.clearEditText(
    1);
            }
            writeResults(TestResults);
        }

    public void readTestData(InputStream fileInputStream) throws Exception {
        ws 
    = null;
        workbook 
    = null;
        s 
    = null;
        
        
    int columnCount = '0';
        
    int totalSheet = 0;
        String firstSheet 
    = "TestCases";
        String secondSheet 
    = "TestScenarios";

        
    try {
            ws 
    = new WorkbookSettings();
            ws.setLocale(
    new Locale("en""EN"));
            workbook 
    = Workbook.getWorkbook(fileInputStream, ws);

            totalSheet 
    = workbook.getNumberOfSheets();
            
    if(totalSheet > 0) {
                 
                    
    if (!workbook.getSheet(0).getName().equals(firstSheet))
                    {
                        System.out.println (
    "contents are not fine");
                    }
                    
                    
    if (!workbook.getSheet(1).getName().equals(secondSheet))
                    {
                        System.out.println (
    "contents are not fine");
                    }             
                }
            
            
    else 
                System.out.println (
    "There is not any sheet available.");
        
            s 
    = workbook.getSheet(1);
            
            rowCount 
    = s.getRows();
            FirstValue 
    = new String[rowCount]; //First Value array size
            SecondValue = new String[rowCount];//Second Value array size
            ExpectedResult = new String[rowCount]; 
            
            columnCount 
    = s.getColumns();
            rowData 
    = s.getRow(0);

            
    if (rowData[0].getContents().length() != 0)
            {
                
    for (int i =1; i < rowCount; i ++)
                {
                
                    rowData 
    = s.getRow(i);
                    
                    
    if (rowData[5].getContents().equals("Yes"))
                    {
                        System.out.println(
    "Executed: " + rowData[1].getContents());
                        FirstValue[i] 
    = rowData[2].getContents().toString();
                        SecondValue[i] 
    = rowData[3].getContents().toString();
                        ExpectedResult[i] 
    = rowData[4].getContents().toString();
                    }
                    
    else 
                    {
                        System.out.println(
    "We will skip "+rowData[1].getContents());
                    }
                }
                System.out.println(
    "Success");

            }            
            workbook.close();            
        } 
    catch (IOException e) {
            e.printStackTrace();
        } 
    catch (BiffException e) {
            e.printStackTrace();
        }
    }

    public void writeResults(String[] results) 
    {
        FileOutputStream outputStream 
    = null;   
        
        
    try{
            outputStream 
    = getActivity().openFileOutput("TestResultData.txt", Context.MODE_WORLD_READABLE);
            
            
    for (int i=0; i <results.length; i ++)
            {
            outputStream.write(results[
    1].toString().getBytes());
            }
            
            }
    catch (IOException e) {
                e.printStackTrace();
            }
    finally {
                    
    if (outputStream != null) {
                    
    try {
                        outputStream.flush();
                        outputStream.close();
                    } 
    catch (IOException e) {
                        e.printStackTrace();}
                        }
            }
        }

    public void getTestDataFile()
    {
         FileInputStream fs 
    = null;
            
    try {    
                fs 
    = getActivity().openFileInput("TestData.csv");
                readTestData(fs);
                
            } 
    catch (IOException e) {
                e.printStackTrace();
            } 
    catch (Exception e) {
                e.printStackTrace();
            }
            
    finally {
                
    try {
                    fs.close();
                } 
    catch (IOException e) {
                    e.printStackTrace();
                }
            }    
    }

    @Override    
    public void    tearDown() throws Exception    
      {    
        
    try    
            {    
            solo.finalize();    
            }    
      
    catch    (Throwable    e)    
      {    
          e.printStackTrace();    
      }    
          getActivity().finish();    
          
    super.tearDown();    
      }

    }
  • 相关阅读:
    UVA 10003:Cutting Sticks 区间DP
    UVAlive 10154:Dire Wolf 区间DP
    HDU 5071:Chat(2014 Asia AnShan Regional Contest)
    HDU 5074:Hatsune Miku(2014 Asia AnShan Regional Contest)
    android 代码混淆及问题大集锦
    android调试bug集锦 onActivityResult立即返回,并且被CANCEL
    开启g++ 编辑器 c++11特性
    解析最简单的验证码
    将图片文件转换为.py文件
    使用pyinstaller 2.1将python打包并添加版本信息和图标
  • 原文地址:https://www.cnblogs.com/freeliver54/p/2129343.html
Copyright © 2011-2022 走看看