• Robotframework-Appium系列:登录操作


    之前Appium的环境已经配置完成(参考Robotframework-Appium系列:安装配置),接下来就是如何使用Appium来完成我们的apk的测试工作。

    一、环境准备

    所需的软件列表如下

    • Robotframework
    • Appium
    • Android模拟器--夜神模拟器
    • 测试的apk文件
    • uiautomatorviewer:apk软件定位工具

    启动上述列出的软件,如截图所示

    • RobotFramework打开界面如图所示

    • Appium配置界面和启动界面如图所示

    说明

    1. 未启动显示的是三角形,启动之后变为正方形

    2. 测试的应用程序的路径

    3. 测试的应用程序的包名以及activity名,在路径输入之后,会自动显示,不用修改,使用默认

    4. 测试apk的平台和使用的工具,这里选择的是Android6.0,Appium工具

    • Appium启动成功界面如图所示

    • Android模拟器--夜神模拟器,如图所示

    在第一次使用夜神模拟器的时候,会自动安装Appium Settings和Unlock两个工具;apk文件可以直接拖到夜神模拟器中,模拟器会自动安装。

    • uiautomatorviewer:apk软件定位工具,本机启动位置和截图如图所示

    二、RobotFramework关键字封装

    uiautomatorviewer定位apk元素

    安装apk完成之后,打开需要测试的apk,点击图标所示1,定位元素如图

    说明

    1. 图标1处,打开apk后,点击此处可以定位当前页面中的所有元素信息

    2. 图标2处,定位的用户名的具体元素定位

    项目结构和library以及resource的导入

    项目结构如图所示

    关键字封装

    接下来就是关键字封装,在robotframework中首先需要打开测试的应用程序,打开应用程序的关键字封装代码如下

    打开应用程序
    Open Application    http://192.168.8.170:4723/wd/hub    platformName=Android
    platformVersion=6.0.0    deviceName=192.168.8.170:62001
    app=F:\test\mis.apk
    appPackage=com.xxx.xxx
    ...    appActivity=com.xxx.xxx.atys.StartAty    unicodeKeyboard=True    resetKeyboard=True
    

    界面如图所示

    打开应用程序之后,就需要定位我们刚刚使用uiautomatorviewer工具定位的登陆用户名,具体代码如下

    输入用户名
    [Arguments]    ${username}
    AppiumLibrary.wait until page contains element    id=com.xxx.xxx:id/username
    AppiumLibrary.input text    id=com.xxx.xxx:id/username    ${username}
    

    这样,登陆的用户名的关键字已经封装好了,在下次使用的时候可以直接使用封装好的关键字-输入用户名即可。

    三、登陆流程

    关于登陆页面的关键字封装完成之后,接下来就是登陆流程的梳理,针对测试apk,登陆的步骤如下:

    • 打开应用apk程序
    • 在欢迎页面中点击开始
    • 输入登陆的用户名
    • 输入登陆的密码
    • 点击登陆
    • 跳过新手指引

    根据登陆的流程,接下来就是针对已经封装好的关键字进行流程的操作,代码如下:

    登录成功
    打开应用程序
    点击开始
    截图    login
    输入用户名    ${username}
    输入密码    ${password}
    点击登录
    截图    login
    跳过新手指引
    截图    login
    

    四、断言

    而对于一个测试用例而已,最重要的就是断言,而针对登陆成功的断言,我们只需要判断登陆的用户名和我们输入的用户名是否一致,如果一致则登陆成功,否则登陆失败。
    而apk中登陆的用户名定位需要先进入个人中心,所以封装的关键字如下

    进入个人中心
    appiumLibrary.click element    id = com.xxx.xxx:id/txt_more1
    
    获取登录的用户名
    ${getLoginName}    appiumLibrary.get text    id = com.xxx.xxx:id/tvName
    [Return]    ${getLoginName}
    

    那么接下来就是断言,在robotframework这里使用should contain关键字断言,代码如下

     #断言
    进入个人中心
    ${getLoginName}    获取登录的用户名
    BuiltIn .should contain    ${username}    ${getLoginName}
    

    注意

    • 此处的关键字should contain使用的是Builtln包,所以需要加上包名

    五、集成jenkins执行用例

    之前偶然发现集成工具jenkins,使用一段时间之后,发现它的功能竟这么强大,基本上我们想要实现的集成都可以通过jenkins集成完成操作,省去了一系列麻烦的操作。

    目前接触的更新测试环境的代码、接口postman和jmeter都可以使用jenkins工具进行集成构建,对于公司长期的项目进行定时构建,并且发送测试结果给指定的负责人。这样早上来到公司就可以直接看到测试结果。而对于多次迭代的项目测试,不仅提高了工作效率,相对而言也节省了成本。

    具体的配置,可以参考:RobotFrameWork自动化系列:安装配置,具体配置截图所示

    jenkins运行结果展示

    邮件提醒和文件配置可以参考:JMeter接口测试系列:Jmeter+jenkins+ant 的自动化构建
    这里集成结果会发送到指定的邮箱中,这样我们就可以根据测试结果提bug到bug管理系统了。

    封装的所有关键字代码展示如下

    打开应用程序
    Open Application    http://192.168.8.170:4723/wd/hub    platformName=Android 
    platformVersion=6.0.0    deviceName=192.168.8.170:62001
    app=F:\test\mis.apk
    appPackage=com.xxx.xxx
    ...    appActivity=com.xxx.xxx.atys.StartAty    unicodeKeyboard=True    resetKeyboard=True
    
    切换服务器
    #切换登录服务器
    AppiumLibrary.click element    id = com.xxx.xxx:id/login_iv_icon
    AppiumLibrary.click element    id = com.xxx.xxx:id/login_iv_icon
    AppiumLibrary.click element    id = com.xxx.xxx:id/login_iv_icon
    AppiumLibrary.click element    id = com.xxx.xxx:id/login_iv_icon
    AppiumLibrary.click element    id = com.xxx.xxx:id/login_iv_icon
    AppiumLibrary.click element    id=com.xxx.xxx:id/login_rela_login
    
    截图
    [Arguments]    ${ScreenName}
    AppiumLibrary.Capture Page Screenshot    ${ScreenName}
    
    输入用户名
    [Arguments]    ${username}
    AppiumLibrary.wait until page contains element    id=com.xxx.xxx:id/username
    AppiumLibrary.input text    id=com.xxx.xxx:id/username    ${username}
    
    输入密码
    [Arguments]    ${password}
    AppiumLibrary.input text    id=com.xxx.xxx:id/pwd    ${password}
    
    点击登录
    AppiumLibrary.click element    id=com.xxx.xxx:id/login
    
    跳过新手指引
    AppiumLibrary.click element    id = com.xxx.xxx:id/jump_over
    
    点击监测统计
    AppiumLibrary.click element    id = com.xxx.xxx:id/txt_poi1
    
    点击日历选择
    AppiumLibrary.click element    id =com.xxx.xxx:id/anIvRight
    
    
    
    进入个人中心
    appiumLibrary.click element    id = com.xxx.xxx:id/txt_more1
    
    获取登录的用户名
    ${getLoginName}    appiumLibrary.get text    id = com.xxx.xxx:id/tvName
    [Return]    ${getLoginName}
    
    登录页面点击下一步
    AppiumLibrary.click element    id = com.xxx.xxx:id/guide4_btn
    

    完整的登陆成功测试用例代码如下

    登录成功
    打开应用程序
    点击开始
    截图    login
    输入用户名    ${username}
    输入密码    ${password}
    点击登录
    截图    login
    跳过新手指引
    截图    login
    #断言
    进入个人中心
    ${getLoginName}    获取登录的用户名
    BuiltIn .should contain    ${username}    ${getLoginName}
    

    如图

  • 相关阅读:
    mysql语句
    jsp中调用javabean
    java内存分配
    BaseClasses学习(-)CAMEvent
    YUV格式入门
    gcc intrinsic vector
    GCC builtin vector (gcc内建函数)学习
    GNU 内联汇编学习(1)
    express 中间件
    《饿了么大前端 Node.js 进阶教程》—Javascript 基础问题—引用传递
  • 原文地址:https://www.cnblogs.com/LOVEYU/p/8144175.html
Copyright © 2020-2023  润新知