自动化测试框架Appium研究

17 Mar 2017

最近研究了Appium,一种自动化测试框架,测试一般的软件还是很有用的,
期间也发现一些问题,期待完善。
问题:
1.延迟方法不是很好用,看了网上的三种方式,都不是很好用。
2.不是很稳定,有时候找不到控件报错。

什么是Appium?
1,appium是开源的移动端自动化测试框架;
2,appium可以测试原生的、混合的、以及移动端的web项目;
3,appium可以测试ios,android和firefox os的应用;
4,appium是跨平台的,可以用在osx,windows以及linux桌面系统上;

查了些资料后,下面做写总结,以备查阅。

一、原理介绍

Appium框架中包含三个部分,客户端、服务端、被测软件。
客户端:编写测试代码(支持多种语言)。
服务端:接收客户端http请求,转换成统一指令。
被测软件:执行对应指令操作。

平台测试指令:
OS: Apple’s UIAutomation
Android 4.2+: Google’s UiAutomator
Android 2.3+: Google’s Instrumentation.

我研究的DEMO对应为:
客户端:Eclipse(Maven java Project)
服务端:Appium server
被测软件:Android studio

二、环境配置

1.Android studio
https://developer.android.com/studio/index.html
2.Eclipse(Maven Project)
类型:Eclipse IDE for Java Developers
https://www.eclipse.org/downloads/eclipse-packages/
3.Appium server
http://appium.io/downloads.html

三、代码编写

1.在Eclipse中新建Maven项目

New a maven project 在项目根目录下新建apps文件夹,然后把要测试的软件包放在目录下。

2.修改项目文件pom.xml

<dependency>
	<groupId>io.appium</groupId>
	<artifactId>java-client</artifactId>
	<version>5.0.0-BETA5</version>
</dependency>
在Appium Client Libraries中
查询最新仓库:(我选的是java)
http://appium.io/downloads.html

3.在src/test/java/{包名}/下新建测试文件

File classpathRoot = new File(System.getProperty("user.dir"));
//测试文件目录
File appDir = new File(classpathRoot, "apps");
//被测试软件
File app = new File(appDir, "base.apk");
DesiredCapabilities capabilities = new DesiredCapabilities();
//模拟器或真机名字
capabilities.setCapability("deviceName", "T8DDU15303001806");
//平台版本
capabilities.setCapability("platformVersion", "6.0");
capabilities.setCapability("app", app.getAbsolutePath());
//被测试软件包名
capabilities.setCapability("appPackage", "com.pulque.idcard");
//要启动的Activity
capabilities.setCapability("appActivity", ".IDCardActivity");
//通信地址(需跟服务器配置相匹配,一般不改)
driver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"),
 capabilities);
准备工作做好以后,开始编写测试代码。
//输入点击事件
//控件ID的获取通过
//在DDMS视图下,使用Dump view UI hierarchy for Automator
driver.findElementById("com.pulque.idcard:id/Bt_4").click();
//获取输入框控件,核对输入是否正确
WebElement el = driver.findElementById("com.pulque.idcard:id/enterET");
assertEquals("411722197508214014", el.getText());
//删除输入
WebElement el_del=driver.findElementById("com.pulque.idcard:id/Bt_delete");
for (int i = 0; i < 18; i++) {
	el_del.click();
}
//核对是否正确
System.out.println(el.getText());
assertEquals("18位中国身份证号码", el.getText());
测试结束后
driver.quit();

4.启动服务器

Start server

5.运行测试代码

四、参考资料

官网:
http://appium.io/
测试Demo:
https://github.com/pulque/AppiumTest
项目参考:
http://www.bilibili.com/video/av1731133/
https://my.oschina.net/outcat/blog/491529
https://testerhome.com/topics/1045
控件ID获取教程:
http://www.it610.com/article/1799448.htm

五、后续思考

我想应该可以在Android studio下直接编写测试代码的,
因为Android studio支持Junit和Maven,
这样就不用单独下载Eclipse了。
事实证明是可以的,详细参考:
http://bitbar.com/appium-tip-20-executing-appium-tests-with-gradle/
实践证明还是有很多问题的,最终放弃了。
报错Caused by: java.lang.ClassNotFoundException: org.apache.http.auth.Credentials
还有一点就是可能要加很多与项目无关的jar包,最后想了下还是分开比较好一点。

六、iOS实践

亲测下面这种流程可以测试app,具体就不重复了。
Appium 在 MAC 上搭建 appium1.6.3 过程
http://blog.csdn.net/wuxuehong0306/article/details/54377957