使用appium同时支持iOS和android的case结构及jenkins job配置

之前我们大多数的case branch,仅能支持iOS,或者android。若想两端都做自动化,只能写两份代码。了解了appium及testng后,我们在自动化中开始尝试使用同一套代码,即支持iOS,又支持Android。希望此种方式能提高我们的自动化开发效率。

1.case代码支持

1.1 业务case部分

如果iOS和android对同一功能的操作交互类似,我们就可以使用同一套业务case代码。appium对iOS和Android系统的操作接口基本是一致的。若不一致,可使用driver instanceof IOSDriver 或 driver instanceof AndroidDriver 来进行分支判断。

举例:

public void login() throws Exception{
	//此处iOS与Android app上的交互不同,所以做了不同处理。
        if(driver instanceof IOSDriver) {
            loginPage.getOtherWayToLogin().click();
            loginPage.getBtnUsePassword().click();
        }

        Assert.assertTrue(loginPage.setPhone(TestData.account),"无法输入正确电话");

        if(driver instanceof AndroidDriver){
            loginPage.getBtnNext().click();
            loginPage.getBtnUsePassword().click();
        }

        getAutomationUtil().setValue(loginPage.getEdtxtPassword(), TestData.password);
        loginPage.getBtnLogin().click();

        Assert.assertTrue(loginPage.getMenuButton() != null,"疑似登录未成功");
    }

  

1.2 page类

业务case里使用的元素,都依赖page类来识别。使用appium提供的注释方式,写起代码来较为简洁。举例:

public class LoginPage extends BasePage{

    @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"xxx:id/xxxx\")")
    @iOSXCUITFindBy(accessibility = "同意")
    private MobileElement btnPrivacyRuleAgree;

    @iOSXCUITFindBy(accessibility = "使用其它方式登录")
    private MobileElement otherWayToLogin;

    public MobileElement getOtherWayToLogin() {
        return otherWayToLogin;
    }

    public MobileElement getBtnPrivacyRuleAgree() {
        return btnPrivacyRuleAgree;
    }

    ...
}

public class BasePage {
    public BasePage(AppiumDriver<WebElement> driver) {
        //appium通过此代码支持注释方式定位元素
        PageFactory.initElements(new
                AppiumFieldDecorator(driver, new TimeOutDuration(30, TimeUnit.SECONDS)), this);
    }
    ...
}

  

2. testng支持

2.1 testng case相关配置

  • testng可将case分成不同的组,每次根据suit的配置来运行指定的case group。
  • 可通过dependsOnGroups表示依赖关系,如必须先运行ios_login分组的case后,才能运行ios_case组的case。
  • 可通过priority来决定同一分组里的case的优先级。数值越大,越先运行;不指定,则默认值为0;值相同的case的运行先后顺序,由testng决定。
@Test(groups = {"ios_login","adr_login"})
public void login() throws Exception{...}

@Test(groups = "adr_login",priority = 1)
public void getUuidTest() {...}

@Test(enabled = true,groups = "ios_case",dependsOnGroups = "ios_login")
public void testXXXX(){...}

  

2.2 testng suit配置

testng可在suit配置文件中指定要运行的分组。例子中,指定运行三个分组。

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Android-All">
    <test name="android">
        <groups>
            <run>
                <include name="android_login"/>
                <include name="android_cases"/>
                <include name="android_logout"/>
            </run>
        </groups>
        <packages>
            <package name="com.HHHH.autotest.cases"/>
        </packages>
    </test>
</suite>

  

3. jenkins job支持

单个branch若只支持ios或android,使用的app.properties和testng suit配置可使用case里相应的文件内容。但通过jenkins 在公司的自动化平台上运行自动化,app.properties文件已被公司的自动化平台改写仅需传入部分配置。为支持同一branch可测两端,testng suit配置也需要我们在运行自动化改写。我们可以在jenkins上重写这两个文件。

3.1 重写app.properties 和 testng.xml

在command里, YYYY 为job的名字。iOS只用传platformName和automationName;android只用传platformName和appActivity。

create_app_properties(){
    if [ $platform == ‘iOS‘ ];then
        `echo -e "platformName = iOS\nautomationName = XCUITest" > app.properties`
        `mv app.properties YYYY`

        `echo -e "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<suite name=\"iOS-All\">\n<test name=\"ios\">\n<groups>\n<run>\n<include name=\"ios_login\"/>\n<include name=\"ios_cases\"/>\n<include name=\"ios_logout\"/>" > testng.xml`
        `echo -e "</run>\n</groups>\n<packages>\n<package name=\"com.HHHH.autotest.cases\"/>\n</packages>\n</test>\n</suite>" >> testng.xml`
        `mv testng.xml YYYY`

    else
        `echo -e "platformName = Android\nappActivity=com.HHHH.main.activity.MainSplashActivity" > app.properties`
        `mv app.properties YYYY`

        `echo -e "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<suite name=\"Android-All\">\n<test name=\"android\">\n<groups>\n<run>\n<include name=\"android_login\"/>\n<include name=\"android_cases\"/>\n<include name=\"android_logout\"/>" > testng.xml`
        `echo -e "</run>\n</groups>\n<packages>\n<package name=\"com.HHHH.autotest.cases\"/>\n</packages>\n</test>\n</suite>" >> testng.xml`
        `mv testng.xml YYYY`
}

  

原文地址:https://www.cnblogs.com/sunada2005/p/9132970.html

时间: 2024-10-05 05:01:44

使用appium同时支持iOS和android的case结构及jenkins job配置的相关文章

OGEngine发布跨平台版本,支持iOS及Android

OGEngine v2.1.1拓展了跨平台,支持iOS平台和Android平台,我们现在来搭建下开发环境.注意,由于iOS版本的编译开发必须在Mac系统上,所以我们的部署也是在Mac环境下进行的. 1. 检查系统 建议系统版本在 v10.8.5以上 2. 安装Xcode 建议5.1.1以上版本 可打开AppStore下载,程序较大2.3G大小,时间可能较长. 安装完后可以确认下是否安装成功:打开Xcode,新建一个工程,在模拟器上运行确认. 3. 搭建Java环境 Java版本要求1.7以上.

移动端证件识别支持ios、android

应用背景 移动端证件是别是基于移动平台的证件识别应用程序,支持Android.iOS等多种主流移动操作系统.该产品采用手机.平板电脑摄像头拍摄证件图像,然后通过OCR软件对证件信息进行识别提取. 特色功能 支持180度.90度自动旋转功能:支持复杂背景(如将证件拿在手中)裁边:支持自动倾斜校正功能,提高识别率:识别结果后处理,对识别结果增加规则,提高识别率. 功能介绍 通过拍照界面,指导用户拍出合格证件图像.采用文字识别(OCR)技术,自动提取证件信息(如姓名.证件号码.地址等)及头像.识别证件

编辑美化图片,保存至本地,Adobe出品(支持IOS,android,web调用)免费插件

本例以web调用做为例子,本插件支持主流浏览器,IE要9以上,移动设备,触屏设备也支持,能自适应屏幕大小. 使用效果: 工具还是很丰富的,编辑完成之后,可以保存图片至本地目录. 使用说明: 1,需要在线注册账号,申请apikey,地址:https://creativesdk.adobe.com/docs/web,这个apikey在代码调用时需要.这里也有详细的api文档,其他功能请参考文档说明,不过文档是英文的. 2,要编辑的图片必须有固定的地址,可以被网络访问到. 示例源代码,以web调用为例

Adobe出品(支持IOS,android,web调用)免费插件编辑图片

<head runat="server"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>    <title>图片编辑</title>    <script src="js/jquery-1.7.2.js"></script>    <script src=&q

触控鼠标 (使用手机控制电脑,支持IOS,android.OSx 和windows)进入初步推广阶段

这款应用主要是用于使用手机控制电脑,几乎涉猎全平台(android 和 ios,windows 和os x),其实在1个月之前已经上线了,一直也比较忙,也就没有对这个应用进行一个系统的介绍和推广,今天就先写篇博文对这款应用进行一下系统的介绍和推广.从开始有一个开发自己的app 到有了这个开发思路,再到最后的app store 上线大概用了2个半月吧.因为是个人开发所以大部分都是用晚上和周末的时间做的,所以开发周期也就比较长点了. 从网站,到电脑服务端再到android 和iphone 手机端,完

【iOS开发】封装聊天输入框MKInputBar,语音支持iOS &amp; Android平台

最近做的一个项目,有聊天的功能,最开始从网上找了个被人封装好的输入框,写的很复杂(反正我有点被看迷糊了),用起来呢又有点问题,最终放弃,自己封装了一个聊天输入框MKInputBar,难度不大.语音支持iOS和Android平台,其实就是把caf转换为mp3.底部给出了Demo工程,用起来很简单. 先上几张图吧       用法很简答,封装好只有两个文件MKInputBar.h & MKInputBar.m,实现三个代理方法: 1 - (void)inputBar:(MKInputBar *)in

Visual Studio 2015 预览版 - 支持跨平台开发Android/iOS应用程序(内置安卓模拟器)

微软最近的惊人举动真多,对普通消费者Office 移动版宣布免费,对开发者也发布了完全免费的 VS2013 社区版! 不仅如此,就连 .Net 开发框架环境也竟然「开源」并且跨平台支持 Mac 及 Linux 了!! 同时宣布的 Visual Studio 2015 和 .Net 2015 预览版均也开放下载了.作为微软跨平台新战略下的开发工具, VS2015 支持开发人员编写跨平台应用程序,从 Windows 到 Mac.Linux.甚至是编写 iOS 和 Android 代码! 此外,微软还

iConvert Icons 图标转换生成利器,支持Windows, Mac OS X, Linux, iOS,和Android等系统

这是一款在线图标转换工具,生成的图标支持Windows, Mac OS X, Linux, iOS, 和 Android等主流系统. 可以上传图标文件转化成另一个平台下的图标文件,例如将windows系统下的icon图标格式转换成mac os下的icns图标格式,也可以通过上传图片从而生成你指定平台下的图标格式文件.例如上传png文件转换成windows系统下的icon图标文件. 官网在线应用地址:iConvert Icons 其也有app可供下载,但要付费. 原创文章,转载请注明: 转载自 h

支持WEB、Android、IOS的地图解决方案

转自原文 支持WEB.Android.IOS的地图解决方案 工具链 GIS工具集 OpenGeo Suite 包含PostGIS, GeoServer, GeoWebCache, OpenLayers, 和 QGIS 地图准备 QGIS 导入.导出.编辑.shp,postgis,geotiff,geojson,dxf等多种GIS文件,给普通图片配准到地理坐标 教程:http://www.qgistutorials.com/en/ DraftSight 编辑CAD文件 SketchUp   从CA