自动化测试框架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项目
在项目根目录下新建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.启动服务器
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