Appium For Android and IOS By Java

来源:互联网 发布:淘宝香水嗅觉系真假 编辑:程序博客网 时间:2024/05/21 17:23

目录:

  1. 前言
  2. 项目介绍
  3. 项目结构
  4. 如何编写一个Case
  5. Android Example
  6. IOS Example
  7. 总结

一. 前言
自动化测试趋势近几年也越来越火了,在APP泛滥的时代,对APP进行自动化测试也备受测试人员追捧,我也不例外。

二. 项目介绍
项目名称:YYAPPAutomation
名称介绍:有鱼股票APP自动化
项目功能:对有鱼股票APP Android版本和IOS版本进行自动化测试
项目依赖:APPIUM(http://appium.io/)
项目框架:Java + Maven + Testng + Python脚本

三. 项目结构
这里写图片描述

文件目录介绍:

  1. apps文件夹:安放Android apk和IOS ipa
  2. python文件夹: 安放Python文件,用shell调用python进行安装apk或ipa文件、注册脚本、检查是否注册脚本等
  3. resources-android文件夹:安放Android testng xml
  4. resources-ios文件夹:安放IOS testng xml
  5. screenshot文件夹: 安放失败截图.jpg
  6. src文件夹: 测试代码
  7. target文件夹:
  8. test-output文件夹:安放测试报告

测试代码:
这里写图片描述

文件目录介绍:

  1. debug文件夹:编写调试代码
  2. flow文件夹:编写测试场景
  3. listener文件夹:编写监听器,如:重写测试报告、单个Case执行失败后会进行retry,进行重试的次数可配置
  4. page文件夹:编写单个页面所有元素,即获取元素
  5. service文件夹:编写单个页面所有元素的相关事件,如:点击、获取元素显示文字
  6. testcase文件夹:编写测试用例
  7. util文件夹:公共文件夹,编写静态方法,如:获取appium连接、shell脚本执行、正则匹配APP显示数据的正确性等

EX. Page文件夹:
这里写图片描述

获取Appium连接:

/*** 连接APPIUM SERVER* * @param url* @param port* @param propertyFileName* @return* @throws MalformedURLException*/@SuppressWarnings("rawtypes")public static AppiumDriver getDriver(String url, String port, String device, String udid, String env) throws MalformedURLException {        File classpathRoot = new File(System.getProperty("user.dir"));        DesiredCapabilities capabilities = null;        if (device.equals("ios")) {            File propertyFile = new File(classpathRoot.getAbsolutePath() + "//resources-ios/based.properties");            capabilities = getBasedCapabilities(propertyFile);            if(env.equalsIgnoreCase("beta")) {                capabilities.setCapability("app", classpathRoot.getAbsolutePath() + "//apps//RuiFuTech_Beta.ipa");            }            if(env.equalsIgnoreCase("live")) {                capabilities.setCapability("app", classpathRoot.getAbsolutePath() + "//apps//RuiFuTech_Live.ipa");            }            return new IOSDriver(new URL("http://" + url + ":" + port + "/wd/hub"), capabilities);        }else if (device.equals("android")) {            capabilities = getBasedCapabilities(new File(classpathRoot, "//resources-android//based.properties"));            if(env.equalsIgnoreCase("beta")) {                packageName = capabilities.getCapability("appPackage").toString() + ".debug";                capabilities.setCapability("appPackage", packageName);                capabilities.setCapability("app", classpathRoot.getAbsolutePath() + "//apps//RuiFuTech_Beta.apk");            }            if(env.equalsIgnoreCase("live")) {                packageName = capabilities.getCapability("appPackage").toString();                capabilities.setCapability("app", classpathRoot.getAbsolutePath() + "//apps//RuiFuTech_Live.apk");            }             capabilities.setCapability("udid", udid);                  return new AndroidDriver(new URL("http://" + url + ":" + port + "/wd/hub"), capabilities);        }else {            return null;    }   }

查看一下Android的based.properties

platformName=AndroidplatformVersion=4.4.2deviceName=5LM0216111012735appPackage=com.ruifusoft.finance.appappActivity=com.ruifusoft.ui.SplashActivityunicodeKeyboard=trueresetKeyboard=true

查看一下IOS的based.properties

appium-version=1.0platformName=iOSplatformVersion=9.3deviceName=iPhone 5s

四. 如何编写一个Case
第一步:开启Appium Android服务
第二步:Android开启android-sdk tool下的uiautomatorviewer进行抓取元素(resourceId形式)/IOS开启Appium inspector进行抓取元素(Xpath形式)
第三步:将抓取的元素写入Page文件夹相应地方
第四步:在Service文件夹相应创建对应Page的service文件,对元素进行点击事件编写和获取文字编写,输入框数据文字方法编写等
第五步:在Flow文件夹创建测试场景,如:注册测试场景 registerFlow,将注册相关联的页面进行调用Service层的方法进行测试场景构建
第六步:在TestCase文件夹创建相应的测试用例,调用写好的registerFlow

五. Android Example
备注:待续…

六. IOS Example
备注:待续…

七. 总结
“路漫漫其修远兮 吾将上下而求索”自动化APP测试尚未技术成熟,在写APP自动化的过程中也发现了很多难处(如:测试场景无法全部覆盖,一些case需要和外部提供数据进行联调测试、自动化测试场景写多了执行的时间会越来越长、Android机型过多,对于自动化代码需要编写适配、IOS是每对一个元素进行操作就获取一次整个页面数据,导致某个页面数据过多的页面,下面的页面无法很多的获取到,甚至有时候获取不到导致case失败)需要一个一个的测试人员去探索发现解决方案,分享出来,从而提高自动化测试技术的发展。

整个项目文档:百度网盘

欢迎加QQ群 -> 阳台测试 -> 239547991(群号)

0 0
原创粉丝点击