没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
common:用于存放一些公共方法文件;
config:用于存放相关配置文件;
outputs:用于存放log及测试报告文件;
pageobjects:用于存放测试的相关方法封装文件;
testcase:用于存放测试用例文件;
编辑
common文件中目前主要存放了4个基础方法文件,本别是项目相关路径、被测app相关信息、页面元
素基础操作方法、yaml文件读取写入方法文件,以下分别介绍具体内容。
此文件主要用于配置相关文件的读取路径,包括:log文件存储路径、测试报告输出路径、图片存储路
径等。
一、项目整体结构
二、common文件夹
1.all_path.py
import os1
2
base_path = os.path.dirname(os.path.dirname(__file__)) # 获取当前文件所在目录的上两级路径
即项目根目录
3
4
appPath = os.path.join(base_path, 'app')5
appium_server_logPath = os.path.join(base_path, 'Outputs', 'appium_log.log')6
存放cmd命令操作app方法,当前项目中暂未使用待后续研究熟悉后可使用该文件封装的方法进行自
动启动、停止appium服务及操作app。
configPath = os.path.join(base_path, 'Config')7
outputsPath = os.path.join(base_path, 'Outputs')8
logPath = os.path.join(base_path, 'Outputs', 'logs')9
picturePath = os.path.join(base_path, 'Outputs', 'picture')10
reportsPath = os.path.join(base_path, 'Outputs', 'reports')11
12
2.app_info.py
import subprocess1
import logging2
import os3
from Common.all_path import appPath4
5
6
def exec_cmd(cmd) -> str:7
result = os.popen(cmd).read()8
return result9
10
11
def get_app_name(file_dir) -> str:12
for root, dirs, files in os.walk(file_dir):13
files = [file for file in files if file.endswith(".apk")]14
if len(files) == 1:15
return files[0]16
else:17
raise FileNotFoundError("{}目录下没有测试包或者存在多个测试包
".format(file_dir))
18
19
20
def get_app_package_name() -> str:21
cmd = "aapt dump badging {} | findstr package".format(os.path.join(appPath,
get_app_name(appPath)))
22
result = exec_cmd(cmd)23
if "package" in result:24
package_name = result.strip().split(" ")[1].split('=')[1]25
return package_name26
else:27
raise NameError("未获取到package name")28
29
30
def get_app_launchable_activity() -> str:31
cmd = "aapt dump badging {} | findstr launchable".format(os.path.join(appPath,
get_app_name(appPath)))
32
result = exec_cmd(cmd)33
if "launchable" in result:34
launchable_activity = result.strip().split(" ")[1].split('=')
[1].replace("label", '')
35
return launchable_activity36
else:37
raise NameError("未获取到launchable activity")38
39
40
def get_devices_version(device: str) -> str:41
if not isinstance(device, str):42
raise Exception("device type is should str..")43
result = exec_cmd("adb -s {} shell getprop
ro.build.version.release".format(device))
44
result = result.strip()45
if "error" not in result:46
return result47
else:48
raise Exception("获取设备系统版本失败,无法进行正常测试")49
50
51
def get_all_devices() -> list:52
result = exec_cmd('adb devices')53
result = result.strip().split(" ")[3].replace("\n", '').replace("\t", ''). \54
replace("attached", '').split('device')55
result.remove('')56
if len(result) == 0:57
raise Exception("电脑未连接设备信息,无法进行正常测试")58
return result59
60
61
def get_device_infos():62
""" [{'platform_version': '8.1.0', 'server_port': 4723, 'system_port': 8200,
'device': 'HDP9K18629901709'}] """
63
device_infos = []64
devices = get_all_devices()65
for i in range(len(devices)):66
device_dict = {"platform_version": get_devices_version(devices[i]),
"server_port": 4723 + i * 2,
67
"system_port": 8200 + i * 1, "device": devices[i]}68
device_infos.append(device_dict)69
70
if len(device_infos) < 1:71
raise Exception("当前电脑未连接设备信息。。。")72
73
return device_infos74
75
76
def uninstall_app(device_list: list) -> None:77
""" 卸载 app 命令:adb -s 127.0.0.1:HDP9K18629901709 uninstall "com.xkw.client """78
if not isinstance(device_list, list):79
raise Exception("device_list is should list!")80
81
for device_info in device_list:82
cmd = 'adb -s {} uninstall "{}"'.format(device_info.get("device").split(':')
[-1],
83
str(get_app_package_name())).replace("'", '')
84
logging.info("开始卸载设备上应用:{}".format(cmd))85
exec_cmd(cmd)86
87
88
def install_app():89
""" 下载app """90
subprocess.Popen('chcp 65001', shell=True)91
cmd = 'adb install {}'.format(os.path.join(appPath, get_app_name(appPath)))92
logging.info("开始下载设备上应用:{}".format(cmd))93
subprocess.Popen(cmd, shell=True, stderr=subprocess.PIPE)94
95
96
def check_kill_appium(port):97
""" 备选方案 杀掉appium 在端口只有1个的时候作用 """98
base文件主要存放已经封装好的一些页面元素操作方法,包括:查找元素、点击元素、获取元素文本
等...
cmd = 'netstat -o -n -a | findstr {}'.format(port['server_port'])99
result = exec_cmd(cmd)100
if "LISTENING" in result:101
package_name = result.strip().split(" ")[-1]102
cmds = 'taskkill /f /pid {}'.format(package_name)103
result = exec_cmd(cmds)104
if 'PID' in result:105
logging.info('释放端口: {} 成功'.format(result))106
return result107
else:108
raise NameError("未成功: 终止 PID 为 {} 的进程".format(result))109
else:110
raise NameError("appium服务未开启")111
112
113
def kill_app():114
""" 备选方案 杀掉appium 在端口只有1个的时候作用 """115
device_dict = get_device_infos()[-1]116
cmd = 'netstat -o -n -a | findstr {}'.format(device_dict['server_port'])117
result = exec_cmd(cmd)118
if "LISTENING" in result:119
cmds = 'taskkill /f /t /im node.exe'120
result = exec_cmd(cmds)121
if 'PID' in result:122
return result123
else:124
raise NameError("未成功: 终止 PID 为 {} 的进程".format(result))125
else:126
raise NameError("appium服务未开启")127
128
3.base.py
import time1
剩余26页未读,继续阅读
资源评论
Paul.Wang
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- # 微信小程序-健康菜谱 基于微信小程序的一个查找检索菜谱的应用 ### 效果 !动态图(./res/gif/demo
- zabbix-get命令包资源
- 毕业设计,基于PyQt5实现的可视化界面的Python车牌自动识别系统源码
- 26-朴素贝叶斯分类.rar
- 没有安Matlab 也可以 生成FIR抽头系数工具.py
- python烟花代码.rar
- 实验目的: 1.构建基于verilog语言的组合逻辑电路和时序逻辑电路; 2.掌握verilog语言的电路设计技巧 3.完成如
- 扩展卡尔曼滤波matlab仿真
- 3_base.apk.1
- 躺赢者PRO飞控常见典型问题合集(续一)无名小哥 余义 20240501待修
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功