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()