# coding_auto_test **Repository Path**: wind_juvenile_admin/coding_auto_test ## Basic Information - **Project Name**: coding_auto_test - **Description**: 自动化测试 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-03 - **Last Updated**: 2025-07-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README - [1. 基本要求和规范](#1-基本要求和规范) - [2. 使用](#2-使用) - [2.1. 开发环境直接使用](#21-开发环境直接使用) - [2.2. docker 中运行](#22-docker-中运行) - [2.2.1. 自动拉取最新代码的镜像(内部使用推荐)](#221-自动拉取最新代码的镜像内部使用推荐) - [2.2.1.1. 镜像](#2211-镜像) - [2.2.1.2. 执行](#2212-执行) - [2.2.2. 包含用例的镜像(不推荐,用于在无法访问花果山的环境运行)](#222-包含用例的镜像不推荐用于在无法访问花果山的环境运行) - [2.2.2.1. 镜像](#2221-镜像) - [2.2.2.2. 执行](#2222-执行) - [3. 快速入门](#3-快速入门) - [4. 项目说明](#4-项目说明) - [4.1. 目录结构](#41-目录结构) - [4.2. 配置说明](#42-配置说明) - [4.2.1. 配置参数说明](#421-配置参数说明) - [4.2.2. 如何使用配置参数](#422-如何使用配置参数) - [5. 数据脱敏](#5-数据脱敏) - [5.1. 脱敏方案](#51-脱敏方案) - [5.2. 使用私有数据加载器加载私有化配置](#52-使用私有数据加载器加载私有化配置) - [5.2.1. 数据分类](#521-数据分类) - [5.2.2. 使用方法](#522-使用方法) - [6. 私有数据说明](#6-私有数据说明) - [6.1. CODING-ORBIT](#61-coding-orbit) - [7. 自测报告和私有化验收用例列表导出工具](#7-自测报告和私有化验收用例列表导出工具) - [7.1. 规范](#71-规范) - [7.1.1. 用例标签](#711-用例标签) - [7.2. 配置说明](#72-配置说明) - [7.3. 流水线使用](#73-流水线使用) # 1. 基本要求和规范 - python版本: 3.7 - 依赖管理: 所使用到的依赖包必须添加到requirement.txt - 目录名和文件名不能包含中横线 - 接口自动化测试加上用例信息标识:@auto_test_case,用于收集各模块用例覆盖度情况(必须) - 使用@pytest.mark.P0 @pytest.mark.P1 @pytest.mark.P2 @pytest.mark.P3对用例进行分级(必须) # 2. 使用 ## 2.1. 开发环境直接使用 1. 安装依赖包 ```pip install --default-timeout=6000 -i https://mirrors.tencent.com/pypi/simple/ -r reqs.txt``` 2. 执行 ``` ./run.sh``` 3. 报告,这里使用pytest-html 4. 本地无日志运行方式: 进入 coding_auto_test 目录下:pytest -v .\testcase\{用例目录} 如:pytest -v .\testcase\coding_ci\ (可以使用 -m 参数指定执行的用例级别,eg: -m P0) 5. 本地打开日志运行方式:进入 coding_auto_test 目录下:pytest -vs .\testcase\{用例目录} 如:pytest -vs .\testcase\coding_ci\ (可以使用 -m 参数指定执行的用例级别,eg: -m P0) 6. 如果需要用例并行,[参考文档](https://devops.codingcorp.net/p/cqt/wiki/14) ; 该功能慎重使用,会导致原用用例执行失败 7. 接口自动化用例需要在QTA执行,因此每个模块需要到QTA平台创建测试任务,[QTA入口](http://qta.woa.com/codingSaasAutoTesting/autotest/testcase) 使用上有问题找rongbiwei。 ## 2.2. docker 中运行 ### 2.2.1. 自动拉取最新代码的镜像(内部使用推荐) #### 2.2.1.1. 镜像 该方式已经预打包镜像,可直接使用,有疑问请联系@pinhaozhang ``` devops-docker.pkg.codingcorp.woa.com/coding-standard/tester/coding_auto_test:latest ``` #### 2.2.1.2. 执行 ```bash # 可以支持一次执行多个模块,比如TEST_MODULES="coding_ci coding_cd" docker run --env-file {环境配置文件, 可选} -e TEST_MODULES={模块名, 可选} -e TEST_BRANCH={版本分支, 可选} -e TEST_REPO_USER_NAME={花果山令牌用户名} -e TEST_REPO_USER_PASSWORD={花果山令牌} -e PYTEST_MARK={用例标记, 可选} -v {本地报告存放目录}:/data/output/report {镜像名} # 使用示例 docker run -e TEST_BRANCH=release-2023.03.13 -e TEST_REPO_USER_NAME=保密*** -e TEST_REPO_USER_PASSWORD=保密*** -e PYTEST_MARK="P0 and utc" -v /data/report:/data/output/report devops-docker.pkg.codingcorp.woa.com/coding-standard/tester/coding_auto_test:latest ``` 参数说明: - --env-file: 环境配置文件, 可选。 - -e TEST_MODULES: 模块名, 支持多个,比如"coding_ci coding_cd"。可选,默认是所有模块。 - -e TEST_BRANCH: 版本分支, 比如 release-2023.04.10。可选, 默认是master分支。 - -e TEST_REPO_USER_NAME: 花果山令牌用户名, 必填。 - -e TEST_REPO_USER_PASSWORD: 花果山令牌, 须具备仓库访问权限, 必填。 - -e PYTEST_MARK: pytest用例标记, 比如 "P0 and utc"。 可选。 ### 2.2.2. 包含用例的镜像(不推荐,用于在无法访问花果山的环境运行) #### 2.2.2.1. 镜像 花果山中维护了一个[自动化测试镜像发版流水线](https://devops.codingcorp.woa.com/p/cqt/ci/job?id=91662), 产生的制品详情可在[标准化制品库](https://devops.codingcorp.woa.com/p/coding-standard/artifacts/187848/docker/package/99536/version/overview)查看, 为了方便获取,制品上传到了两个地方, 地址如下: ``` 花果山标准化制品库: devops-docker.pkg.codingcorp.woa.com/coding-standard/tester/coding_autotesting_utility TCR: coding-standard-artifacts.tencentcloudcr.com/standard/coding_autotesting_utility ``` #### 2.2.2.2. 执行 ```bash # 可以支持一次执行多个模块,比如TEST_MODULES="coding_ci coding_cd" docker run --env-file {环境配置文件} -e TEST_MODULES={模块名} -v {本地报告存放目录}:/data/coding_auto_test/outputs {镜像名} ``` 参数说明: - --env-file: 环境配置文件, 可选。 - -e TEST_MODULES: 模块名, 支持多个,比如"coding_ci coding_cd"。可选,默认是所有模块。 # 3. 快速入门 ```text 1. 根目录下的 conftest.py 中 fixture 函数 sys_init,包含环境信息,初始化项目信息,写自动化用例时直接调用即可 如:def test_xxx(sys_init): pass 2. 可在 testcase 下的业务模块自定义 conftest.py 中 fixture 函数, 用于业务模块用例拓展调用 如:-- testcase -- coding_ci -- conftest.py 3. 业务模块公共方法调用,减少重复实现,可自定义 modules 或 fixture 如: -- common -- modules -- ci_modules.py 4. 请求 url 统一定义再 request_url 下,快速查找引用 如: -- common -- request_url 5. response jmespath 解析提取 json 数据 - 帮助文档:https://jmespath.org/tutorial.html#projections 如:id = response.jmespath("data.id") 6. 断言使用:assert 判断, "失败描述" 如:assert response.jmespath("code") == 0, "创建制品库失败" ``` # 4. 项目说明 ## 4.1. 目录结构 ``` -- common -- 公共工具 -- 1.请求封装 requests、login -- 2.读取配置文件封装 -- 3.读取数据库 Mysql 封装 -- 4.日志文件封装 -- conf -- 配置文件 .ini -- 服务器地址配置 -- 数据库配置 -- testcase -- 业务流用例 -- testdata 通用的非敏感的测试数据放这里 -- json 数据文件 -- yaml 数据文件 -- excel 数据文件 -- private 敏感的或非通用的测试数据放这里 -- ssh key -- kubeconfig -- acount/password -- conftest.py 全局fixture,登录、创建测试项目执行完毕归档 -- outputs -- logs -- reports -- tools CODING质量部的自动化工具 -- main.py —— 拨测程序入口 ``` ## 4.2. 配置说明 ### 4.2.1. 配置参数说明 目前CODING测试大仓更新为环境变量配置环境参数的形式,支持两种倒入形式: - 直接在系统中设置环境变量 - 在conf文件夹中放置 **.env** 文件,由框架自动加载 不管哪种方式,变量名称是不变的,支持的环境变量的示例如下: ```toml # 账号设置, 格式 account:password ## 默认管理员账号 DEFAULT_ACCOUNT="coding@coding.com:coding123" ## 辅助账号1 HELP1_ACCOUNT="user@coding.com:123456" #Env 全局设置 ## 组织名称(GK) GLOBAL_SETTING_ORGANIZATION="codingcorp" ## 主机名称 GLOBAL_SETTING_HOST="dnt-cqt-int.dnt.codingcorp.net" ## 协议: http/https GLOBAL_SETTING_PROTOCOL="http" ## 是否可以访问公网(制品库关注) GLOBAL_SETTING_IS_ONLINE=1 ## 访问令牌,不填则自动创建 GLOBAL_SETTING_PAT="" ## 测试项目名称前缀 GLOBAL_SETTING_PROJECT_PREFIX="coding-xxx" ## 测试完毕后是否删除项目?0: 归档,1: 删除 ,-1: 保留项目 GLOBAL_SETTING_DELETE_PROJECT=0 ## 部署地域(拨测关注) GLOBAL_DEPLOYMENT_LOCATION="unknown" # 是否调用新权限相关接口?0: 旧,1: 新 IS_NEW_PERMISSIONS=1 ## 私有化环境 1:是, 0: 否 GLOBAL_IS_PRIVATIZATION=0 ## 最小化部署环境 1:是, 0: 否 GLOBAL_IS_MINIMAL_DEPLOYMENT=0 #模块设置 ## 代码仓库是否跳过SSH用例 REPOS_SETTING_SKIP_SSH_CASES=1 ## CI线上是否跳过执行 CI_SETTING_SKIP_CASES=1 ## CI自定义节点是否移除 CI_REMOVE_AGENT=1 ## CI检出是否使用HTTP?0: SSH, 1: HTTP CI_HTTP_CLONE=0 ``` **注:** - 环境变量可以选配,如果不设置,会使用上面示例中的值作为默认值。比如合流环境只有主机名和默认配置是不一样的,所以只需要设置GLOBAL_SETTING_HOST这个环境变量即可 ```toml GLOBAL_SETTING_HOST="dnt-intergrate.dnt.codingcorp.net" ``` - Docker的env-file会将双引号直接带入环境变量中,此时建议删除环境变量中的双引号 ### 4.2.2. 如何使用配置参数 - 访问全局配置参数 ```python # 访问形式 env_config.global_setting.[参数名] # 示例 env_config.global_setting.is_privatization ``` - 访问模块的配置参数 ```python # 访问形式 env_config.module_settings.[模块名].[参数名] # 示例 env_config.module_settings.coding_repos.is_skip_ssh_test_cases ``` 使用示例: ```python import pytest from common.config_manager.config import env_config @pytest.mark.skipif(env_config.global_setting.is_privatization is True) def test_abc(): pass @pytest.mark.skipif(env_config.module_settings.coding_repos.is_skip_ssh_test_cases is True) def test_efg(): pass ``` # 5. 数据脱敏 ## 5.1. 脱敏方案 CODING的业务与研发系统是紧密结合的,所以测试用例也有很多对研发基础设施的操作,这就要利用到基础设施的账号密码、密钥等私有数据,这些配置是不通用的,且有些是需要保密的,因此在私有化交付之前需要将这些私有数据删除,同时还要告知客户如何导入这些数据。 为了方便私有数据的统一管理,在CODING的自动化测试用例大仓中新增一级目录private, 各业务模块按照模块名创建二级目录,并将私有数据放入其中(对于二级目录内数据的存放形式不作限制)。为了方便私有化场景的使用,每一项私有数据都必须添加配置说明,放入README.md中。 ```text private ├── coding_cd └── coding_ci ``` 对于不同的使用场景,代码大仓里的保密数据会做不同的处理 - 公司内部使用时,私有数据不做处理,当需注意不要将内部镜像交付到私有化场景。 - 私有化场景使用,会在打包镜像时删除private_data目录,客户环境需要根据私有数据配置说明提供私有数据,才能运行相关的测试用例。 对于私有化场景,由于存在多种运行形式(核心点在于本地运行和集群中运行),因此需要支持本地docker模式和集群模式的数据导入,需要和testsolar的同学沟通支持状况。 ## 5.2. 使用私有数据加载器加载私有化配置 由于私有化数据较多,对于客户不需要的场景可以不去跑自动化测试,也无需准备数据,但用例是存在的,因此需要在数据不存在时自动跳过用例。为了解决这个问题,我们需要提供一个私有化数据的抽象,能够反映出私有数据的状态,让测试框架识别出此状态并决定是否跳过用例。 ### 5.2.1. 数据分类 首先把私有化数据分为两类: - ConfigType.DATA: 纯数据类型,即一个文件对应于一个配置,例如kubeconfig - ConfigType.YAML: 使用YAML保存的键值对数据类型, 例如Orbit模块用到的数据库配置 这里约定用enabled字段来指示配置的可用性,定义如下: - 对于DATA类型,如果文件存在,则enabled为True,反之则为False - 对于YAML类型,如果配置模块存在enabled字段且为True或成员数据项数大于0为True,反之则为False。 YAML类型推荐的格式如下: ```yaml ### 自定义 mysql 实例 customize_mysql: # 配置模块的名称 enabled: true # enabled字段, 指示是否开启相关用例 cus_mysql_instance_ip: "127.0.0.1" # 数据配置项目 cus_mysql_port: 3306 cus_mysql_username: "xxx" cus_mysql_password: "xxx" ``` ### 5.2.2. 使用方法 假定存在一个DATA类型的数据位于private/examples/kubeconfig,一个YAML类型的文件位于private/examples/databases.yaml - 首先将配置的名称、路径、类型写入一个元组中 ```python _private_config_tuple = ( # 配置名称 文件路径(相对根目录) 配置类型 ('my_kubeconfig', 'private/examples/kubeconfig', ConfigType.DATA), ('my_databases', 'private/examples/databases.yaml', ConfigType.YAML) ) ``` - 然后使用private_data_loader里面的load_configs函数加载数据配置 ```python private_configs = load_configs(_private_config_tuple) ``` - 访问私有化配置数据 - DATA类型 ```python # 配置可用性 private_configs.[配置名称].enabled private_configs.my_kubeconfig.enabled # 文件路径 private_configs.[配置名称].path private_configs.my_kubeconfig.path ``` - YAML类型 ```python # 配置可用性 private_configs.[配置名称].[配置模块名称].enabled private_configs.my_databases.customize_mysql.enabled # 文件路径 private_configs.[配置名称].[配置模块名称].[配置项] private_configs.my_databases.customize_mysql.cus_mysql_instance_ip ``` - 如何让测试框架根据配置是否存在跳过用例 ```python @pytest.mark.skipif(private_configs.my_kubeconfig.enabled is False, reason="xxx配置文件不存在") def test_xxx(): pass @pytest.mark.skipif(private_configs.my_databases.customize_mysql.enabled is False, reason="xxx配置不存在") def test_xxx(): pass # fixture 中跳过用例 @pytest.fixture(scope="session") def example_fixture(): tcr_config = private_configs.orbit_tcr.tencent_tcr if tcr_config.enable is False: pytest.skip(f"orbit tencent_tcr 实例未配置或已关闭: {tcr_config}") ``` 建议每个模块在自己的目录建立一个private_config.py并按照下面的示例加载配置文件,然后在测试用例文件中导入private_configs变量就可以使用了。 ```python from common.config_manager.private_data_loader import load_configs, ConfigType _private_config_tuple = ( # 配置名称 文件路径(相对根目录) 配置类型 ('orbit_k8s_conf', 'private/coding_orbit/k8s_cluster/auto_orbit.conf', ConfigType.DATA), ('orbit_databases', 'private/coding_orbit/orbit_database_instance.yml', ConfigType.YAML) ) private_configs = load_configs(_private_config_tuple) if __name__ == "__main__": print(private_configs.orbit_databases.cus_mysql.enabled) ``` # 6. 私有数据说明 ## 6.1. CODING-ORBIT 1. private/coding_orbit/k8s_cluster/auto_orbit.conf ```text 测试环境的目标集群的kubeconfig,目标集群要求: - 目前集群版本支持 KUBERNETES_VERSION: v1.16 及更高版本 - 目标集群大小需4核8G及以上,以免因集群太小导致资源部署不起来 ``` 2. private/coding_orbit/orbit_database_instance.yml ```yaml # 自定义 mysql 实例 cus_mysql: ## 是否开启 enabled: true ## 自定义-mysql 的实例 IP(主机地址) cus_mysql_instance_ip: "" ## 端口 cus_mysql_port: ## 自定义-mysql 账号 cus_mysql_username: "" ## 自定义-mysql 密码 cus_mysql_password: "" # cvm mysql 实例 (需要测试环境绑定腾讯云账号) cvm_mysql: ## 是否开启 enabled: true ## 腾讯云源实例 ID cvm_mysql_src_instance_id: "" ## 端口 cvm_mysql_port: ## 腾讯云源实例所在地域 cvm_mysql_region: "" ## cvm-mysql 账号 cvm_mysql_username: "" ## cvm-mysql 密码 cvm_mysql_password: "" ## cvm-mysql 实例 IP(主机地址) cvm_mysql_instance_ip: "" ## 腾讯云实例专有网络 ID cvm_mysql_vpc_id: "" ## 腾讯云实例子网 ID cvm_mysql_subnet_id: "" # cdb mysql 实例(需要测试环境绑定腾讯云账号) cdb_mysql: ## 是否开启 enabled: true ## 腾讯云源实例 ID cdb_mysql_src_instance_id: "" ## 腾讯云源实例所在区域 cdb_mysql_region: "" ## cdb-mysql 账号 cdb_mysql_username: "" ## cdb-mysql 密码 cdb_mysql_password: "" ## cdb-mysql 实例 IP(主机地址) cdb_mysql_instance_ip: "" ## 端口 cdb_mysql_port: ## 腾讯云源实例专有网络 ID cdb_mysql_vpc_id: ## 腾讯云源实例子网 ID cdb_mysql_subnet_id: # oracle 实例 oracle: ## 是否开启 enabled: true ## oracle 实例 ip(主机地址) oracle_instance_ip: "" ## 端口 oracle_port: ## oracle 账号 oracle_dba_username: "" ## oracle 密码 oracle_dba_password: "" ## oracle 普通账号 oracle_username: "" ## oracle 普通账号密码 oracle_password: "" ## oracle 实例名 oracle_instance_name: "" ## oracle 预执行实例账号 oracle_pre_username: "" ## oracle 预执行实例密码 oracle_pre_password: "" ## oracle 预执行实例名 oracle_pre_instance_name: "" ## oracle 预执行实例 ip(主机地址) oracle_pre_instance_ip: "" ## oracle 预执行实例端口 oracle_pre_port: # postgres 实例 ## postgres 实例 IP(主机地址) postgres: ## 是否开启 enabled: true postgres_instance_ip: "" ## 端口 postgres_port: ## postgres 账号 postgres_username: "" ## postgres 密码 postgres_password: "" # tdsql-mysql 实例 ## tdsql-mysql 实例 IP(主机地址) tdsql_mysql: ## 是否开启 enabled: true ## tdsql-mysql 实例 IP(主机地址) tdsql_mysql_instance_ip: "" ## 端口 tdsql_mysql_port: ## tdsql-mysql 账号 tdsql_mysql_username: "" ## tdsql-mysql 密码 tdsql_mysql_password: "" ## tdsql-mysql 预执行实例账号 tdsql_mysql_pre_instance_ip: "" ## tdsql-mysql 预执行实例端口 tdsql_mysql_pre_port: ## tdsql-mysql 预执行实例账号 tdsql_mysql_pre_username: "" ## tdsql-mysql 预执行实例密码 tdsql_mysql_pre_password: "" # tdsql-postgres 实例 tdsql_postgres: ## 是否开启 enabled: true ## tdsql-postgres 实例 IP(主机地址) tdsql_postgres_instance_ip: "" ## 端口 tdsql_postgres_port: ## tdsql-postgres 账号 tdsql_postgres_username: "" ## tdsql-postgres 密码 tdsql_postgres_password: "" ## tdsql-postgres 预执行实例 IP(主机地址) tdsql_postgres_pre_instance_ip: "" ## tdsql-postgres 预执行实例端口 tdsql_postgres_pre_port: ## tdsql-postgres 预执行实例账号 tdsql_postgres_pre_username: "" ## tdsql-postgres 预执行实例密码 tdsql_postgres_pre_password: "" ``` 3. private/coding_orbit/orbit_tcr.yml ```yaml # Tencent TCR 企业版镜像仓库(需要测试环境绑定腾讯云账号,且有容器镜像服务实例和 TCR 镜像) tencent_tcr: ## 是否开启 enabled: true ## 从腾讯云获取 Tencent TCR 企业版镜像所在区域 tcr_region: "" ## 从腾讯云获取实例 tcr_instance: "" ## 从腾讯云获取实例 tcr_registry_name: "" ## 从腾讯云获取命名空间 tcr_namespace: "" ## 从腾讯云获取仓库 tcr_registry: "" ## 从腾讯云获取版本 tcr_version: "" ``` ## 6.2. CODING-CD 1. private/coding_cd/account/cd_host_info.yaml ```yaml cus_host: ## 是否开启 enabled: true ## 主机组端口 host_port: ## 主机组密码 host_password: ``` 2. private/coding_cd/account/cd_kubeconfig.yaml ```text 测试环境的目标集群的kubeconfig,要求开通与被测环境ip白名单 ``` 3. private/coding_cd/account/cd_service_account.yaml ```text 测试环境的目标集群生成的service account,要求开通与被测环境ip白名单 ``` 4. private/coding_cd/account/cd_host_info.yaml ```yaml cust_tencent_info: ## 是否开启 enabled: true ## Tencent TKE 集群所在地域 tencent_region: "" ## Tencent Secret Id tencent_secret_id: "" ## Tencent Secret Key tencent_secret_key: "" ## TKE 集群上下文名称 tke_cluster_id: "" ## TKE 集群名称 tke_cluster_name: "" ## TCR仓库镜像(运行时k8s_account提供的云账号需登录该TCR仓库!!!) tcr_docker_image: "" ``` 5. private/coding_cd/pipeline/tsf_container_deploy_tsf ```text TSF容器部署阶段部署流程配置,在保存该部署流程时,捕获post接口的json参数复制到该文件中,并替换以下两个键的值 "application": application_name "id": pipeline_id ``` 6. private/coding_cd/publish/tsf_container_deploy_tsf ```text TSF容器部署阶段发布单配置,在发布该部署流程时,捕获post接口的json参数复制到该文件中,并替换以下两个键的值 "application": application_name "pipelineConfigId": pipeline_id ``` 7. private/coding_cd/pipeline/tsf_vm_deploy_tsf ```text TSF虚拟机部署阶段部署流程配置,在保存该部署流程时,捕获post接口的json参数复制到该文件中,并替换以下两个键的值 "application": application_name "id": pipeline_id ``` 8. private/coding_cd/publish/tsf_vm_deploy_tsf ```text TSF虚拟机容器部署阶段发布单配置,在发布该部署流程时,捕获post接口的json参数复制到该文件中,并替换以下两个键的值 "application": application_name "pipelineConfigId": pipeline_id ``` 9. private/coding_cd/pipeline/tsf_vm_deploy_with_coding_generic ```text TSF虚拟机部署阶段部署流程配置,该部署流程使用CODING generic制品上传,在保存该部署流程时,捕获post接口的json参数复制到该文件中,并替换以下两个键的值 "application": application_name "id": pipeline_id ``` 10. private/coding_cd/publish/tsf_vm_deploy_with_coding_generic ```text TSF虚拟机容器部署阶段发布单配置,在发布该部署流程时,捕获post接口的json参数复制到该文件中,并替换以下两个键的值 "application": application_name "pipelineConfigId": pipeline_id ``` # 7. 自测报告和私有化验收用例列表导出工具 该[工具](tools/standard_case_list_exporter/)可以根据[配置文件](tools/standard_case_list_exporter/standard_case_export_config.yaml)自动生成私有化验收用例和自测报告。 **注**: 在使用工具之前,需要在coding_auto_test大仓中修改[toos/standard_case_list_exporter/standard_case_export_config.yaml](tools/standard_case_list_exporter/standard_case_export_config.yaml), 添加上自己所负责模块的配置, 然后合并到主干。(也可以先上传到自己的分支,用流水线验证一下) ## 7.1. 规范 ### 7.1.1. 用例标签 **仅限SaaS**: 由于私有化验收时无需验证SaaS才有的功能,因此对于SaaS专有的用例,需要打上**仅限SaaS**的标签 ## 7.2. 配置说明 1. 模块名,需要顶格书写,如coding-testing 2. project, 模块对应的测试用例所在的项目,如 coding-testing 3. owner, 模块对应的测试负责人,可以是多个负责人 4. acceptance_test_case, **可选**,私有化验收用例列表所需的用例配置,不需要请删除该项目 5. self_test_report, 标准化要求的自测报告所需的用例配置 6. acceptance_test_case & self_test_report 用例配置的选项说明: 1. paths, 数组类型,**必填**,导出的用例所在的目录路径 2. exclude_paths, 数组类型,**可选**,在paths的子路径中,部分子文件夹是不需要导出的,可以将其路径填在此处 3. priority_levels, 数组类型,**必填**,导出的用例包含的级别,可以是P0/P1/P2/P3中的一个或多个 4. labels, 数组类型,**可选**,导出的用例必须包含的标签,比如"标准化“。 如果是空的,则表示此处没有限制 5. exclude_labels, 数组类型,**可选**,导出的用例不能包含的标签,比如“SaaS” **注** 所有数组类型的参数如果是空的,请填入方括号[] ```yaml coding-testing: acceptance_test_case: # 此处填入[]表示空的数组 exclude_paths: [] ``` 参考示例 ```yaml # 测试管理模块 coding-testing: project: "coding-testing" owner: - "owner1" - "owner2" # 私有化验收用例 acceptance_test_case: ## 需要导出的目录路径 paths: - "测试管理(标准化)" ## 需要排除的目录,应当是需要导出的目录的子目录 exclude_paths: - "测试管理(标准化)/回收站" - "测试管理(标准化)/左侧菜单" ## 优先级标签: P0/P1/P2/P3, 必填 priority_levels: - "P0" ## 用例的标签,可选, 默认是所有标签 labels: - "标准化" ## 需要排除的用例的标签, 可选, 默认是不排除 exclude_labels: - "仅限SaaS" # 自测报告 self_test_report: ## 需要导出的目录路径 paths: - "测试管理(标准化)" ## 需要排除的目录,应当是需要导出的目录的子目录 exclude_paths: - "测试管理(标准化)/回收站" - "测试管理(标准化)/左侧菜单" ## 优先级标签: P0/P1/P2/P3, 必填 priority_levels: - "P0" - "P1" ## 用例的标签,可选, 默认是所有标签 labels: - "标准化" ## 需要排除的用例的标签, 可选, 默认是不排除 exclude_labels: [] ``` ## 7.3. 流水线使用 打开[流水线](https://devops.codingcorp.woa.com/p/cqt/ci/job?id=92692), 点击立即构建, 选择自己的模块,然后点击确定,即可将自测报告以及私有化验收用例列表导出并上传到标准化制品库。 在流水线stage **打印文件地址**中可以看到报告上传后的地址,点击地址可以查看报告文件内容 # 8. 协同模块UI自动化说明 ### 基于playwright工具实现的web扩平台ui自动化 ## 8.1. 环境配置 ### 执行如下命令 ```text pip install playwright playwright install 启动录制命令 playwright codegen --target python -o baidu_test.py -b chromium https://www.baidu.com/ ``` ## 8.2. ui自动化case的路径: #### testcase路径:testcase_ui/coding_collaboration #### 接口封装路径:common/modules_page #### 页面控件定位: 路径common/page_object