首页 文章 精选 留言 我的

精选列表

搜索[android things],共10000篇文章
优秀的个人博客,低调大师

Android渠道包自动化验证

随着产品发布越来越快,渠道包越来越多,渠道包自动化验证重要性逐渐凸显出来,需要将大把的人力从中解放出来,且避免人工失误造成的验证不完全; 最近客户端产品尝试使用渠道包 自动化测试 的方法,这里说说我们目前的做法; 需求:验证渠道包的 渠道号、使用到的URL地址,以及简单冒烟; 一、验证渠道号 三个方法,根据产品自身的情况而定; 1. 通过反编译apk包获得 渠道号 说明:apk的 res/xml下存放渠道号信息,如存放在 channel.xml文件里 (1)使用apktool工具,反编译apk,从 channel.xml中取出 该包的渠道号; (2)从apk文件名称截取出渠道号; 两两进行对比; 2. 从logcat获取渠道号信息 说明:客户端启动时,打印渠道号信息 (1)启动客户端,从logcat日志中,截取出渠道号; (2)从apk文件名截取出渠道号; 两两进行对比; 具体渠道号信息如何存放,可以同项目组进行讨论商定。 3.(1)编写 单元测试 用例(可以用athrun框架),读取出渠道号;启动客户端,通过命令执行该 测试用例 ,即可获得渠道号 (2)从apk文件名截取出渠道号;两两进行对比; 二、URL地址验证 两个方法,类似签名的渠道号验证:通过反编译获得URL,或者通过启动客户端时,截取logcat日志获得; 当然事先要准备期望的URL地址列表; 验证URL的目的,是因为,发布apk使用的现网地址与测试环境地址是不同的,要确保打出的各渠道包的URL地址使用是否正确。 三、简单冒烟 目的:验证各渠道包基本功能是否可用,根据实际情况写脚本; 下面介绍2个方法: 1. 使用monkeyrunner验证简单功能; 2. 通过athrun编写的测试用例执行,但该方法不一定对所有产品试用,如果渠道包的代码经过混淆,那么无法使用; 其实如果项目组里的自动化做得比较好的话,这里的冒烟脚本可以直接使用日常使用的冒烟脚本 最新内容请见作者的GitHub页:http://qaseven.github.io/

优秀的个人博客,低调大师

iOS及Android自动化实践

App:网易看游戏(Xone) 工具:appium 1.0 Appium 1.0较以往的版本有了比较大的变化。 1.xpath路径改变 Before:/window[1]/navigationBar[1]/button[4] Current://UIAApplication[1]/UIAWindow[1]/UIANavigationBar[1]/UIAButton[4] 2.Capability参数名称改变 Before: desiredCapabilities.setCapability(CapabilityType.PLATFORM, "iOS"); desiredCapabilities.setCapability(CapabilityType.VERSION, "7.0"); Current: desiredCapabilities.setCapability("platformVersion", "7.0");desiredCapabilities.setCapability("platformName", "iOS"); 3.Appium客户端UI变化(提供更丰富的参数选择) 4.稳定性提供,客户端未崩溃过。 等等 接下来简单讲下具体实践过程吧 1.项目结构,如图 page:获取UI元素类 test:用例类,即测试类 util:封装大部分的公共方法 assertion:断言类 以testng框架为基础,ant编译执行,实现了每日构建运行。 2.编码,贴下通行证登录模块的代码,供参考 测试类:PassportLogin public class PassportLogin extends BaseTest { private static Logger log = Logger.getLogger(PassportLogin.class); @DataProvider(name = "passportLoginData") public static Object[][] passportLoginData() { return new Object[][] { { "正确的网易通行证登录", "xxxxx@163.com", "xxxxx", "" }, { "非网易账号的网易通行证登录", "xxx@qq.com", "xxxx", "" }, { "网易通行证登录,密码错误", "xxxx@163.com", "xxx", "用户名或密码错误" }, { "不输入账号和密码", "", "", "用户名不能为空" }, { "不输入密码", "xxx@163.com", "", "密码不能为空" }, { "不输入账号", "", "xxxx", "用户名不能为空" }, { "错误的网易通行证登录", MyRandom.getRandomString(10) + "@163.com", MyRandom.getRandomString(6), "用户名或密码错误" } }; } @BeforeClass public void setUp() { driver = new Orange(); mainPage = new MainPage(driver); account = new Account(driver); as = new AssertSettings(driver); usPage = new UserSettingsPage(driver); homePage = new HomePage(driver); mainPage.enterMainPage(); mainPage.enterLogin(); account.logoutTrue(); } @AfterClass public void tearDown() { driver.quit(); } @AfterMethod public void end() throws InterruptedException { log.info("-------------------------------------------------------------------"); } @Test(dataProvider = "passportLoginData") public void passportLoginTest(String testName, String passport, String password, String errorCode) throws InterruptedException { log.info("测试内容:" + testName); mainPage.enterLogin(); account.login(passport, password); if (errorCode != "") { boolean b = as.assertLogin(errorCode); driver.sleep(3000); mainPage.flickToRight(); mainPage.closePage(); Assert.assertTrue(b); } else { mainPage.enterLogin(); homePage.settingsClick(); usPage.passportClick(); account.logout(); } } } 由于涉及到了多个page,这里只贴部分Page类,如Account类,用于获取登录操作 public class Account extends BasePage { /** * @Title: Account * @Description: TODO * @param @param driver * @throws */ public Account(Orange driver) { super(driver); // TODO Auto-generated constructor stub } /** * @Title: login * @Description: TODO * @param @param driver * @return void * @throws */ public void login() { driver.clickOnElement(By.name("网易通行证登录")); driver.sendKeys(By.xpath("//UIAApplication[1]/UIAWindow[1]/UIATextField[1]"), PropertiesHandle.readValue("passport_2")); driver.sendKeys(By.xpath("//UIAApplication[1]/UIAWindow[1]/UIASecureTextField[1]"), PropertiesHandle.readValue("password")); driver.clickOnElement(By.xpath("//UIAApplication[1]/UIAWindow[1]/UIAButton[1]")); } /** * @Title: login * @Description: TODO * @param @param driver * @param @param passport * @param @param password * @return void * @throws */ public void login(String passport, String password) { driver.clickOnElement(By.name("网易通行证登录")); driver.sendKeys(By.xpath("//UIAApplication[1]/UIAWindow[1]/UIATextField[1]"), passport); driver.sendKeys(By.xpath("//UIAApplication[1]/UIAWindow[1]/UIASecureTextField[1]"), password); driver.clickOnElement(By.xpath("//UIAApplication[1]/UIAWindow[1]/UIAButton[1]")); } /** * @Title: login * @Description: TODO * @param @param type * @param @param passport * @param @param password * @return void * @throws */ public void login(String type, String passport, String password) { driver.clickOnElement(By.name(type)); driver.sendKeys(By.xpath("//UIAApplication[1]/UIAWindow[1]/UIATextField[1]"), passport); driver.sendKeys(By.xpath("//UIAApplication[1]/UIAWindow[1]/UIASecureTextField[1]"), password); driver.clickOnElement(By.xpath("//UIAApplication[1]/UIAWindow[1]/UIAButton[1]")); } /** * @Title: login * @Description: TODO * @param @param type * @return void * @throws */ public void login(String type) { driver.clickOnElement(By.name(type)); } /** * @Title: logout * @Description: TODO * @param @param driver * @return void * @throws */ public void logout() { driver.clickOnElement(By.name("退出当前帐号")); driver.clickOnElement(By.name("确定")); } } 主要的公共类:Orange,主要借鉴了孔庆云同学已经封装好的方法,并进行一些改进后直接使用,方便快捷。 目前Appium已经到了1.1版本,这款自动化工具还是不错的,跨平台,跨语言支持都比较好,稳定性也在逐步提升。 最新内容请见作者的GitHub页:http://qaseven.github.io/

优秀的个人博客,低调大师

Android测试提升效率批处理脚本

前言: APP测试过程中,经常需要用的一些命令,如adb,每次敲命令,虽可以加深印象,但个人认为那即繁琐又浪费时间。本文贴出一些我使用的批处理,以及一点点小小技巧。 目录 1、[查看APK文件信息.bat] 2、[自动安装APK.bat] 1、[查看APK文件信息.bat] @ECHO OFF ECHO [查看APK包信息] ECHO ------------------------------- ECHO aapt dump badging %~nx1 aapt dump badging %1 > %~dp0%~n1.txt ECHO [暂停3秒自动关闭...] ping -n 3 127.0.0.1>nul @ECHO ON 使用方法:将APK直接拖至bat文件上即可,信息保存在bat所在目录下的txt文件里 2、[自动安装APK.bat] @ECHO OFF ECHO [安装APK] ECHO ------------------------------- ECHO [等待插入手机...] adb wait-for-device ECHO [安装] %~nx1 adb install -r %1 ECHO [暂停5秒自动关闭...] ping -n 5 127.0.0.1>nul @ECHO ON 使用方法:将APK直接拖至bat文件上即可 最新内容请见作者的GitHub页:http://qaseven.github.io/

优秀的个人博客,低调大师

如何设计Android App测试用例

在当今竞争激烈的市场上一个APP的成功离不开一个可靠的用户界面(UI)。因此,对功能和用户体验有一些特殊关注和照顾的UI的全面 测试是必不可少的。当涉及到安卓平台及其提出的独特问题的数量(安卓就UI提出显著挑战)时,挑战变得更加复杂。关键字“碎片化”象征着 移动应用全面测试的最大障碍,还表明了发布到市场上的所有形态、大小、配置类型的安卓设备所引起的困难。本文将介绍安卓模拟器如何能通过使用一些技巧和简单的实践提供覆盖大量设备类型的广泛测试。 简介—分散装置里的测试 一般安卓开发者在其日常 工作中面临的最大挑战之一是:终端设备和 操作系统版本的范围太广。OpenSignal进行的一项研究表明,2013年7月市场上有超过11,828的不同安卓终端设备,所有设备在类型/大小/屏幕分辨率以及特定配置方面有所不同。考虑到前一年的调查仅记录有3,997款不同设备,这实在是一个越来越大的挑战障碍。 图1.11,828 款安卓设备类型( OpenSignal研究, 2013年7月[ 1 ] )分布 从一个移动APP开发角度出发,定义终端设备有四个基本特征: 1.操作系统:由“API指标”( 1 ?18 )专业定义的安卓操作系统版本( 1.1? 4.3 ),。 2.显示器:屏幕主要是由屏幕分辨率(以像素为单位),屏幕像素密度( 以DPI为单位),和/或屏幕尺寸(以英寸为单位)定义的。 3.CPU:该“应用程序二进制接口” (ABI )定义CPU的指令集。这里的主要区别是ARM和基于Intel的CPU。 4.内存:一个设备包括内存储器( RAM)和Dalvik 虚拟存储器( VM堆)的预定义的堆内存。 这是前两个特点,操作系统和显示器,都需要特别注意,因为他们是直接由最终用户明显感受,且应该不断严格地被测试覆盖。至于安卓的版本, 2013年7月市场上有八个同时运行导致不可避免的碎片的不同版本。七月,近90%这些设备中的34.1 %正在运行Gingerbread版本( 2.3.3-2.3.7 ),32.3 %正在运行Jelly Bean( 4.1.x版),23.3 %正在运行Ice Cream Sandwich( 4.0.3 - 4.0.4 )。 图2.16款安卓版本分布(OpenSignal研究,2013年7月[1]) 考虑设备显示器,一项TechCrunch从2013年4月进行的研究显示,绝大多数(79.9%)有效设备正在使用尺寸为3和4.5英寸的“正常”屏幕。这些设备的屏幕密度在“MDPI”(160 DPI),“hdpi”(240 DPI)和“xhdpi”(320 DPI)之间变化。也有例外, 一种只占9.5%的设备屏幕密度低“hdpi”(120 DPI)且屏幕小。 图3. 常见的屏幕尺寸和密度的分布( 谷歌研究,2013年4月)[2] 如果这种多样性在质量保证过程中被忽略了,那么绝对可以预见:bugs会潜入应用程序,然后是bug报告的风暴,最后 GooglePlay Store中出现负面用户评论。因此,目前的问题是:你怎么使用合理水平的测试工作切实解决这一挑战?定义 测试用例及一个伴随测试过程是一个应付这一挑战的有效武器。 用例—“在哪测试”、“测试什么”、“怎么测试”、“何时测试”? “在哪测试” 为了节省你测试工作上所花的昂贵时间,我们建议首先要减少之前所提到的32个安卓版本组合及代表市场上在用的领先设备屏的5-10个版本的显示屏。选择参考设备时,你应该确保覆盖了足够广范围的版本和屏幕类型。作为参考,您可以使用OpenSignal的调查或使用 手机 检测的信息图[3],来帮助选择使用最广的设备。 为了满足好奇心,可以从安卓文件[5]将屏幕的尺寸和分辨率映射到上面数据的密度(“ldpi”,“mdpi”等)及分辨率(“小的”,“标准的”,等等)上。 图4.多样性及分布很高的安卓终端设备的六个例子(手机检测研究,2013年2月)[3] 有了2013手机检测研究的帮助,很容易就找到了代表性的一系列设备。有一件有趣的琐事:30%印度安卓用户的设备分辨率很低只有240×320像素,如上面列表中看到的,三星Galaxy Y S5360也在其中。另外,480×800分辨率像素现在最常用(上表中三星Galaxy S II中可见)。 “测试什么” 移动APP必须提供最佳用户体验,以及在不同尺寸和分辨率(关键字“响应式设计”)的各种智能手机和平板电脑上被正确显示(UI测试)。与此同时,apps必须是功能性的和兼容的(兼容性测试),有尽可能多的设备规格(内存,CPU,传感器等)。加上先前获得的“直接”碎片化问题(关于安卓的版本和屏幕的特性), “环境相关的”碎片化有着举足轻重的作用。这种作用涉及到多种不同的情况或环境,其中用户正在自己的环境中使用的终端设备。作为一个例子,如果网络连接不稳定,来电中断,屏幕锁定等情况出现,你应该慎重考虑压力测试[4]和探索性测试以确保完美无错。 图5. 测试安卓设备的各个方面 有必要提前准备覆盖app最常用功能的所有可能的测试场景。早期bug检测和源代码中的简单修改,只能通过不断的测试才能实现。 “怎么测试” 将这种广泛的多样性考虑在内的一种务实方法是, 安卓模拟器 - 提供了一个可调节的工具,该工具几乎可以模仿标准PC上安卓的终端用户设备。简而言之,安卓模拟器是QA流程中用各种设备配置(兼容性测试)进行连续回归测试(用户界面,单元和集成测试)的理想工具。探索性测试中,模拟器可以被配置到一个范围广泛的不同场景中。例如,模拟器可以用一种能模拟连接速度或质量中变化的方式来设定。然而,真实设备上的QA是不可缺少的。实践中,用作参考的虚拟设备依然可以在一些小的(但对于某些应用程序来说非常重要)方面有所不同,比如安卓操作系统中没有提供程序特定的调整或不支持耳机和蓝牙。真实硬件上的性能在评价过程中发挥了自身的显著作用,它还应该在考虑了触摸硬件支持和设备物理形式等方面的所有可能终端设备上进行测试(可用性测试)。 “何时测试” 既然我们已经定义了在哪里(参考设备)测试 ,测试什么(测试场景),以及如何( 安卓模拟器和真实设备)测试,简述一个过程并确定何时执行哪一个测试场景就至关重要了。因此,我们建议下面的两级流程: 1 .用虚拟设备进行的回归测试。 这包括虚拟参考设备上用来在早期识别出基本错误的连续自动化回归测试。这里的理念是快速地、成本高效地识别bugs。 2 .用真实设备进行的验收测试。 这涉及到:“策划推广”期间将之发布到Google Play Store前在真实设备上的密集测试(主要是手动测试),(例如,Google Play[ 5 ]中的 alpha和beta测试组) 。 在第一阶段,测试自动化极大地有助于以经济实惠的方式实现这一策略。在这一阶段,只有能轻易被自动化(即可以每日执行)的测试用例才能包含在内。 在一个app的持续开发过程中,这种自动化测试为开发人员和测试人员提供了一个安全网。日常测试运行确保了核心功能正常工作,app的整体稳定性和质量由测试数据透明地反映出来,认证回归可以轻易地与最近的变化关联。这种测试可以很轻易地被设计并使用SaaS解决方案(如云中的TestObject的UI移动app测试)从测试人员电脑上被记录下来。 当且仅当这个阶段已被成功执行了,这个过程才会在第二阶段继续劳动密集测试。这里的想法是:如果核心功能通过自动测试就只投入测试资源,使测试人员能够专注于先进场景。这个阶段可能包括测试用例,例如性能测试,可用性测试,或兼容性测试。这两种方法相结合产生了一个强大的移动apps质量保证策略[ 7 ] 。 结论 - 做对测试 用正确的方式使用,测试可以在对抗零散的安卓的斗争中成为一个有力的工具。一个有效的测试策略的关键之处在于定义手头app的定制测试用例,并定义一个简化测试的工作流程或过程。测试一个移动app是一个重大的挑战,但它可以用一个结构化的方法和正确的工具集合以及专业知识被有效解决掉。 最新内容请见作者的GitHub页:http://qaseven.github.io/

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册