# automated-testing **Repository Path**: kunyuan-hongke/automated-testing ## Basic Information - **Project Name**: automated-testing - **Description**: 自动化脚本测试 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 2 - **Created**: 2025-02-21 - **Last Updated**: 2025-06-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 自动化脚本使用说明 ## 1.环境搭建 1.下载并安装git,之后输入命令行拉取项目: git clone https://gitee.com/kunyuan-hongke/automated-testing.git 2.安装python (版本只支持3.10系列) 官网:https://www.python.org/ 安装后配置环境变量,系统变量下的path新增 例如: D:\python310\Scripts D:\python310 3.安装python环境依赖 具体参考 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/hypium-python-guidelines-V13 图片识别依赖 pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple 4.下载安装pycharm 官网:https://www.jetbrains.com.cn/en-us/pycharm/ 注意:最好安装2022.3和2024之间版本,插件可能会不支持 5.安装**DevEco Testing Hypium**插件 参考 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/hypium-python-guidelines-V13 如果安装不上,检查压缩包,可能藏在压缩包里面了 ## 2.框架结构 ``` HypiumProjectTemplate | |----aw // 工程中自定义模块文件夹,存放公共方法 | | |----Utils.py // 示例模块文件 | |----config // 测试工程配置文件夹 | | |----user_config.xml // 测试工程配置文件,主要是测试框架的任务配置 | |----resource // 测试资源文件夹,测试过程中用到的资源文件默认会优先从当前文件夹进行查找 | |----testcases // 测试用例文件夹,测试过程中的测试用例文件优先会从当前文件夹进行查找 | | |----Example.json // Example测试用例配置文件,配置用例设备信息等 | | |----Example.py // Example测试用例文件,实际的测试逻辑代码 | |----main.py // 测试用例执行入口 ``` ## 3.代码编写规范 ``` # !/usr/bin/env python # coding: utf-8 """ #!!================================================================ #版权 (C) 2025, Huawei Technologies Co. #================================================================== #文 件 名: ThirdParty_react_native_community_segmented_control_Function_001.py #文件说明: 分段控件可以具有值和图像 #作 者: ty-cy #生成日期: 2025-03-25 #!!================================================================ """ from devicetest.core.test_case import TestCase, Step, CheckPoint from hypium import UiDriver, BY, host from aw.app_config import Ty_tester, SegmentedControlTest from aw.common import Common class ThirdParty_react_native_community_segmented_control_Function_001(TestCase): def __init__(self, controllers): self.TAG = self.__class__.__name__ TestCase.__init__(self, self.TAG, controllers) self.driver = UiDriver(self.device1) self.test_dir = SegmentedControlTest.LIBRARY_NAME self.test_point = "分段控件可以具有值和图像" self.except_image = "segmented_control_Function_001.jpg" def setup(self): Step('前置操作:唤醒屏幕回到桌面') self.driver.wake_up_display() self.driver.swipe_to_home() self.driver.clear_app_data(Ty_tester.PACK_NAME) def process(self): Step('测试步骤:1、启动测试demo') self.driver.start_app(Ty_tester.PACK_NAME) CheckPoint("预期结果:1、启动测试demo成功") bundle_name = self.driver.get_current_window().getBundleName() host.check_equal(bundle_name, Ty_tester.PACK_NAME) Step('测试步骤:2、搜索并进入SegmentedControlTest测试目录。') Common(self.driver).search_test_dir(self.test_dir) CheckPoint("预期结果:2、成功进入SegmentedControlTest测试目录") self.driver.check_component_exist(BY.text(self.test_dir), wait_time=1) Step("测试步骤:3、进入到分段控件可以具有值的和属性的测试页面并检查图像和值") comp = self.driver.find_component(BY.text(self.test_point)) CheckPoint("预期结果:3、成功进入到测试页面,值和图像显示正常") host.check_not_equal(comp, None) self.driver.check_image_exist(host.get_resource_path(self.except_image)) def teardown(self): Step('后置步骤:退出并重置测试demo') self.driver.stop_app(Ty_tester.PACK_NAME) self.driver.clear_app_data(Ty_tester.PACK_NAME) self.driver.swipe_to_home() ``` 1. 文件名以测试用例编号命名,类名与文件名相同 2. 每个py脚本对应一个json文件,json文件可以直接复制,然后修改一下路径 3. 每个step对应一个操作步骤,每个checkpoint对应一个预期结果,step和checkpoint之间有空行,形成代码块 4. 测试目录名建议统一存放在app_config.py文件下,自己新建一个类 5. 不要出现空step或空checkpoint,也就是step或checkpoint下无代码 6. 资源文件统一存放在resource下,自己新建对应测试库的文件夹,测试资源以用例编号命名,避免重复 7. 所有用到的text字符串全部封装,代码中不出现字符串 8. 涉及坐标定位不要使用绝对坐标,使用相对坐标 9. 设计图片识别的用例,similarity要大于等于0.95 10. 禁止使用while死循环!!!!!! 11. 图片编号和用例编号一致 12. 封装方法建议自己在Common文件夹下新建库名目录,操作可以封装,禁止封装自定义断言! ## 4.用例执行 方法一: 右键当前py文件,点击执行hypium用例 方法二: 右键测试目录,点击执行当前目录 方法三: 在main文件下指定所需执行的用例文件,具体查看框架下main.py ## **5.报告查看** ``` 当前报告目录(默认目录/指定目录) ​ ├── details(用例步骤截图存放目录) ​ ├── result(模块执行结果存放目录) ​ │ ├── <测试用例1结果>.xml ​ │ ├── ... ... ​ ├── log (设备和任务运行log存放目录) ​ │ ├── <测试用例1设备执行>.log ​ │ ├── ... ... ​ │ ├── <任务执行>.log ​ ├── static (报告展示页面css元素存放目录) ​ ├── summary_report.html(测试任务可视化报告) ​ ├── summary_report.xml(测试任务数据报告) ​ ├── summary.ini(记录测试类型,使用的设备,开始时间和结束时间等信息) ​ ├── task_info.record(记录执行命令,失败用例等清单信息) ``` 或者可以直接之后点击链接查看 ## 6.常见报错 1. [Script-0203016] The file name of the test case must be the same as the class name [Suggestions] 测试用例的文件名与类名必须保持一致 处理方法:测试用例的文件名与类名必须保持一致类名和文件名不一致,检查类名和文件名 2. [Script-0203003] Step uioperator.check_image_exist result TestError! 处理方法:图片识别失败,截图不清晰或者未找到图片,检查步骤或者重新截图 3. invalid Ui Operation target Point, expect [By, UiComponent, tuple] 处理方法:UI元素定位格式写错,查看BY里面的内容 4. [Script-0203002] Can't find component with [BY.key('KeyHideKbd')] 处理方法:找不到元素,检查页面是否能定位到这个元素,或者定位内容是否正确 5. [Suggestions] 测试用例的设备条件不满足设备不支持 处理方法:检查设备是否成功连接 6. 测试用例执行失败[01210]: 'NoneType' object has no attribute 'flush' 处理方法:一般为使用findcomponent方法未找到元素后又调用空对象导致,确认findcomponent方法是否获取到元素对象 7. [Suggestions] 测试资源文件不存在 处理方法:一般是调用测试资源时报错,检查框架内是否有对应的测试资源文件 8. [Script-0203002] 'NoneType' object has no attribute 'powerApiHelper' 处理方法:疑似框架bug,创建类进行实例化就失败了,重跑验证即可 9. [Script-0203002] module 'hypium.action.host.host' has no attribute 'check_starts_with' 处理方法:框架版本更新后导致方法废弃,建议更换断言方法 ## 7.代码提交流程 ``` 1.创建个人分支 2.完成脚本编写后提交推送到自己的个人分支,推送之前先更新dev的最新分支,然后合并到自己的个人分支,如果有冲突本地解决 3.在Gitee仓库页面新建代码评审,附带连跑全部pass的报告截图 4.联系陈阳,朱应龙,蔡光庆进行代码评审,评审后可合并到dev分支 5.更多规范请参考MJ项目自动化框架说明 ```