移动端自动化测试实战(三)

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家!

接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/101102587

目录

四丶第三阶段appium基础API讲解

6.APP模拟手势高级操作

7.疑难问题解决

8.场景测试

五丶第四阶段pytest入门

1.Pytest安装和介绍

2.Pytest的setup和teardown函数

3.Pytest配置文件

4.Pytest常用插件

5.场景测试


四丶第三阶段appium基础API讲解

6.APP模拟手势高级操作

TouchActionAppiumDriver的辅助类,主要针对手势操作,比如滑动、长按、拖动等,
原理是将一系列的动作放在一个链条中发送到服务器,服务器接受到该链条后,解析各个动作,逐个执行

1.前置代码

2.手指轻敲操作

模拟手指轻敲一下屏幕操作
方法:tap(element=None, x=None, y=None)
方法:perform() # 发送命令到服务器执行操作
参数:
1.element:被定位到的元素
2.x:相对于元素左上角的坐标,通常会使用元素的X轴坐标
3.y:通常会使用元素的Y轴坐标

  • 通过元素定位方式敲击屏幕(TouchAction这个类不知道怎么导入的话,直接Alt+Enter即可

  • 运行脚本,如下所示

  • 通过坐标定位方式敲击屏幕

  • 运行脚本,成功敲击wlan

3.手指按操作

模拟手指按下屏幕,按就要对应着离开

方法:press(el=None, x=None, y=None)
方法:release() # 结束动作,手指离开屏幕
参数:
1.element:被定位到的元素
2.x:通常会使用元素的X轴坐标
3.y:通常会使用元素的Y轴坐标

  • 通过元素定位方式按下屏幕,press按住元素,release松开手指,perform发送到服务器

  • 通过坐标方式按下屏幕

4.等待操作

方法:wait(ms=0)
参数:
ms:暂停的毫秒数

业务场景:
1.进入设置
2.点击WLAN选项
3.长按WiredSSID选项5秒

  • 第一种通过元素定位方式长按元素,代码如下

  • 运行脚本,成功实现场景

  • 第二种通过坐标方式模拟长按元素,添加等待(有长按)/不添加等待(无长按效果),代码如下

  • 运行脚本,成功实现场景

5.手指长按操作

模拟手机按下屏幕一段时间,按就要对应着离开.跟以上wait方法效果一样,都能达到长按元素的效果,wait是按住元素等待时间,long_press则是一直按住元素,效果都一样

方法:long_press(el=None, x=None, y=None, duration=1000)
参数:
1.element:被定位到的元素
2.x:通常会使用元素的X轴坐标
3.y:通常会使用元素的Y轴坐标
4.duration:持续时间,默认为1000ms

业务场景:
1.进入设置
2.点击WLAN选项
3.长按WiredSSID选项5秒

  • 第一种:通过元素定位方式长按元素,运行脚本成功实现场景

  • 第二种:通过坐标定位方式长按元素,运行脚本成功实现场景

6.场景示例

说明:当通过脚本打开手机端中的文件管理器时会弹出一个对话框,我们需要点击确定按钮(该确定按钮可通过盲写xpath尝试搞定),然后点击内部存储设备

  • 首先在手机端打开文件管理器,然后通过adb命令获取设备包名以及启动名

  • 然后在脚本中打开文件管理器,出现欢迎弹框 

  • 通过盲写尝试获取确定元素,并点击,运行脚本,成功点击确定到如下页面

  • 点击进入内部存储

  • 紧接着长按Alarms文件2秒,通过测试发现通过xpath匹配text值无法定位到Alarms,所以博主通过获取所有的元素并判断每个元素的text属性的值,进行Alarms长按两秒操作

  • 最后通过xpath定位属性元素并点击

  • 整体效果如下:

7.手指移动操作

模拟手机的滑动操作
方法:move_to(el=None, x=None, y=None)
参数:
1.el:定位的元素
2.x:相对于前一个元素的X轴偏移量
3.y:相对于前一个元素的Y轴偏移量

业务场景1:
1.进入设置
2.向上滑动屏幕到可见"安全"选项

  • 1.进入设置

  • 2.向上滑动屏幕到可见"安全"选项

  • 运行代码,成功实现场景(需要说明的一点则是,通过获取元素的坐标来进行滑动更精准,当然还可以使用上一篇博客中的drag_and_drop方法)

业务场景2:
1.进入设置
2.向上滑动屏幕到可见"安全"选项
3.进入到安全
4.点击屏幕锁定方式
5.点击图案
6.绘制图案

  • 3~5步都是通过xpath匹配text属性值,进行点击

  • 检验3~5步是否成功进入图案界面,为了验证每一步都都成功定位到元素以及坐标,所以博主采用debug模式运行

  • 最后一步绘制图案,则需要通过每个原点的坐标来进行绘制,绘制如下图案

  • 首先先获取上图中7个连接点的坐标

  • 脚本如下,从press按住元素到move_to滑动到元素wait等待1秒然后release松开手指到最后perform将一系列的动作放在一个链条中发送到服务器,首先先测试前面三个点的连接,脚本如下

  • 运行脚本,成功的实现前面三个点相连

  • 按以上方式完成Z字母绘图代码如下

  • 运行脚本,成功完成绘图

  • 查看appium日志

8.小结 

7.疑难问题解决

1.第一个疑问:move_to参数值问题

  • 在以上第7.手指移动操作中博主在使用move_to完成第一个场景时,传递的给move_to方法中的参数更多的坐标并没有减去电池的坐标,经过反复测试,减去后是有问题的,反而不减去能定位到安全选项

2.第二个错误: An unknown server-side error occurred while processing the command.

  • 每次执行脚本到TouchAction(driver)行代码时老是会出现该提示,经过博主上网查询并且一一实验后,应该是appium-desktop桌面版客户端不稳定导致的,所以博主打算使用Appium命令行安装方式,首先需要安装node.js,安装成功后如下操作

  • 安装cnpm

  • 安装appium,cnpm install -g appium

  • 启动appium服务

  • 运行脚本,cmd窗口运行appium成功获取操作日志,不再提示An unknown server-side error occurred while processing the command.报错

3.最终反复尝试没有问题的代码如下:

8.场景测试

业务场景1:

1.打开短信程序

2.按住第一条短信

3.执行删除

4.点击进入第二条短信(当第一条短信被删除成功后,则第二条短信的坐标则是第一条短信的坐标)

5.按住内容

6.点击查看详情

7.打印详情数据

  • 首先需要在手机端打开信息程序,通过adb命令获取包名和启动名

  • 还需要通过工具定位元素

  •  通过坐标定位方式获取第一条短信的坐标,通过press方法按住两秒,成功的显示出删除按钮

  • 脚本实现如下:(博主在这里通过xpath的=来完全匹配查看详情,之前都是用contains包含)

  • 在执行脚本,在点击进入第二条短信后,定位消息内容坐标出错了提示没有搜索到先关元素

  • 查看截图确认是定位短信内容出错

  • 那么博主现在修改代码,将坐标定位修改为元素id定位

  • 再次运行脚本,成功的实现场景,有时候测试就是需要不断的测试才能有最终答案

业务场景2:

1.打开短信程序

2.点击进入第一条短信

3.按住内容

4.点击复制文字

5.粘贴到信息输入框

6.点击发送信息

  • 脚本实现如下,需要注意的是粘贴时需用到组合键,并且不要搞错参数的位置

  • 运行脚本,成功实现场景 

五丶第四阶段pytest入门

1.Pytest安装和介绍

1.Pytest介绍

pytest是python的一种单元测试框架,同自带的Unittest测试框架类似,相比于Unittest框架使用起来更简洁,效率更高。

2.主要有以下特点

1.非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考
2.支持简单的单元测试和复杂的功能测试
3.支持参数化
4.执行测试过程中可以将某些测试跳过,或者对某些预期失败的Case标记成失败
5.支持重复执行失败的Case
6.支持运行由Nose , Unittest编写的测试Case
7.具有很多第三方插件,并且可以自定义扩展
8.方便的和持续集成工具集成

3.Pytest安装(pytest官网)

1.源码安装

1.进入下载包路径
2.python setup install 
3.安装出现权限问题:
  3.1.mac/linux 添加sudo,运行:sudo python setup install
  3.2.windows 管理员方式运行cmd窗口,运行:python setup install

2.命令安装

1.mac/linux:sudo pip3 install -U pytest # -U:可以理解为--upgrade,表示已安装就升级为最新版本
2.管理员方式运行cmd:pip3 install -U pytest

3.安装成功校验

1.进入命令行
2.运行:pytest --version # 会展示当前已安装版本

4.Pytest运行的第一个例子

  • 在IDE中编写如下代码(说明:-s的作用则是显示出测试函数中的打印语句内容)

  • 执行结果如下

5.Pytest运行方式

1.测试类主函数模式

pytest.main("-s  test_abc.py")

  • 例如:如上__name__中的运行

2.命令行模式

pytest 文件路径/测试文件名
pytest ./test_abc.py

  • 例如:执行如下

2.Pytest的setup和teardown函数

1.概述

1.setup和teardown主要分为:模块级,类级,功能级,函数级。
2.存在于测试类内部

2.函数级别setup()/teardown()

运行于测试方法的始末,即:运行一次测试函数会运行一次setup和teardown

  • 示例代码如下:

  • 运行代码,查看测试结果,pytest和unittest是一样的

3.类级别

说明:运行于测试类的始末,即:在一个测试内只运行一次setup_class和teardown_class,不关心测试类内有多少个测试函数。

注意:在unittest中的类级别为setUpClass静态方法以及tearDownClass静态烦方法;在pytest中则是setup_class和teartown_class

  • 示例代码如下:

  • 运行代码,查看打印顺序,与unittest中的setUpClass及tearDownClass方法一样

4.场景示例

场景描述:

1.打开设置;2.点击更多;3.点击移动网络;4.点击首选网络类型;5.选择3G;6.判断是否选择3G成功

  • 结合pytest,编写脚本如下

  • 运行脚本,成功实现场景,assert断言成功,没有打印设置失败说明设置3G网络成功

  • 有时候程序运行比较快时,页面没有反应过来,导致元素搜索不到,那么可以通过实例化WebDriverWait类实现当元素不存在时等待5秒再检查的一个操作,则不需要在代码前使用time.sleep了,具体实现如下

  • 运行脚本,也是成功实现场景,没有任何问题

  • 现在将代码中assert断言修改为2G,那么这样肯定是断言失败的,运行脚本,成功打印出设置失败,代码逻辑OK

3.Pytest配置文件

说明:pytest的配置文件通常放在测试目录下,名称为pytest.ini,命令行运行时会使用该配置文件中的配置

1.配置pytest命令行运行参数
    [pytest]
    addopts = -s ... # 空格分隔,可添加多个命令行参数 -所有参数均为插件包的参数

2.配置测试搜索的路径
    [pytest]
    testpaths = ./scripts  # 当前目录下的scripts文件夹 -可自定义
3.配置测试搜索的文件名
    [pytest]
    python_files = test_*.py  
    # 当前目录下的scripts文件夹下,以test_开头,以.py结尾的所有文件 -可自定义
4.配置测试搜索的测试类名
    [pytest]
    python_classes = Test_*  
    # 当前目录下的scripts文件夹下,以test_开头,以.py结尾的所有文件中,以Test_开头的类 -可自定义
5.配置测试搜索的测试函数名
    [pytest]
    python_functions = test_*  
    # 当前目录下的scripts文件夹下,以test_开头,以.py结尾的所有文件中,以Test_开头的类内,以test_开头的方法 -可自定义 

  • 在IDE中创建pytest.ini配置文件,并创建reports目录用于存放测试报告,然后再创建scripts目录,将测试脚本代码放进去,这样整个目录就比较清晰了,配置信息如下

  • 说明一点:配置的命令行运行参数,在终端中的相当于执行如下命令 

4.Pytest常用插件

说明:插件列表网址:https://plugincompat.herokuapp.com 包含很多插件包,大家可依据工作的需求选择使用。

1.Pytest测试报告

通过命令行方式,生成xml/html格式的测试报告,存储于用户指定路径。
插件名称:pytest-html
安装方式:
    1.安装包方式 python setup.py install 
    2.命令行 pip3 install pytest-html
使用方法:
    命令行格式:pytest --html=用户路径/report.html

  • 首先通过命令安装pytest-html插件

  • 示例代码如下:

运行方式:
    1.修改Pytest_Api/pytest.ini文件,添加报告参数,即:addopts = -s --html=./report.html 
        # -s:输出程序运行信息
        # --html=./report.html 在当前目录下生成report.html文件
        ⚠️若要生成xml文件,可将--html=./report.html 改成 --html=./report.xml
    2.命令行进入Pytest_Api目录
    3.执行命令: pytest
执行结果:
    1.在当前目录会生成assets文件夹和report.html文件

  • 在Terminal终端执行pytest命令后,提示如下错误

  • 指向了我们的pytest.ini编码问题

  • 解决方法则是设置文件编码为gbk编码即可

  • 再次执行pytest命令成功的执行了scripts目录下的test_api_01.py文件中的test测试方法,为什么没有执行其他的脚本以及方法,在于我们配置的pytest.ini文件的配置

  • 成功的在当前目录会生成assets文件夹和report.html文件

  • 打开report.html文件

2.Pytest控制函数执行顺序

函数修饰符的方式标记被测试函数执行的顺序.
插件名称:pytest-ordering
安装方式:
    1.安装包方式 python setup.py install 
    2.命令行 pip3 install pytest-ordering
使用方法:
    1.标记于被测试函数,@pytest.mark.run(order=x)
    2.根据order传入的参数来解决运行顺序
    3.order值全为正数或全为负数时,运行顺序:值越小,优先级越高
    4.正数和负数同时存在:正数优先级高
默认情况下,pytest是根据测试方法名由小到大执行的,可以通过第三方插件包改变其运行顺序

  • 首先安装pytest-ordering插件

  • 示例代码如下

  • 运行脚本,查看执行顺序(默认顺序),先打印了test_a再打印test_b

  • 通过装饰方式控制函数执行顺序

  • 再次执行脚本,那么先打印了test_b再打印test_a,通过装饰器中order的值的大小来控制执行顺序

3.Pytest失败重试

通过命令行方式,控制失败函数的重试次数。
插件名称:pytest-rerunfailures
安装方式:
    1.安装包方式 python setup.py install 
    2.命令行 pip3 install pytest-rerunfailures
使用方法:
    命令行格式:pytest --reruns n # n:为重试的次数

  • 安装pytest-rerunfailures插件

运行方式:
1.修改Test_App/pytest.ini文件,添加失败重试参数,即:addopts = -s  --reruns 2 --html=./report.html 
    # -s:输出程序运行信息
    # --reruns 2 :失败测试函数重试两次
    # --html=./report.html 在当前目录下生成report.html文件
2.命令行进入Test_App目录
3.执行命令: pytest

  • 首先在配置文件中添加失败重试参数

  • 执行pytest运行scripts目录下的test_*.py的测试文件

  • 打开reports目录下的report.html测试报告,查看报告可以看到两次重试记录

 4.小结

5.场景测试

场景描述:结合前面的函数丶配置丶插件知识点在脚本实现两个测试用例(也就是两个测试方法)分别是检查更多选项下的VPN选项是否存在和移动网络选项下的首选网络类型是不是2g

  • 代码如下,test_2G测试用例肯定是错误的,因为目前手机的首选网络类型为3G

  • 然后在pytest.ini配置文件中修改测试搜索的文件名

  • 执行脚本,与预期结果一致

  • 查看生成的report.html测试报告(虽然测试结果与预期结果一致,但是其中有两条原因为超时

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cdtaogang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值