代码改变世界

python+appium+pytest做app自动化测试

2024-04-22 17:54  加个小鸡腿  阅读(421)  评论(0编辑  收藏  举报

我在另一篇博客中写了使用unittest做app自动化测试的,包含了前期的环境的环境搭建,请参考如下链接:python+appium+unittest做app自动化测试

这里,我们使用pytest框架再改写一个版本,因为pytest做测试报告看着更加好看,代码改良如下:

from appium import webdriver
import pytest
@pytest.fixture(scope='session')
def driver(request):
    server_url = 'http://localhost:4723/wd/hub'
    desired_caps = {}
    desired_caps['platformName'] = 'Android'
    desired_caps['platformVersion'] = '8.1.0'
    desired_caps['deviceName'] = '2c7c688a'
    desired_caps['appPackage'] = 'com.hhh.aaa.xxx.test'  # 应用的包名
    desired_caps['appActivity'] = 'com.hhh.aaa.xxx.test.MainActivity'  # 应用的主Activity

    driver = webdriver.Remote(server_url, desired_caps)
    def fin():
        driver.quit()
    request.addfinalizer(fin)
    return driver

def test_find_and_click_element(driver):

    button = driver.find_element_by_id('com.hhh.aaa.xxx.test:id/apiCastBtn')
    button.click()

这里需要安装pytest,命令行下执行pip install pytest,如果出现报错,可尝试使用管理员权限打开cmd,执行pip install --ignore-installed pytest,生成测试报告,需要执行pip install pytest-html

上面的python代码保存为文件appiumtest.py,执行:

pytest --html=report.html appiumtest.py

当前路径下生成了report.html文件,内容如下:

 对比unittest,看着还是pytest更加好用点

 

代码详情解释:

#导入Appium的webdriver模块,该模块提供了与Appium服务器通信的功能,进而操控移动设备或模拟器上的应用
from appium import webdriver
#引入pytest测试框架,pytest提供了丰富的断言、fixtures以及其他用于编写单元测试和集成测试的功能
import pytest
#定义一个名为driver的fixture函数,其作用范围为整个session(scope='session'),意味着在整个测试会话期间,这个fixture只会被初始化一次,所有引用它的测试函数都将共享同一个driver实例
@pytest.fixture(scope='session')
def driver(request):
    #设置Appium服务器的URL,这是Appium服务接收和响应客户端命令的地方。
    server_url = 'http://localhost:4723/wd/hub'
    #初始化一个空字典desired_caps,用于存放期望的设备和应用配置信息
    desired_caps = {}
    #指定测试平台为Android
    desired_caps['platformName'] = 'Android'
    #指定Android系统的版本号
    desired_caps['platformVersion'] = '8.1.0'
    #设备名称或者UDID,这里代表正在连接的具体设备或模拟器
    desired_caps['deviceName'] = '2c7c688a'
    #指定待测试应用的包名,用于启动指定的应用。
    desired_caps['appPackage'] = 'com.hhh.aaa.xxx.test'  # 应用的包名
    #指定启动应用后要加载的初始Activity。
    desired_caps['appActivity'] = 'com.hhh.aaa.xxx.test.MainActivity'  # 应用的主Activity
    #使用webdriver.Remote(server_url, desired_caps)创建一个WebDriver实例,通过给定的URL连接到本地运行的Appium服务器,并携带上述配置参数启动并控制目标Android应用
    driver = webdriver.Remote(server_url, desired_caps)
    #在fixture中定义了一个内部函数fin(),当测试会话结束时,通过调用driver.quit()方法关闭并清理WebDriver实例及相关的应用进程。
    def fin():
        driver.quit()
        #使用request.addfinalizer(fin)将清理操作注册到pytest的生命周期管理中,确保测试结束后执行清理动作
    request.addfinalizer(fin)
    return driver

def test_find_and_click_element(driver):
#定位到应用内具有指定资源ID(这里是apiCastBtn)的按钮元素
    button = driver.find_element_by_id('com.hhh.aaa.xxx.test:id/apiCastBtn')
    button.click()