【拉勾7】appium 企业微信 PO 实战 -打造自己的测试

标题

appium 企业微信 PO 实战 -打造自己的测试

课程价值

  • 掌握常用的元素定位器
  • 掌握 PO 封装
  • 了解测试框架改进方案

大纲

  • 常用的元素定位器
  • PO封装
  • 框架改进方案

元素定位

  • 测试步骤三要素:
    • 定位、交互、断言
  • 定位
    • Id 定位(优先级最高)
    • XPath 定位(速度慢,定位灵活)
    • Accessibility ID 定位(content-desc
    • Uiautomator 定位(速度快,语法复杂)
    • predicate 定位

XPath 定位

XPath 定位用法

  • 绝对定位: 不推荐
  • 相对定位:
    • //*
    • //*[contains(@resource-id, ‘login’)](重点)
    • //*[@text=‘登录’] (重点)
    • //*[contains(@resource-id, ‘login’) and contains(@text, ‘登录’)] (重点)
    • //*[contains(@text, ‘登录’) or contains(@class, ‘EditText’)](了解)
    • //[ends-with(@text,‘号’) ] | //[starts-with(@text,‘姓名’) ] 两个定位的集合列表**(了解)**
    • //*[@clickable=“true"]//android.widget.TextView[string-length(@text)>0 and string-length(@text)<20](了解)
    • //[contains(@text, ‘看点’)]/ancestor:://*[contains(@class, ‘EditText’)] (轴)(了解)

原生定位方式

PO 封装

1、app.py 封装起来(应用的启动,关闭,重启)
2、将各个页面以Page页的形式封装起来
3、driver 复用,封装base_page.py 将__init__方法,find(),finds(), swipe_find() 底层常用的一些方法封装起来,driver 不要暴露出来。

日志 收集

设置日志级别

logging.basicConfig(level=logging.INFO)

打印日志

logging.info("find")
logging.info(locator,value)

logging 日志级别划分

_nameToLevel = {
    'CRITICAL': CRITICAL,
    'FATAL': FATAL,
    'ERROR': ERROR,
    'WARN': WARNING,
    'WARNING': WARNING,
    'INFO': INFO,
    'DEBUG': DEBUG,
    'NOTSET': NOTSET,

python 会收集当前级别及以上级别的日志。

参考代码

作业

思考题:

如何将日志保存到文件中?

课后练习:

  • 实现添加联系人功能的PO封装
  • 实现删除联系人功能的PO封装

课后调查表

作业已上传,请老师检查。

1、滑动查找最好加个最大滑动次数,否则容易进入死循环
2、删除这样找很费时间,可以点击右上角的搜索,搜索想要找的联系人,最后退回到搜索界面判断搜索出来的联系人是否-1,当联系人特别特别多的时候,这样删除更快些。

作业如下,请老师批改并给出指点意见 :joy:

老师请查收作业,封装思路如图。
1、使用yaml数据驱动
2、同页面多个函数调用同个yaml文件的不同数据
3、获取namelist对测试用例进行了断言
4、打印了日志,暂未实现导出日志文件

https://github.com/zp89n11/pythonproject/tree/main/weixin

老师,作业地址如下,请批改:
https://github.com/guyamei/firstDemo.git
目录:test_appium

老师,这是我的作业
https://gitee.com/yangge531/wsy3/tree/master/homework4

作业情况:
1.完成了添加,以及删除用户的操作。
2.使用PO的思想封装了页面。
亮点:
1.结合了数据驱动,将测试行为定义在yml文件中,PO对象中不需要再写find,send,click操作。
2.在base_page类中,封装了测试方法。
3.结合了参数化设计,使用yml文件分离环境参数,测试数据。
4.fixture中使用hook函数,对用例数据中的中文名称进行编码转换。
还可以改进的地方:
1.没有添加日志。
2.没有使用allure。

作业地址:
https://github.com/vndbjlqx/gitDemo/tree/main/appiumWeChatHomework

时序图:

老师,作业已完成请查收
亮点
1、添加的异常日志
2、添加动作未使用yml管理元素使用传统的元素点击和查找;删除动作使用数据驱动的方式放在yml文件管理元素
3、base_page类作为父类,将公共的操作方法归为统一入口
4、使用allure生成测试报告
缺点:
1、生成测试报告中,执行整个test_case中的添加和删除功能会出现删除失败现象,但分开执行case可pass
2、日志的生成存在冗余,难以判断具体错误

老师作业已完成,请批改指教。

老师,作业已完成,地址如下
刘湘涵/homework0416 - 码云 - 开源中国 (gitee.com)

作业地址如下,请老师查看:

备注:
1.在滚动页面查找元素的时候,因为执行的时候一直报错,未使用直播课上老师教过的swipe_find方法,最后由于时间关系,还是先用MobileBy.ANDROID_UIAUTOMATOR,这个问题会后续进行优化
2.log日志存到文件的问题,因为时间关系,暂时还没去思考如何解决,待后续优化

交作业了 请老师批改

https://github.com/Liuzicheng1994/pythonProject/tree/master/homework/homework2
先提交一版

作业地址:

five_homework · 李文凯/five_homework - 码云 - 开源中国 (gitee.com)
UML


ALLURE测试报告

image
作业地址:https://gitee.com/best-yangyuli/appium-enterprise-wechat

做的比较赶,所以有很多地方需要完善
1.logging日志添加
2.显示等待
3.allure 生成在线测试报告
4.对添加或删除成员的断言操作
5.部分重复功能精简
6.数据驱动文件精简合并


作业地址: LG7/lesson6 at main · yr-rui/LG7 · GitHub