鸿蒙应用自动化测试实践

Appium是移动端自动化测试非常有力的工具,那么对于在鸿蒙设备上自动化测试鸿蒙应用的支持情况如何呢?让我们一起实践看看吧。本文适用于有基础的appium安卓自动化测试经验的读者。

appium连接

首先在连接的初始化设置上,与Android对比有少许区别,下图这样配置可以成功连接操作鸿蒙设备和鸿蒙应用。

class BaseTests(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        cls.desired_caps = initDevices()
        uninstallApp(cls.desired_caps['udid'], cls.PACKAGE_NAME)
        installApp(cls.desired_caps['udid'], cls.apk_path)
        cls.desired_caps['appPackage'] = cls.PACKAGE_NAME
        cls.desired_caps['platformName'] = 'Android'
        cls.desired_caps['noReset'] = True
        cls.desired_caps['appActivity'] = 'MainAbilityShellActivity'   #dumpsys activity | grep -i run |grep 360
        cls.desired_caps['newCommandTimeout'] = "2000"
        cls.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', cls.desired_caps)
        cls.driver.implicitly_wait(10)

**apk_path:**被测鸿蒙应用安装文件xxx.hap的路径。注意填写在这里只是记录路径,appium不支持安装.hap包

**platformName:**可以继续填写Andorid

**appActivity:**即启动打开的页面,可以通过dumpsys activity获取

安装和卸载.hap包

在鸿蒙设备上安装或卸载鸿蒙应用的.hap包,则需要用到hdc命令。

HDC(OpenHarmony Device Connector) 是为开发人员提供的用于设备连接调试的命令行工具,pc端开发机使用命令行工具hdc_std(为方便起见,下文统称hdc),该工具支持部署在Windows/Linux/Mac等系统与OpenHarmony\HarmonyOS设备(或模拟器)进行连接调试通信。

如果你熟悉Android开发,那么一定对adb不会陌生。有关hdc的内容,详见:

hdc支持的命令有:

def installApp(serialNum, packageName):
    try:
        if "Success" in subprocess.check_output("hdc -t {} app install  {}"
                                                        .format(serialNum, packageName),shell=True):
            print(u"安装成功")
            return True
        else:
            print(u"安装失败")
            return False
    except:
        print(u"安装失败")
        return False

def uninstallApp(serialNum, packageName):
    try:
        if "Success" in subprocess.check_output("hdc -t {} app uninstall  {}"
                                                        .format(serialNum, packageName)):
            print(u"卸载成功")
            return True
        else:
            print(u"未安装该应用")
    except:
        pass

关于如何打包一个签名的可安装到真机的.hap包,可参考

https://baijiahao.baidu.com/s?id=1718025528193522223&wfr=spider&for=pc

元素定位

self.driver.find_element_by_id(BaseTests.PACKAGE_NAME + ":id/"+id).click()

而对于鸿蒙应用,则需要这样使用,参数直接填写id即可:

self.driver.find_element_by_id(id).click() #单击按键
self.driver.find_element_by_id("Id_text_field").send_keys("hello123") #输入框输入

org.openqa.selenium.InvalidSelectorException: Locator Strategy 'name' is not supported for this session

this.locatorStrategies = ['xpath', 'id', 'class name', 'accessibility id', '-android uiautomator','name'];

这样就可以通过name定位鸿蒙app的元素了:

self.driver.find_element_by_name("Flush").click()

获取日志

HiLog是OpenHarmony日志系统,提供给系统框架、服务、以及应用打印日志,记录用户操作、系统运行状态等。在测试Android设备时,我们可以通过driver.get_log(“logcat”)获取logcat日志。如果直接传入参数“hilog”显然是不能捕获鸿蒙的hilog日志的,因为appium不支持,会出现如下错误:

需要使用hdc hilog命令获取日志,可参考:

order = 'hdc hilog'
pi = subprocess.Popen(order, shell=True, stdout=subprocess.PIPE)
for i in iter(pi.stdout.readline, 'b'):
    print(i)

其它常用操作,如

self.driver.close_app()  
self.driver.launch_app()
self.driver.hide_keyboard()
self.driver.background_app(5)
……,可正常使用。

不能实现的操作,则需要我们根据鸿蒙的特性和提供的相应开发工具去解决。

兼容性测试

现在部分真机平台还不支持上传和安装.hap包,或者支持的话需要添加真机设备uid至证书才能安装。

可以选择在这个官方地址
https://cn.devecostudio.huawei.com/console/testservice/remote

进行真机租用,不需要修改证书和添加uid,直接上传我们的.hap包即可安装,非常方便。可满足初步的兼容性测试需求。

以上是在鸿蒙应用自动化测试方面的初步实践,欢迎大家留言讨论。

参考文献

转发自 360质量效能