一篇长文教你进行全方位的使用appium【建议收藏】

随着移动应用的日益普及,移动应用的测试成为了软件开发的重要组成部分。Python,作为一种易于学习,功能强大的编程语言,特别适合进行这种测试。本文将详细介绍如何使用Python进行APP测试,并附带一个实例。

Python 和 Appium:一种强大的组合

在进行APP测试时,我们通常使用自动化测试工具。其中,Appium是一种非常流行的开源移动应用自动化测试工具,可以支持Android和iOS的应用测试。它的一个主要优点是,你可以使用任何你喜欢的编程语言来编写测试脚本,只要这种语言可以创建HTTP请求。其中,Python是Appium社区广泛推荐的一种语言。

准备工作

在开始之前,你需要安装一些必要的工具:

  1. Python:你可以从Python官方网站下载并安装。

  2. Appium:你可以从Appium官方网站下载并安装。

  3. Appium-Python-Client:这是一个Python库,让你可以用Python来控制Appium。你可以使用pip安装:pip install Appium-Python-Client

示例:使用Python和Appium进行APP测试

这是一个基础的测试实例,我们将测试一个简单的计算器APP。首先,我们需要导入必要的库:

from appium import webdriverfrom appium.webdriver.common.mobileby import MobileBy

接着,我们需要设置启动参数:

desired_caps = {}desired_caps['platformName'] = 'Android'  # 你的设备系统desired_caps['platformVersion'] = '8.1.0'  # 你的设备系统版本desired_caps['deviceName'] = 'emulator-5554'  # 你的设备名称desired_caps['appPackage'] = 'com.android.calculator2'  # 你的APP的包名desired_caps['appActivity'] = 'com.android.calculator2.Calculator'  # 你的APP的主Activity

然后,我们创建一个driver:

driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

现在我们就可以开始编写我们的测试脚本了。比如,我们可以测试一下计算器的加法功能:

driver.find_element(MobileBy.ID, "com.android.calculator2:id/digit_2").click()driver.find_element(MobileBy.ID, "com.android.calculator2:id/op_add").click()driver.find_element(MobileBy.ID, "com.android.calculator2:id/digit_3").click()driver.find_element(MobileBy.ID, "com.android.calculator2:id/eq").click()
result = driver.find_element(MobileBy.ID, "com.android.calculator2:id/result").textassert result == '5'

最后,我们需要关闭driver:​​​​​​​

driver.quit()

通过这个简单的例子,你可以看到Python和Appium的强大之处。你可以很方便地定位元素,进行点击等操作,并检查结果是否符合预期。

 
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:1150305204【暗号:csdn999】

高级用法:自动化测试

以上我们介绍的是一个简单的测试例子,但在实际开发中,我们可能需要进行大量的自动化测试。为了实现这个目标,我们可以使用一些高级的技术,比如Python的unittest模块。

unittest是Python的标准库之一,提供了丰富的断言方法和组织测试的方式。这是一个使用unittest进行APP自动化测试的基本示例:​​​​​​​

import unittestfrom appium import webdriverfrom appium.webdriver.common.mobileby import MobileByclass TestCalculator(unittest.TestCase):    @classmethod    def setUpClass(cls):        desired_caps = {}        desired_caps['platformName'] = 'Android'        desired_caps['platformVersion'] = '8.1.0'        desired_caps['deviceName'] = 'emulator-5554'        desired_caps['appPackage'] = 'com.android.calculator2'        desired_caps['appActivity'] = 'com.android.calculator2.Calculator'        cls.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
    def test_addition(self):        self.driver.find_element(MobileBy.ID, "com.android.calculator2:id/digit_2").click()        self.driver.find_element(MobileBy.ID, "com.android.calculator2:id/op_add").click()        self.driver.find_element(MobileBy.ID, "com.android.calculator2:id/digit_3").click()        self.driver.find_element(MobileBy.ID, "com.android.calculator2:id/eq").click()
        result = self.driver.find_element(MobileBy.ID, "com.android.calculator2:id/result").text        self.assertEqual(result, '5')
    @classmethod    def tearDownClass(cls):        cls.driver.quit()if __name__ == '__main__':    unittest.main()

这个示例中,我们创建了一个TestCalculator的类,它继承自unittest.TestCase。在这个类中,我们可以编写多个测试方法,每个方法都是一个完整的测试,可以独立运行。setUpClass和tearDownClass方法会在所有测试开始前和所有测试结束后运行,通常我们在这里进行一些初始化和清理工作。

1. 使用 Page Object Model(POM)

POM 是一种设计模式,用于创建更可读、更可维护的自动化测试代码。在这个模式中,你会为每个APP页面创建一个 Python 类,这个类包含了所有与这个页面相关的操作。这样,你的测试代码就不再直接和页面元素打交道,而是和这些抽象的 Page Object 打交道,这让你的代码更容易理解和修改。​​​​​​​

class LoginPage:    def __init__(self, driver):        self.driver = driver
    def enter_username(self, username):        self.driver.find_element(MobileBy.ID, "username_field").send_keys(username)
    def enter_password(self, password):        self.driver.find_element(MobileBy.ID, "password_field").send_keys(password)
    def click_login_button(self):        self.driver.find_element(MobileBy.ID, "login_button").click()
# 在测试中使用login_page = LoginPage(driver)login_page.enter_username('testuser')login_page.enter_password('testpass')login_page.click_login_button()

2. 使用 Appium 的 Touch Action 和 Multi Touch

Appium 提供了 Touch Action 和 Multi Touch API,让你可以模拟各种复杂的用户手势,比如滑动、拖拽、多点触控等。这些功能让你可以更真实地模拟用户的操作,测试更多的使用场景。​​​​​​​

from appium.webdriver.common.touch_action import TouchAction
# 执行一个滑动操作action = TouchAction(driver)action.press(x=100, y=100).move_to(x=200, y=200).release().perform()
# 多点触控示例from appium.webdriver.common.multi_action import MultiActionaction1 = TouchAction(driver).press(x=100, y=100).move_to(x=200, y=200).release()action2 = TouchAction(driver).press(x=200, y=200).move_to(x=100, y=100).release()
multi_action = MultiAction(driver)multi_action.add(action1, action2)multi_action.perform()
3. 使用 Appium 的定位策略

除了基本的 id、class name 和 xpath 定位策略,Appium 还提供了许多高级的定位策略。比如,你可以使用 image 定位策略来定位那些没有明确 id 或 class name 的元素,你还可以使用 accessibility id 来定位那些为了提高无障碍访问性而添加了特殊标签的元素。​​​​​​​

# 使用 image 定位driver.find_element(MobileBy.IMAGE, "path_to_your_image.png")
# 使用 accessibility id 定位driver.find_element(MobileBy.ACCESSIBILITY_ID, "your_accessibility_id")
4. 使用 Appium 的日志和报告

Appium 提供了丰富的日志和报告功能,让你可以更方便地调试你的测试代码,了解测试的执行情况。你可以使用 Appium 的 server log 来查看测试的详细执行过程,你还可以使用各种第三方的报告工具,比如 Allure,生成更美观、更详细的测试报告。​​​​​​​

# 启动 Appium server 时设置 log 参数appium --log /path/to/your/logfile.txt
​​​​​​​
# 使用 pytest 和 Allure 生成测试报告def test_example():    driver.find_element(MobileBy.ID, "some_id").click()    assert driver.find_element(MobileBy.ID, "another_id").text == 'expected_text'

然后,运行 pytest 并使用 Allure 插件:​​​​​​​

pytest --alluredir=/your/allure/result/directoryallure serve /your/allure/result/directory
5. 使用 Python 的并行和异步功能

Python 提供了丰富的并行和异步功能,让你可以更高效地运行你的测试。比如,你可以使用 threading 或 multiprocessing 模块来并行运行多个测试,你还可以使用 asyncio 模块来编写异步的测试代码,这样你的测试就可以同时处理多个任务,提高测试效率。​​​​​​​

# 使用 threading 并行运行测试import threading
def test_one():    ...
def test_two():    ...
thread_one = threading.Thread(target=test_one)thread_two = threading.Thread(target=test_two)
thread_one.start()thread_two.start()
thread_one.join()thread_two.join()

异步编程就更复杂了,可能需要更深入的学习。这是一个简单的例子:​​​​​​​

import asyncio
async def test_one():    ...
async def test_two():    ...
await asyncio.gather(test_one(), test_two())

这些示例都很简单,只是为了给你一个大概的概念。在实际使用中,你可能需要根据你的实际情况进行更复杂的操作。

总结

使用Python进行APP测试是一种高效,强大的方法。无论你是一个软件开发者,还是一个测试工程师,都可以通过学习Python和Appium,提升你的工作效率,提高你的产品质量。希望这篇文章对你有所帮助。

作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:开心螺蛳粉】自提!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述

在这里插入图片描述

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群:1150305204,里面有各种测试开发资料和技术可以一起交流哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/727253.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OPCUA 学习笔记-程序模型

无论是边缘控制器,还是PLC 中,除了信息模型之外,还有应用程序,这些程序可能是IEC61131-3 编写的程序,也可能是其它程序开发的可执行程序。 尽管OPCUA 描述模型能力很强,但是它缺乏算法的描述方式。但是OPCU…

Python与FPGA——全局二值化

文章目录 前言一、Python全局128二、Python全局均值三、Python全局OTSU四、FPGA全局128总结 前言 为什么要进行图像二值化,rgb图像有三个通道,处理图像的计算量较大,二值化的图像极大的减少了处理图像的计算量。即便从彩色图像转成了二值化图…

linux系统---selinux

目录 前言 一、SELinux 的作用及权限管理机制 1.SELinux 的作用 1.1DAC 1.2MAC 1.3DAC 和 MAC 的对比 2.SELinux 基本概念 2.1主体(Subject) 2.2对象(Object) 2.3政策和规则(Policy & Rule) …

强化学习中动作价值函数和状态价值函数的联系区别?

在强化学习中,动作价值函数(Q函数)和状态价值函数(V函数)都是值函数,用于评估在不同状态或状态动作对下的值。它们之间存在联系,但有一些区别: 动作价值函数(Q函数&#…

Web自动化测试框架-PO模式

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

Python接口自动化之cookie、session应用!

以下介绍cookie、session原理及在接口自动化中的应用。 HTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录;Session 和 Cookie 的主要目的就是为了弥补 HTTP 的…

L2-002 链表去重(Java)

给定一个带整数键值的链表 L,你需要把其中绝对值重复的键值结点删掉。即对每个键值 K,只有第一个绝对值等于 K 的结点被保留。同时,所有被删除的结点须被保存在另一个链表上。例如给定 L 为 21→-15→-15→-7→15,你需要输出去重后…

NetSuite Mass Update 批量更新功能

NetSuite中有一个小而精的便捷功能,但是也是一个很容易在实践中被大家遗忘的隐藏功能,就是Mass Update批量更新,在此想和各位分享一下~该功能主要是可以帮助用户快速将符合固定标准的记录中的单个/多个字段直接进行批量更新。如果…

快速批量将图片变成圆角怎么弄?教你一键将图片批量加圆角

在我们日常工作中,在设计图片的时候会要求将直角变成圆角,那么为什么要这么做呢?首先从圆角的设计语言上来说说,圆角看起来很现代,传达给人的感觉是温和友善的,被广泛的应用在产品中的图标、按钮等地方。而…

OJ习题之——圆括号编码

圆括号编码 1.题目描述2.完整代码3.图例演示 1.题目描述 题目描述 令Ss1 s2 …sn是一个规则的圆括号字符串。S以2种不同形式编码: (1)用一个整数序列Pp1 p2 … pn编码,pi代表在S中第i个右圆括号的左圆括号数量。(记为…

代码第二十四天-寻找旋转排序数组中的最小值Ⅱ

寻找旋转排序数组中的最小值Ⅱ 题目要求 解题思路 二分法 当遇到两个left、right两个位置值相同时候&#xff0c;可以选择将 right right-1 代码 class Solution:def findMin(self, nums: List[int]) -> int:left,right0,len(nums)-1while left<right:mid(leftright…

HarmonyOS—配置编译构建信息

在进行应用/服务的编译构建前&#xff0c;需要对工程和编译构建的Module进行设置。API Version 9、API Version 8与API Version 4~7的构建体系不同&#xff0c;因此在设置编译构建信息时也存在差异&#xff1a; API Version 9&#xff1a;需要对构建配置文件、构建脚本、应用依…

一文读懂HDMI的演变-从HDMI1.0到HDMI2.1(建议收藏)

HDMI&#xff0c;全称为&#xff08;High Definition Multimedia Interface&#xff09;高清多媒体接口&#xff0c;主要用于传输高清音视频信号。 HDMI System HDMI系统包括HDMI的source和HDMI的sink, 其中source 是源端&#xff0c;即信号的来源&#xff1b;Sink的接收端&a…

哇!!!!这个个人博客好好看!!!

做一个个人博客第一步该怎么做&#xff1f; 好多零基础的同学们不知道怎么迈出第一步。 那么&#xff0c;就找一个现成的模板学一学呗&#xff0c;毕竟我们是高贵的Ctrl c v 工程师。 但是这样也有个问题&#xff0c;那就是&#xff0c;那些模板都&#xff0c;太&#xff01;…

C++性能优化 —— TCMalloc的原理与使用

一、TCMalloc简介 1、TCMalloc简介 TCMalloc(Thread-Caching Malloc&#xff0c;线程缓存的malloc&#xff09;是Google开发的内存分配算法库&#xff0c;最初作为Google性能工具库 perftools 的一部分&#xff0c;提供高效的多线程内存管理实现&#xff0c;用于替代操作系统…

基于AFDPF主动频率偏移法的孤岛检测Simulink仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于AFDPF主动频率偏移法的孤岛检测Simulink仿真。 2.系统仿真结果 3.核心程序与模型 版本&#xff1a;MATLAB2022a 36 4.系统原理简介 在分布式发电系统中&#xff0c;孤…

express基础

express express介绍 官网传送门基于 Node.js 平台&#xff0c;快速、开放、极简的 Web 开发框架express特点 Web 应用 Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架&#xff0c;它提供一系列强大的特性&#xff0c;帮助你创建各种 Web 和移动设备应用。…

详讲Spring的面向切片编程(AOP)二

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

3月7日代码随想录组合及优化

77.组合 77. 组合 - 力扣&#xff08;LeetCode&#xff09; 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [[2,4],[3,4],[2,3],[1,2],[1,3…

【手游联运平台搭建】游戏平台的作用

随着科技的不断发展&#xff0c;游戏行业也在不断壮大&#xff0c;而游戏平台作为连接玩家与游戏的桥梁&#xff0c;发挥着越来越重要的作用。游戏平台不仅为玩家提供了便捷的游戏体验&#xff0c;还为游戏开发者提供了广阔的市场和推广渠道。本文将从多个方面探讨游戏平台的作…