自动化脚本代码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()

相关推荐

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

    2024-04-08 11:00:01       41 阅读
  2. 【告警自动化处置脚本

    2024-04-08 11:00:01       53 阅读
  3. Linux自动化部署脚本

    2024-04-08 11:00:01       57 阅读
  4. 【Prometheus】自动化效率脚本

    2024-04-08 11:00:01       22 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-08 11:00:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-08 11:00:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-08 11:00:01       82 阅读
  4. Python语言-面向对象

    2024-04-08 11:00:01       91 阅读

热门阅读

  1. 【flask快速上手(二)】

    2024-04-08 11:00:01       41 阅读
  2. Windows DLL(动态链接库)的用处

    2024-04-08 11:00:01       41 阅读
  3. Spring Boot中整合Redis

    2024-04-08 11:00:01       41 阅读
  4. C#实践作业1(类、接口、委托)

    2024-04-08 11:00:01       33 阅读
  5. 动态规划算法 - LC354. 俄罗斯套娃信封问题

    2024-04-08 11:00:01       39 阅读
  6. Linux常用命令

    2024-04-08 11:00:01       33 阅读
  7. Scrapy数据存储到数据库

    2024-04-08 11:00:01       36 阅读
  8. 人到中年,IT从业者怎么办

    2024-04-08 11:00:01       30 阅读
  9. 猜测生日日期

    2024-04-08 11:00:01       35 阅读
  10. 正则表达式

    2024-04-08 11:00:01       31 阅读