import yaml import appo.common.logger as log import os # config_file_path = 'D:/pycode/appo/conf/config.yml' curPath = os.path.abspath(os.path.dirname(__file__)) rootPath = os.path.split(curPath)[0] config_file_path = rootPath + '\\conf\\config.yml' logger = log.model_logger('redconfig') with open(config_file_path, mode='r', encoding='UTF-8') as f_conf: try: dict_conf = yaml.load(f_conf) except yaml.YAMLError as exc: logger.exception(exc) finally: f_conf.close() def configfile(): return dict_conf # class Config: # """从配置文件得到配置基础数据""" # def __init__(self): # pass # # def read_config_ip(self,config_file): # try: # with open(config_file, 'r') as f:
from appo.common import logger from appo.case.media.ZB.test_audio import Audio log = logger.model_logger('zb_test_audio_press') class AudioPress(Audio): #进入音频播放音乐 def test_scanAudio_press(self, num): i = 0 while True: #循环播放音频 log.info('循环播放第%s次' % i) self.test_scanAudio(num) self.driver.press_keycode(23) i = i + 1 if __name__ == '__main__': p = AudioPress() print(AudioPress.mro()) p.setUp() audiolist = [ 'APE-32', 'flac-19', 'm4a-11', 'mp1-2', 'mp2-20', 'MP3音频(带字幕)-7', 'MP3音频-63', 'OGG音频-19', 'WAV-27', 'WMA音频-19' ] p.test_scanAudio_press(len(audiolist))
import os import subprocess import appo.common.global_var as gl import appo.common.logger as log logger = log.model_logger('connect') def checkandroidevn(self=None): """检查Android adb环境""" if 'ANDROID_HOME' in os.environ: command = os.path.join(os.environ['ANDROID_HOME'], 'platform-tools', 'adb') gl.android_home = True logger.info('android adb 环境存在') else: logger.error('Adb not found in $ANDROID_HOME path: %s.' % os.environ['ANDROID_HOME']) gl.android_home = False raise EnvironmentError('Adb not found in $ANDROID_HOME path: %s.' % os.environ['ANDROID_HOME']) def checkdevcieconnect(): """检查设备是否连接""" cmd = 'adb devices' try: """获取设备列表信息,并用"\r\n"拆分""" deviceinfo = subprocess.check_output(cmd, stderr=subprocess.PIPE,
import re import subprocess from appo.common import connect from appo.common import logger log = logger.model_logger('deviceinfo') """获取设备信息""" def getandroidversion(): """正则获取安卓版本号""" try: # 获取系统设备系统信息 sysinfo = subprocess.check_output( 'adb shell cat /system/build.prop').decode('utf-8') # 获取安卓版本号 androidversion = re.findall('version.release=(\d\.\d.\d)*', sysinfo, re.S)[0] _version = androidversion log.info('安卓版本androidversion=%s' % _version) return _version except Exception as e: log.exception(e) def getdevicename(): """通过正则获取设备名""" shell_getdevice_cmd = 'adb devices -l' try: deviceinfo = subprocess.check_output(shell_getdevice_cmd).decode( 'utf-8')
from appo.case.basecase import BaseCase import unittest from appo.common import logger import time import random from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC ''' 使用此文件时,需要修改test_scanAudio()中的 self.handle_walk_smple(num) num 代表音频格式的数目,例如有5个不同的音频格式文件夹,则num=5 ''' log = logger.model_logger('zb_test_video') class Video(unittest.TestCase, BaseCase): global filename badaudoi_list = [] result = False def setUp(self): caps = self.package_activity_main('zb_fileexplorer') # zb_fileexplorer self.startUp(caps) self.zb_common_casetype_media() def tearDown(self): self.endDown() '''
from appo.common import logger from appo.case.basecase import BaseCase import unittest import time log = logger.model_logger('test_picture') class Toggle_HDMI_Media(unittest.TestCase, BaseCase): def setUp(self): caps = self.package_activity_main('zb_home') self.startUp(caps) def tearDown(self): self.endDown() def into_hdmi(self): self.driver.find_element_by_xpath( "//android.widget.RelativeLayout[@resource-id='xmlauncher.appo.com.xmlauncher4:id/more']/android.widget.ImageView[1]" ).click() # // android.widget.RelativeLayout[ @ resource - id = 'xmlauncher.appo.com.xmlauncher4:id/more'] / # android.widget.ImageView[1] # // android.widget.RelativeLayout[ @ resource - id = 'xmlauncher.appo.com.xmlauncher4:id/more'] #进入音频播放音乐 def zb_common_hdmi_case(self): self.driver.find_element_by_xpath( "//android.widget.RelativeLayout[@resource-id='xmlauncher.appo.com.xmlauncher4:id/more']" ).click() # self.driver.implicitly_wait(3)
from appo.case.basecase import BaseCase import unittest from appo.common import logger import time import random from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC ''' 使用此文件时,需要修改test_scanAudio()中的 self.handle_walk_smple(num) num 代表音频格式的数目,例如有5个不同的音频格式文件夹,则num=5 ''' log = logger.model_logger('zb_test_audio') class Audio(unittest.TestCase, BaseCase): badaudoi_list = [] result = False def setUp(self): caps = self.package_activity_main('zb_fileexplorer') # zb_fileexplorer self.startUp(caps) self.zb_common_casetype_media() def tearDown(self): self.endDown() ''' op :代表用户操作,forward快进,reback快退
from appo.common import logger from appo.case.media.ZB.test_video import Video log = logger.model_logger('zb_test_video_press') class VideoPress(Video): #进入音频播放音乐 def test_scanAudio_press(self, num): i = 0 while True: #循环播放音频 log.info('循环播放第%s次' % i) self.test_scanVideo(num) i = i + 1 if __name__ == '__main__': p = VideoPress() print(VideoPress.mro()) p.setUp() audiolist = ['ASF视频文件', 'AVI视频文件', 'DAT视频文件', 'FLV视频文件', 'MKV'] p.test_scanAudio_press(len(audiolist))
from appo.common import logger import time from appo.case.media.ZB.test_photo import Phote log = logger.model_logger('zb_test_picture_press') class PhotoPress(Phote): def setUp(self): caps = self.package_activity_main('zb_fileexplorer') # zb_fileexplorer self.startUp(caps) self.zb_common_casetype_media() def tearDown(self): self.endDown() #图片轮播 def test_toggleimage_press(self, picturelist): self.driver.find_element_by_xpath( "//android.widget.TextView[@text='【多媒体】图片测试库']").click() i = 0 while True: log.info('循环播放第%s次' % i) self.move_up_until_element_appear( picturelist[0]) #复原,使可以显示出列表种的第一个元素 for picturefile in picturelist: self.move_down_until_element_appear(picturefile) # self.loggle_imagle(picturefile) print(picturefile) subfilecount = picturefile.split('-')[1] xpath = "//*[@text='{}']".format(picturefile)
from appo.common import logger from appo.case.HDMI import test_toggle_HDMI_media log = logger.model_logger('test_toggle_HDMI_press') class Toggle_HDMI_Press(test_toggle_HDMI_media.Toggle_HDMI_Media): # 进入音频播放音乐 def test_toggle_hdmi_press(self): i = 0 while True: # 循环进入退出hdmi通道 if i == 0: #第一次进去时候,需要先定位到更多 self.test_toggle_hdmi('press_first_for') else: self.test_toggle_hdmi('press') i = i + 1 if __name__ == '__main__': t = Toggle_HDMI_Press() t.setUp() t.test_toggle_hdmi_press()
from appo.common import logger from appo.common import myremote from appo.common import global_var as gl log = logger.model_logger('mydriver') port = gl.configFile['appium']['port1'] def driver(caps): selenium_grid_url = 'http://localhost:%s/wd/hub' % port log.info('appiumurl = %s' % selenium_grid_url) try: driver = myremote.remote(selenium_grid_url, caps) log.info('session=%s', driver) return driver except Exception as exc: log.exception(exc)
from appo.common import connect as con from appo.common import logger from appo.common import mydriver from appo.common import tools from appo.common import global_var as gl import datetime import shutil log = logger.model_logger('basecase') class BaseCase: ''' 测试用例基类 ''' appium = tools.AppiumServer() driver = None ip = gl.configFile['ip']['ip5'] port = gl.configFile['appium']['port1'] log.info('ip = %s ; appium_port = %s' % (ip, port)) # 字典映射 xm = gl.configFile['xm'] fm = gl.configFile['fm'] zb = gl.configFile['zb'] def switcher(self, casetype): switch = { 'xm_home': [ self.xm['package']['xm_home'], self.xm['activity']['homeactivity']
from appo.common import logger from appo.common import deviceinfo from appium import webdriver from appo.common import global_var as gl log = logger.model_logger('remote') def remote(url, packageandactivity): '''远程连接''' log.info('package=%s,activity=%s', packageandactivity[0], packageandactivity[1]) desired_caps = { "platformName": "Android", "deviceName": deviceinfo.getdevicename(), "platformVersion": deviceinfo.getandroidversion(), "appPackage": packageandactivity[0], "appActivity": packageandactivity[1], 'automationName': 'uiautomator2', # 适配Android7之上版本 'newCommandTimeout': 200 } # 连接到远程服务器进行自动化测试 try: driver = webdriver.Remote(url, desired_caps) log.info(driver) return driver except Exception as e: log.exception(e)
import subprocess import psutil import os from appo.common import global_var as gl from appo.common import logger import time log = logger.model_logger('tools') ''' 获取进程、线程id类 ''' class MyPsutil: def processinfo(self, processName): pids = psutil.pids() for pid in pids: # print(pid) p = psutil.Process(pid) print(p.name) if p.name() == processName: print(pid) return True # 如果找到该进程则打印它的PID,返回true return False # 没有找到该进程,返回false def getpid(self, port): cmd = 'netstat -ano |findstr "{}"'.format(port) print(cmd) try: sysinfo = subprocess.check_output(cmd, stderr=subprocess.PIPE,