栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

〖Python APP 自动化测试实战篇⑨〗- 实战 - App自动化实战操作

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

〖Python APP 自动化测试实战篇⑨〗- 实战 - App自动化实战操作

万叶集
 隐约雷鸣,阴霾天空。 
 但盼风雨来,能留你在此。 


前言:
✌ 作者简介:渴望力量的哈士奇 ✌,大家可以叫我 哈士奇 ,一位致力于 TFS - 全栈 赋能的博主 ✌
CSDN博客专家认证、新星计划第三季全栈赛道 top_1 、华为云享专家、阿里云专家博主 
 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步
 人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。
 如果感觉博主的文章还不错的话,还请关注、点赞、收藏三连支持一下博主哦


专栏系列(点击解锁)学习路线指引知识定位
Python全栈白皮书 零基础入门篇 以浅显易懂的方式轻松入门,让你彻底爱上Python的魅力。
语法进阶篇 主要围绕多线程编程、正则表达式学习、含贴近实战的项目练习 。
自动化办公篇 实现日常办公软件的自动化操作,节省时间、提高办公效率。
自动化测试实战篇 从实战的角度出发,先人一步,快速转型测试开发工程师。
数据库开发实战篇 更新中
爬虫入门与实战 更新中
数据分析篇 更新中
前端入门+flask 全栈篇 更新中
django+vue全栈篇 更新中
拓展-人工智能入门 更新中
网络安全之路 踩坑篇 记录学习及演练过程中遇到的坑,便于后来居上者
网安知识扫盲篇 三天打鱼,不深入了解原理,只会让你成为脚本小子。
vulhub靶场漏洞复现 让漏洞复现变得简单,让安全研究者更加专注于漏洞原理本身。
shell编程篇 不涉及linux基础,最终案例会偏向于安全加固方向。 [待完结]
WEB漏洞攻防篇 2021年9月3日停止更新,转战先知社区等安全社区及小密圈
渗透工具使用集锦 2021年9月3日停止更新,转战先知社区等安全社区及小密圈
点点点工程师 测试神器 - Charles 软件测试数据包抓包分析神器
测试神器 - Fiddler 一文学会 fiddle ,学不会倒立吃翔,稀得!
测试神器 - Jmeter 不仅是性能测试神器,更可用于搭建轻量级接口自动化测试框架。
RobotFrameWork Python实现的自动化测试利器,该篇章仅介绍UI自动化部分。
Java实现UI自动化 文档写于2016年,Java实现的UI自动化,仍有借鉴意义。
MonkeyRunner 该工具目前的应用场景已不多,文档已删,为了排版好看才留着。


文章目录
    •  basepage层 - base_app_page.py
    •  first_baidu_page 层 - first_baidu_page.py
    •  baidu_search_page 层 - baidu_search_page.py
    •  test_baidu.py 模块 - 程序入口
    •  运行结果
    •  小节

上一章节给大家完整的编写了一个 百度搜索 的demo 与滑动触控操作,滑动触控这里不再细表。 这个 demo 完全依赖于 appium 本身的 webdriver 的一种模式,没有使用像之前 WEB 自动化那种的 “unittest” 框架与 “PO” 模式等,所以该章节我们要实现的就是将这个 demo 融入到我们的框架中,做成一个类似于 WEB 页面自动化 PO 模式的 App 自动化,接下来就看一看如何实现吧。

 basepage层 - base_app_page.py

创建 base_app_page.py 模块 , 定义一个所有页面都继承的page层。

代码示例如下:

# coding=utf-8


from appium import webdriver
from appium.webdriver.common.appiumby import By, AppiumBy


class BaseAppPage():
    """
    1、basepage层 定义一个所有页面都继承的page层
    2、对 selenium 常用的底层方法,再 进行一次封装
    """

    def __init__(self, driver, path=None):
        """定义 driver 初始状态"""
        self.driver = driver
        self.driver.implicitly_wait(10)


    def by_xpath(self, xpath):
        """Xpath 元素定位 方法不常用,但是也一定要保留"""
        # return self.driver.find_element_by_xpath(xpath)
        # return self.driver.find_element(by=By.XPATH, value=xpath)
        return self.driver.find_element(By.XPATH, xpath)


    def by_id(self, id):
        """id 元素定位"""
        return self.driver.find_element(By.ID, id)


    def by_classname(self, classname):
        """claseName 元素定位"""
        return self.driver.find_element(By.CLASS_NAME, classname)


    def by_uiautomator(self, uiautomator):
        """大杀器的 uiautomator 元素定位"""
        # return self.driver.find_element_by_android_uiautomator(uiautomator)
        return self.driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, uiautomator)
 first_baidu_page 层 - first_baidu_page.py

创建 first_baidu_page.py 模块 ,这个模块主要实现的是 "“百度App” 首页的定位搜索框的元素。 这里是各个页面单独封装成层,包括但限制页面的元素、操作、流程等。

# coding=utf-8


from appium import webdriver
from base_app_page import BaseAppPage


class FirstBaiduPage(BaseAppPage):
    """定位首页的搜索框的元素"""


    def homePage_searchElement(self):
        """定位首页的搜索框"""
        return self.by_xpath('//android.widget.LinearLayout[@content-desc="百度搜索,请输入"]/android.widget.FrameLayout[2]')


    """
    方法流程
    """
    def go_to_search(self):
        self.homePage_searchElement().click()
 baidu_search_page 层 - baidu_search_page.py

创建 baidu_search_page.py 模块 ,这个模块实现的是 定位元素、操作、流程等。

# coding=utf-8

from time import sleep
from appium import webdriver
from base_app_page import BaseAppPage


class BaiduSearchPage(BaseAppPage):
    """页面单独封装成层,页面的元素、操作、流程"""


    def homePage_searchElement_input(self):
        """定位首页搜索框跳转的输入框"""
        return self.by_xpath('//android.widget.RelativeLayout[@content-desc="请输入搜索关键词"]/android.widget.EditText')


    def search_button(self):
        """定位 '搜索' 按钮"""
        return self.by_uiautomator('new UiSelector().text("搜索")')


    """
    方法流程:
    	1、"搜索框" 内输入要搜索的内容
    	2、点击 "搜索" 按钮
    """
    def click_search(self, input_content):
        self.homePage_searchElement_input().send_keys(input_content)
        sleep(1)
        self.search_button().click()
 test_baidu.py 模块 - 程序入口

框架搭建完成之后,编写 est_baidu.py 作为整个测试的入口,脚本内容如下:

import unittest
from appium import webdriver
from time import sleep

from baidu_search_page import BaiduSearchPage
from first_baidu_page import FirstBaiduPage


class TestLogin(unittest.TestCase):
    """
    初始化操作 进行app caps配置
    最终结束操作 关闭app
    """

    def setUp(self):
        """执行用例之前需要执行的设备启动参数"""
        desired_caps = {}
        desired_caps['platformName'] = 'Android'
        desired_caps['platformVersion'] = '7.1.2'
        desired_caps['deviceName'] = '127.0.0.1:62001'
        # desired_caps['appPackage'] = 'com.baidu.searchbox'
        # desired_caps['appActivity'] = 'com.baidu.searchbox.SplashActivity'
        self.dr = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

    def test_baidu(self):
        # 初始化界面
        first_page = FirstBaiduPage(driver=self.dr)
        search_page = BaiduSearchPage(driver=self.dr)
        # 跳转
        first_page.go_to_search()
        # 搜索
        search_page.click_search("appium")

    def tearDown(self):
        self.dr.quit()


if __name__ == '__main__':
    unittest.main()
 运行结果

运行结果如下:




 小节

这里我们使用的是 unittest驱动 加上 PO模式 做了很多页面上的配置,这样方便我们日后的维护。这里会发现 App 自动化 与 WEB 自动化有很多的相像的地方,比如都是针对页面做了很多的 PO 上的处理。(这样有个好处就是可以将 App 自动化和 WEB自动化融合在一起)

上文中的整个演示过程成功的通过了 “百度搜索” 的用例,将之前的一些列操作迁移到了我们的框架之中。这里的搜索demo,是一个很简单的搜索。

如果想要将其复杂一些的话,可以将搜索的参数放在数据文件里或者参考之前的 ddt 数据驱动模式 ,包括之前我们使用 suite 、调用邮件的发送、jenkins 的集成等,与之前的 WEB自动化、接口自动化 基本上是一样的。

所以我们最终的一套自动化测试的框架可以集成 App自动化、WEB自动化 以及API自动化 ,整体的三位一体的自动化可以融入到这一套框架之中。

通过这个框架来进行自动化测试,可以进行用例的编写、PO的分层,底层的编写到 unittest 的一些小技巧的使用,再到后续的用例的执行、测试报告的输出、日志的打印等都可以融于这样的一套框架之中。从而在这个框架里面不断的完善、不断的达到完成我们所有的自动化测试的标准。


其实做到这里,大家会发现 App自动化、WEB自动化 以及API自动化 在编程的思路上有很多的相似的地方,所以不管是做开发也好还是测试开发也好,很多东西都是万变不离其宗的,做测试、自动化测试也是如此。可能 接口、WEB、App在具体的使用场景与编程上略有不同,但是大体的框架思路、大体的架构思想、大体的细节设计也是非常类似的。

OK,到了这里,我们的 App 自动化的编程部分就告一段落了,下一章节将和大家简单的总结一下 App 自动化的知识点,顺带聊一聊 App 自动化未来的发展趋势。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1009215.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号