自动化脚本代码appium+pytest+adb

pytest多线程与多设备并发appium​​​​​​​

使用adb获取应用的内存和CPU使用情况

复制代码
import pytest
import subprocess

# 测试用例:检查应用的内存使用情况
def test_memory_usage():
    package_name = 'com.example.myapp'
    memory_info = subprocess.check_output(['adb', 'shell', 'dumpsys', 'meminfo', package_name]).decode('utf-8')
    memory_usage = int(memory_info.split('TOTAL')[1].split()[0])
    assert memory_usage < 1000000, "内存使用超过阈值"

# 测试用例:检查应用的CPU占用情况
def test_cpu_usage():
    package_name = 'com.example.myapp'
    cpu_info = subprocess.check_output(['adb', 'shell', 'top', '-n', '1', '-m', '10', '-s', 'cpu', '|', 'grep', package_name]).decode('utf-8')
    cpu_usage = float(cpu_info.split()[2])
    assert cpu_usage < 50, "CPU占用超过阈值"

在上面的更新后的示例代码中,我们使用了subprocess模块来调用adb命令获取应用的内存和CPU使用情况。在test_memory_usage函数中,我们使用adb shell dumpsys meminfo命令获取应用的内存信息,并提取出总内存使用量。在test_cpu_usage函数中,我们使用adb shell top命令获取应用的CPU占用信息,并提取出CPU使用率。最后,我们对内存和CPU使用情况进行断言判断。

top是一个Linux/Unix系统上的命令,用于实时显示系统中运行的进程的信息,包括进程的PID(进程ID)、用户、CPU占用率、内存占用等。在Android平台上,也可以通过adb shell top命令来查看系统中运行的进程信息。

-n 1:指定top命令只运行一次,显示一次进程信息后就退出。

-m 10:指定top命令只显示前10个CPU占用率最高的进程。

-s:按照CPU占用率进行排序,显示CPU占用率最高的进程在前面。

通过执行adb shell top -n 1 -m 10 -s命令,可以查看当前设备上CPU占用率最高的前10个进程,以便及时发现CPU占用率过高的情况。

appium和python实现单设备的app自动化测试,并通过pytest编写测试用例进行自动化测试

复制代码
import pytest
from appium import webdriver

# 启动appium server,占用端口4723
# 电脑与一个设备连接,通过adb devices获取已连接的设备

# 定义启动参数
desired_caps = {
    'platformName': 'Android',
    'deviceName': 'device_name',
    'appPackage': 'com.example.myapp',
    'appActivity': '.MainActivity'
}

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

# 测试用例:检查应用的标题
def test_app_title():
    title = driver.find_element_by_id('com.example.myapp:id/title').text
    assert title == 'My App', "应用标题不匹配"

# 测试用例:检查按钮点击功能
def test_button_click():
    button = driver.find_element_by_id('com.example.myapp:id/button')
    button.click()
    result = driver.find_element_by_id('com.example.myapp:id/result').text
    assert result == 'Button Clicked', "按钮点击功能异常"

# 关闭driver
driver.quit()

在上面的示例代码中,我们使用appium的webdriver模块初始化了一个driver对象,连接到appium server。然后编写了两个测试用例,分别检查应用的标题和按钮点击功能。最后在每个测试用例中,通过driver对象来查找元素并执行相应的操作。最后关闭driver对象。

管理设备池、启动多个appium server、使用多线程执行pytest

以下是一个示例代码,演示如何通过管理设备池、启动多个appium server、使用多线程执行pytest来实现多设备并发测试。

示例代码中,我们定义了一个设备信息列表devices,包含了两个设备的信息。然后通过多线程的方式启动多个appium server,并执行测试用例。在每个线程中,通过不同的设备信息初始化driver对象,并执行测试用例。最后通过thread.join()等待所有线程执行完毕。

复制代码
import pytest
from appium import webdriver
import threading

# 定义设备信息列表
devices = [
    {
        'platformName': 'Android',
        'deviceName': 'device1',
        'appPackage': 'com.example.myapp',
        'appActivity': '.MainActivity'
    },
    {
        'platformName': 'Android',
        'deviceName': 'device2',
        'appPackage': 'com.example.myapp',
        'appActivity': '.MainActivity'
    }
]

# 定义测试用例
def run_test(device_info):
    driver = webdriver.Remote('http://localhost:4723/wd/hub', device_info)
    
    # 测试用例:检查应用的标题
    def test_app_title():
        title = driver.find_element_by_id('com.example.myapp:id/title').text
        assert title == 'My App', "应用标题不匹配"

    # 测试用例:检查按钮点击功能
    def test_button_click():
        button = driver.find_element_by_id('com.example.myapp:id/button')
        button.click()
        result = driver.find_element_by_id('com.example.myapp:id/result').text
        assert result == 'Button Clicked', "按钮点击功能异常"

    driver.quit()

# 启动多个appium server
def start_appium_server(port):
    # 启动appium server的代码

# 启动多线程执行测试
threads = []
for i, device_info in enumerate(devices):
    port = 4723 + i
    thread = threading.Thread(target=start_appium_server, args=(port,))
    thread.start()
    threads.append(thread)

for i, device_info in enumerate(devices):
    thread = threading.Thread(target=run_test, args=(device_info,))
    thread.start()
    threads.append(thread)

for thread in threads:
    thread.join()
相关推荐
DeepVisionary2 天前
阿里云上线旗舰多模态新模型,不公布跑分且限时14天退役
python·自动化
zixu_star2 天前
定时任务是什么?从日常自动化到 AI 应用,软件如何自动执行任务?
运维·人工智能·自动化
QXWZ_IA2 天前
管道GIS测绘如何实现自动化成图:三种成图方式怎么选
运维·人工智能·安全·自动化
严肃小白兔2 天前
GitHub 个人仓库正式支持结构化 Issue:从标签管理到自动化任务工作流
自动化·github·issue
goehou4 天前
让 AI 替我操作这台电脑,先把手能伸多远定下来
windows·自动化·权限管理·ai agent
Frankie_stand4 天前
测试自动化实战指南:从脚本化、自动判据到 CI 集成的完整落地路径
android·ci/cd·自动化
总裁余(余登武)5 天前
【python项目】:1操作EXCEl自动化开发
python·自动化·excel
海洋之恒6 天前
GitHub Actions 自动化:5 个真实运维提效案例
运维·自动化·github
lisw056 天前
用于医疗的磁驱动柔性微机器人研究进展!
机器人·自动化·硬件工程
Sakura_j_h_6 天前
从零写一个 MCP stdio Server:用 Python 校验博客文章格式
开发语言·python·自动化·ai工具·mcp·json-rpc