移动端自动化测试基本概念方法

本文介绍了Appium在移动端自动化测试中的工作原理,包括AppiumServer作为Web接口,客户端与设备交互的方式,以及使用Python进行测试的示例,涵盖了启动应用、定位元素、操作滑动、数据驱动测试和生成测试报告等内容。
摘要由CSDN通过智能技术生成

移动端自动化测试

Appium 工作原理

Appium Server是Appium的服务端,作为一个Web接口服务,使用Node.js实现。Appium Server接收到Client发送的指令后,将这些指令转换为移动端能够识别的指令,然后发送给移动端设备,并对移动端设备进行操作

Appium 测试框架

import unittest
from appium import webdriver


class MyTestCase(unittest.TestCase):
    def setUp(self) -> None:
        capabilities = dict(
            platformName='Android',
            automationName='uiautomator2',
            deviceName='127.0.0.1:62001',
            appPackage='com.jhss.youguu',
            appActivity='.SplashActivity',
            noReset=False,
            skipDeviceInitialization=True
        )
        appium_server_url = 'http://localhost:4723'
        self.driver = webdriver.Remote(appium_server_url, capabilities)
        self.driver.implicitly_wait(6)

    def tearDown(self) -> None:
        self.driver.quit()

Appium 方法

# 启动app
driver.launch_app()
driver.start_activity('com.jhss.youguu', '.SplashActivity')

# 截屏
driver.save_screenshot('error.png')

# 切换上下文
contexts = driver.contexts
# print(driver.current_context)
# print(contexts)
driver.switch_to.context(contexts[1])
# print(driver.current_context)

# 滑动
driver.swipe(1360, 970, 80, 970)

# 长按
ele = driver.find_element(By.XPATH, '//android.widget.TextView[@content-desc="文本"]')
TouchAction(driver).long_press(ele, 6000).release().perform()

# 短按
ele = driver.find_element(By.XPATH, '//android.widget.TextView[@content-desc="文本"]')
TouchAction(driver).press(ele).release().perform()

# 手势移动
TouchAction(driver).press(x=400, y=970).move_to(x=400, y=1594).move_to(x=1028, y=1594).perform()

# 滚动
ele1 = driver.find_element_by_android_uiautomator('new UiSelector().text("文本")')
ele2 = driver.find_element_by_android_uiautomator('new UiSelector().text("文本")')
driver.scroll(ele1, ele2)

# 拖拽
ele1 = driver.find_element_by_android_uiautomator('new UiSelector().text("文本")')
ele2 = driver.find_element_by_android_uiautomator('new UiSelector().text("文本")')
driver.drag_and_drop(ele1, ele2)

# 切换至后台
driver.background_app(2)

# 安装应用
driver.install_app(r"D:路径")
# 卸载应用
driver.remove_app('com.dongqiudi.news')

# 判断app是否存在
print(driver.is_app_installed('com.jingdong.app.mall'))

# 查看当前Activity名
print(driver.current_activity)
# 查看当前包名
print(driver.current_package)

# 电源键
driver.unlock()

Appium 发送文件

file_path = r'D:路径'
path = '/storage/emulated/0/Apps/'

# 发送文件到手机
with open(file_path, 'rb') as fp:
    data = str(base64.b64encode(fp.read()), 'utf-8')
    
driver.push_file(path, data)


# 发送手机文件到电脑
data = driver.pull_file(path)

with open(file_path, 'wb') as fp:
    fp.write(base64.b64decode(data))

Appium 定位方式

# 文本定位
find_e = 'new UiSelector().text("文本")'
driver.find_element_by_android_uiautomator(find_e).click()

# 父级定位
father = 'resourceId("com.jhss.youguu:id/rl_left").childSelector(resourceId("com.jhss.youguu:id/head_pic"))'
driver.find_element_by_android_uiautomator(father).click()

# 兄弟定位
brother = 'resourceId("com.jhss.youguu:id/ll_fake_search_btn").fromParent(resourceId("com.jhss.youguu:id/rl_left"))'
driver.find_element_by_android_uiautomator(brother).click()

# 模糊定位
driver.find_element(By.XPATH, '//android.widget.ImageView[contains(@resource-id,"pic")]').click()

# 模糊定位(结尾)
driver.find_element(By.XPATH, '//android.widget.ImageView[ends-with(@resource-id,"pic")]').click()

# 模糊定位(开始)
driver.find_element(By.XPATH, '//android.widget.ImageView[starts-with(@resource-id,"pic")]').click()

数据驱动

# csv数据驱动
def get_data_csv(filepath):
    lis = []

    with open(filepath) as f:
        data = csv.reader(f)

        next(data)
        for line in data:
            lis.append(line)

    return lis


# execl数据驱动
def get_data_excel(filepath, sheetname):
    data = load_workbook(filepath)
    value = data[sheetname]
    
    lis = []
    
    for line in value:
        l1 = [line[0].value, line[1].value, line[2].value, line[3].value]
        lis.append(l1)

    lis.pop(0)
    return lis

测试报告

# html测试报告
import HTMLTestRunner_cn
import unittest


def report():
    report = HTMLTestRunner_cn.HTMLTestRunner(
        open('./report/report.html'', 'wb'),
        description='本次执行了xx条用例',
        title='测试报告'
    )

    return report


if __name__ == '__main__':
    suite = unittest.defaultTestLoader.discover(start_dir='./case', pattern='test*.py')
    Tools().report().run(suite)

元素值

# html测试报告
import HTMLTestRunner_cn
import unittest


def report():
    report = HTMLTestRunner_cn.HTMLTestRunner(
        open('./report/report.html'', 'wb'),
        description='本次执行了xx条用例',
        title='测试报告'
    )

    return report


if __name__ == '__main__':
    suite = unittest.defaultTestLoader.discover(start_dir='./case', pattern='test*.py')
    Tools().report().run(suite)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值