你是否想要入门rf+appium实现自动化,或者是工作中会运用到?
不知道从何下手,然后网上搜索一天,收获并不大?
robot framework + appium项目实战来了。这是工作中真实的项目。

终:自动化实现过程

如果有从事金融行业测试的朋友,就可能对下面业务比较熟悉:
实现:打开app–>进入我的页面进行登录–>进入交易页面中的普通买入–>输入沪市股票的限价委托和市价委托,深市股票限价和市价委托–>委托成功

一、robot framework

我之前的博客中,也有介绍过rf的用法,也用到了jenkins实现自动运行。这里再简单做一个介绍吧。

1.1 rf的优点

  • 它是现在比较主流的自动化框架,可以实现web UI自动化、appium自动化、接口自动化。
  • 它支持的库非常丰富,内置库和第三方库完全可以满足我们的日常测试工作。
  • 它可以自动生成漂亮的测试报告和日志信息
  • 不需要会代码

1.2 rf的缺点

  • 表格输入脚本,要编辑状态下才能输入
  • 保存让人无奈
  • 代码编写,需要加4个空格,一不小心缩进就出问题

  • 进入robot官网查看更多

二、appium

appium是当下app自动化80%的公司都会应用到的工具,这里不做更多介绍。我之前的博客有详细介绍环境搭建,再到实现一个简单的appium自动测试。点击这里查看:Appium环境搭建2021年最新详细教程
rf+appium的组合实现自动化,市面上大多数公司都在推行。那我们用我目前公司的项目,来实现一个股票app的买入操作自动化实战。

启动app时,记得勾选允许会话覆盖:
在这里插入图片描述

三、项目结构

我们利用rf的IDE–RIDE来实现:利用rf框架,基本上不会从头到尾就一个目录,一个套件,一个一个用例这样的结构。目前,都是按照:公共资源,公共数据,模块元素,模块业务,测试套件,测试用例这样的分层来实现。
首先,我会创建一个测试项目,再在里面创建三个目录,如下:
在这里插入图片描述

3.1 公共部分

公共部分,我们将一些每个模块都能用得上的元素,及元素生成的业务放在其中。
创建过程:右键公共部分–>New Resource–>输入名字和类型–>确定
在这里插入图片描述
在这里插入图片描述
最终生成的效果如下:
在这里插入图片描述

3.1.1 公共数据

什么样的是公共数据呢?比如每次登录需要的帐号、密码…
创建过程:右键公共数据–>New Scalar–>输入变量名称和值,确定
在这里插入图片描述

比如:创建一个username的变量:
在这里插入图片描述
点击OK,效果如下:
在这里插入图片描述
可以看到变量前面有一个圆圈里面加了个$符号。
同样的方法,我们再创建一个password的变量:
在这里插入图片描述
在这里插入图片描述

3.1.2 公共元素

首先,我们需要导入库–AppiumLibrary:
点击公共元素,点击右侧的Library
在这里插入图片描述
在这里插入图片描述

创建过程:右键公共元素–>New User Keyword–>输入关键字名称,点击OK

A. 打开app

在这里插入图片描述
在这里插入图片描述
再在打开app中,输入代码:

打开app
    Open Application    http://127.0.0.1:4723/wd/hub    platformName=Android    platformVersion=7.1.2    deviceName=ys    udid=127.0.0.1:59865    appPackage=com.firstcapital    appActivity=com.zztzt.android.simple.activity.tztCommHeadPageActivity    unicodeKeyboard=True    noReset=True    skipServerInstallation=True    skipDeviceInitialization=False    includeStderr=True    automationName=UiAutomator1
    强制等待    3

在这里插入图片描述
打开app,就是将appium地址,手机参数信息输入进去。
强制等待,是我设置的sleep关键字,我们双击进去查看如下:
在这里插入图片描述
每个业务等待的时候不一琮,所以,我们强制等待时间设置成一个变量,需要多少就写多少秒。

B. 关闭app

同现,我们再创建一个关闭app的关键字:
在这里插入图片描述

C. 强制等待

在这里插入图片描述
上面已经介绍过了。
注意:其实这个公共元素,名字可能不太合适,自已理解下就OK了。名字可以由自已取,这个并不是重点。我们只知道怎么导入和应用就OK。
公共部分,我们已经完成了。

3.2 我的页面

参照上面,先创建两个目录:页面元素和我的业务资源文件。但是,我们再在这里多创建一个测试套件:我的页面登录成功。结构如下:
在这里插入图片描述

3.2.1 页面元素

首先,同样的,我们需要先导入相应appiumlibrary库和公共部分中的资源文件。**库显示黑色代表导入成功,资源文件蓝色代表导入成功。**导入方法同上:
在这里插入图片描述

A.点击我的

创建过程:右键页面元素–>New User Keyword–>输入点击我的–>OK
app图:
在这里插入图片描述

再进入点击我的,编写代码:

点击我的
    强制等待    2
    AppiumLibrary.Click Element    xpath=/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.LinearLayout[2]/android.widget.LinearLayout/android.widget.LinearLayout[5]/android.widget.ImageView
    强制等待    2

在这里插入图片描述
强制等待,是我们在公共元素中创建的关键字,所以,也就是刚才我们需要先导入相应的资源文件才能使用它,否则我们需要再次创建一个,但是这有点多余了。
AppiumLibrary.Click Element:这是appium点击元素操作,后面接元素属性。
注意:如果我们没有导入相应库和资源文件,那么,就会显示成黑色。不会显示成蓝色,蓝色代表成功。

B. 点击登录

app图:在这里插入图片描述
同样的创建关键字,代码如下:

点击登录
    AppiumLibrary.Click Element    xpath=/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.LinearLayout[1]/android.widget.LinearLayout/android.widget.RelativeLayout/android.webkit.WebView/android.webkit.WebView/android.view.View/android.view.View[2]/android.view.View[1]/android.view.View[2]/android.view.View
    强制等待    2

在这里插入图片描述

C. 输入帐号密码

app图:
在这里插入图片描述

其实,这一关键字可以在公共部分中就实现的(我们不换帐号和密码的情况下)
代码如下:

输入帐号密码
    [Arguments]    ${un}=${username}    ${pwd}=${password}
    Clear Text    id=com.firstcapital:id/edit_account
    强制等待    1
    AppiumLibrary.Input Text    id=com.firstcapital:id/edit_account    ${un}
    强制等待    1
    AppiumLibrary.Input Password    id=com.firstcapital:id/edit_password    ${pwd}
    强制等待    1
    AppiumLibrary.Click Element    id=com.firstcapital:id/login
    强制等待    2

在这里插入图片描述
首先,我们会清除app帐号,再次输入帐号和密码,加入相应的等待时间,点击登录按钮。
我们上面的帐号和密码,都是使用变量。因为我们不同的测试场景,需要有不同的帐号。就可以再相应更改就OK。如果不动,我们就用公共数据中默认的就OK。

3.2.2 我的业务

基于上面实现的元素,进行组装生成业务。同样的需要导入库和资源文件。
方法同上,依然是创建一个关键字:我的页面登录成功
代码如下:

*** Settings ***
Library           AppiumLibrary
Resource          页面元素.txt
Resource          ../公共部分/公共元素.txt

*** Keywords ***
我的页面登录
    打开app
    点击我的
    强制等待    5
    点击登录
    输入帐号密码

在这里插入图片描述
可以看出来,这几个,不就是我们刚才添加的关键字嘛?组合形成业务就行了。

3.2.3 我的页面登录成功

在此测试套件中,同样需要导入库和资源文件,再新建一个测试用例(New Test Case),用例如下:
在这里插入图片描述
是不是觉得眼花了,这什么玩意?这是用例?
是的,没错,这就是用例,这就是利用rf+appium实现的自动化测试用例。
那我们打开appium,打开模拟器运行看看:
在这里插入图片描述
点击运行按钮后,用例前的机器人图标是显示运行状态的。
自动执行app效果:
在这里插入图片描述
运行成功颜色显示:
在这里插入图片描述
运行成功查看报告:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
看完之后,有啥感想:是不是跟我们想像中的不一样???
那我们再来对比一下传统的:

*** Settings ***
Library           AppiumLibrary
Resource          我的业务.txt

*** Test Cases ***
我的页面登录成功
    我的页面登录

登录测试
    Open Application    http://127.0.0.1:4723/wd/hub    platformName=Android    platformVersion=10    deviceName=HONOR X10    udid=H5X6R20514009570    appPackage=com.firstcapital    appActivity=com.zztzt.android.simple.activity.tztCommHeadPageActivity    unicodeKeyboard=True    noReset=True    skipServerInstallation=True    skipDeviceInitialization=False    includeStderr=True
    Sleep    7
    AppiumLibrary.Click Element    xpath=/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.LinearLayout[2]/android.widget.LinearLayout/android.widget.LinearLayout[5]/android.widget.ImageView
    log    driver.contexts
    Sleep    2
    Tap    ([(768,783),(987,828)],500)
    AppiumLibrary.Click Element    xpath=/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.LinearLayout[1]/android.widget.LinearLayout/android.widget.RelativeLayout/android.webkit.WebView/android.webkit.WebView/android.view.View/android.view.View[2]/android.view.View[1]/android.view.View[2]/android.view.View
    Sleep    2
    AppiumLibrary.Input Text    id=com.firstcapital:id/edit_account    830000992
    AppiumLibrary.Input Password    id=com.firstcapital:id/edit_password    123123
    Sleep    2
    AppiumLibrary.Click Element    id=com.firstcapital:id/login
    Sleep    2

在这里插入图片描述

现在,实际工作中,已经没有人会这样写代码了。不实用,没法复用,更不好维护。
OK,这只是一个小模块。我们真正的业务功能才刚刚开始。

3.3 交易页面

交易页面中,我们同样的创建三个目录:两个资源文件:交易业务、交易元素,一个测试套件:普通买入。记住:导入库和相应资源文件!
在这里插入图片描述

3.3.1 交易元素:

app图:
在这里插入图片描述

00. 点击买入

在这里插入图片描述

A. 输入证券代码

代码如下:
在这里插入图片描述
代码这里用变量,用例中代码是需要根据不同场景变动的。
实际工作中:代码是可以在数据库中获取的,现在无法连接数据库,暂时会在用例中写死。

B. 输入价格

代码如下:
在这里插入图片描述
价格同样是根据代码而定的。
需要注意的是:价格也是可以在数据库中取的,但是,目前无法连接数据库,我们就暂时在用例中写死。

C. 输入数量

代码如下:
在这里插入图片描述
暂时写死数量。

D. 点击买入按钮

代码如下:
在这里插入图片描述

E. 点击交易tab

在这里插入图片描述

F. 点击确定按钮

在这里插入图片描述

G. 委托方式-沪市市价

在这里插入图片描述

3.3.2 交易业务

需要导入库和资源文件
在这里插入图片描述

A. 普通买入-沪A买入

在这里插入图片描述

B. 普通买入-深A买入

在这里插入图片描述

C. 沪市市价委托

在这里插入图片描述

D. 深市市价委托

在这里插入图片描述

3.3.3 普通交易测试用例

A. 普通交易-沪A买入成功

在这里插入图片描述

B. 普通交易-深A买入成功

在这里插入图片描述

C. 普通交易-沪A-最优五档剩余撤销-委托成功

在这里插入图片描述

D. 普通交易-深A-本方最优-委托成功

在这里插入图片描述

四、 运行测试用例

4.1 执行测试用例

选中测试用例,点击运行按钮:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
全部运行成功,用例没有问题。

4.2 命令行执行测试

robot -d D:\profession\yc_zft\交易页面 D:\profession\yc_zft\交易页面\普通买入.robot

cmd中,切换到项目目录中,执行该命令:
在这里插入图片描述
查看结果。

4.2 查看测试报告

我们再查看报告:
在这里插入图片描述
OK。我们rf+appium实现app自动化测试在jenkins中自动运行。

五、jenkins自动运行

关于jenkins搭建的创建测试项目过程,略过。有想了解的,可以查看我之前的博客,有详细介绍。点击这里查看

5.1 创建任务

https://blog.csdn.net/weixin_45230019/article/details/115421232

5.2 自动运行

时间到了后,它就会自动运行了。运行结果,可以在我们设置的目录中查看到。具体略过。点击这里查看

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐