Appium 使用 appium 做自动化测试如何做到程序和数据分离?

董永 · 2016年03月04日 · 最后由 sky1900 回复于 2016年03月25日 · 2363 次阅读

使用 appium+java 进行自动化测试,之前一直用的方法都是在代码中写入相关的数据参数,听说可以通过读取 excel 中的数据进行测试,但是一直没有找到相关的资料,希望哪位大神可以指点一下!!

driver.findElementByName("最多 30 个字").sendKeys("111");

打个比方,如上面 sendkeys 中的参数一直是在程序中手动输入,如何获取已经在 excel 中写好的某个数据来直接执行测试用例,而不用每次都要自己手动写入。

共收到 19 条回复 时间 点赞

之前看过一些 java 的资料,难道是通过 poi 的方式来读取数据吗,那样是不是太麻烦了?

自己写个函数或者类去读文本的值不就行了。。

string getValue(int index)//通过序号获取值
 driver.findElementByName().sendKeys(get(1));

这样就可以通过循环来执行了

用 poi 是下下策,有一万种方法实现,第三方插件、框架、自定义、数据库、xml、json,推荐 json

testng 框架里, 有 dataProvider 和 factory

#2 楼 @m13890 不是 txt 文本的值,是 excel 表格里面的数据,你有范例吗,能让我借鉴一下吗?

#3 楼 @quqing json 不会用,你说的三方插件都有什么,能具体说一下吗?

我就路过来看看

自定义一个读取 excel 的类就好了啊

就用 poi, 然后封装一层,按需写一个想要的工具类,里面的方法全部接收简单参数。执行测试时根据行数列数,JSON 或者 ColumnName 和 rowId 取数据就可以了吧。

你看看https://testerhome.com/topics/3526,我按这个贴搞出来的。

#5 楼 @511594204 我只是随便练练 markdown。这个问题其实真的就像上面的人说的有很多办法,自己琢磨写写代码,不管是 xml,txt,csv 读起来都挺简单的。没事的时候就自己写写读写 xml 的类。。

#3 楼 @quqing 我也在尝试用 json,目前倒是可以做到数据分离,但是总觉得还不是特别的方便,尤其在管理数据方面,请问您能分享一下如何实现的么?

#13 楼 @cy_suncheng 1.定义存放测试数据的数据结构;
2.写个按数据结构解析 json,提取测试数据的类;
3.至于管理,git、svn、ftp。。。都可以管理 json 形式保存的测试数据;

董永 #15 · 2016年03月09日 Author

这个问题我已经解决了,现在把实现的代码展现一下,希望能帮助到大家,如果大家有更好的方法希望不吝赐教!

import io.appium.java_client.TouchAction;
import io.appium.java_client.android.AndroidDriver;
import java.util.Set;
import org.openqa.selenium.WebElement;
import org.testng.annotations.Test;
import java.io.File;
import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStream;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;

public class leizhong {
public AndroidDriver driver;

public leizhong(AndroidDriver driver){
this.driver=driver;
}
@Test

public void swpie() throws Exception{
//获取当前的混合应用类型,判断如果是 webview 跳转进入 webview
Set contextNames = driver.getContextHandles();
for(String contextName : contextNames){
System.out.println(contextName);
if(contextName.contains("WEBVIEW")){
driver=(AndroidDriver) driver.context(contextName);
}else{
System.out.println("no WEBVIEW");
}
}
Thread.sleep(2000);

driver=(AndroidDriver) driver.context("NATIVE_APP");
WebElement loginBtn=driver.findElementByName("社区");
loginBtn.click();
Thread.sleep(20000);
System.out.println("社区");

Thread.sleep(2000);
WebElement loginBtn1=driver.findElementByName("糖友锻炼");
loginBtn1.click();
System.out.println("糖友锻炼");;

Thread.sleep(2000);
try{
File file = new File("d:\test.xls");

InputStream in = new FileInputStream(file);
Workbook workbook = Workbook.getWorkbook(in);

Sheet sheet = workbook.getSheet(0);
int rowLength=sheet.getRows();
System.out.println(rowLength);
for(int i=1;i<rowLength;i++){
Thread.sleep(3000);
driver.findElementByXPath("//android.widget.ImageView[contains(@index,2)]").click();
Thread.sleep(2000);
WebElement title=driver.findElementByName("最多 30 个字");
Cell c10=sheet.getCell(0,i);
String strc10=c10.getContents();
System.out.println(strc10);
title.sendKeys(strc10);
Thread.sleep(20000);
Cell c21=sheet.getCell(1,i);
String strc21=c21.getContents();
System.out.println(strc21);
driver.findElementById("com.qshealthcare.qshc:id/activity_publish_new_main_title_content_et").sendKeys(strc21);
Thread.sleep(2000);
driver.findElementByName("发布").click();
Thread.sleep(1000);
}
}catch(Exception e){
System.out.println("failed!");
}

System.out.println("success");
}
}

#15 楼 @511594204 markdown..这样看真吃力

学习一下。非常感谢

可以使用 testng 自带的 dataProvider

同意 TestNG 自带的 DataProvider 测试可以支持 Excel CSV 数组等多种方式

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册