使用appium+python编写手机游戏功能自动化

在一台benchmark测试手机上编写完测试用例,在其他测试手机上执行测试时只需要换算分辨率相对值就可以正常运行。

配置文件源码:

#coding:utf-8

#手机和app初始化的配置信息

#key:value

apps={

'no-reset':True,

'platformName':'Android',

'platformVersion':'5.0.1',

'deviceName':'LGD858HK764aa4d',

'appPackage':'df.er.ga2',

'appActivity':'com.unity3d.player.UnityPlayerNativeActivity',

'base_url':'http://localhost:4723/wd/hub'

}

#desired_caps['platformVersion'] ='4.4.2'

#desired_caps['deviceName'] = 'bc6bd36b

##三星note3

#LG g3手机

#针对不同的测试手机需要修改adb device id值

#desired_caps['app'] = PATH(r'E:\testappium\appiumgame3dgameTest7.apk')

自动化脚本:

# -*- coding: utf-8 -*-

from __future__ import division

import os

import unittest,time,re,datetime

from HTMLTestRunner import HTMLTestRunner

from appium import webdriver

from time import sleep

import sys

reload(sys)

sys.setdefaultencoding('utf-8')

import config

#所有配置信息写到config.py里面

# Returns abs path relative to this file and not cwd

)

class Gametest(unittest.TestCase):

#针对sungxing手机

@classmethod

def setUpClass(self):

print 'setUpClass'

'''

desired_caps = {}

desired_caps['no-reset']=True

desired_caps['platformName'] = 'Android'

#desired_caps['platformVersion'] = '4.4.2'

#desired_caps['deviceName'] = 'bc6bd36b'

#三星note3

desired_caps['platformVersion'] = '5.0.1'

desired_caps['deviceName'] = 'LGD858HK764aa4d'

#LG g3手机

#针对不同的测试手机需要修改adb device id值

#desired_caps['app'] = PATH(r'E:\testappium\appiumgame3dgameTest7.apk')

desired_caps['appPackage'] = 'df.er.ga2'

desired_caps['appActivity'] = 'com.unity3d.player.UnityPlayerNativeActivity'

self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

'''

disired_caps={

'no-reset':config.apps['no-reset'],

'platformName':config.apps['platformName'],

'platformVersion':config.apps['platformVersion'],

'deviceName':config.apps['deviceName'],

'appPackage':config.apps['appPackage'],

'appActivity':config.apps['appActivity']

}

self.driver=webdriver.Remote(config.apps['base_url'],disired_caps)

@classmethod

def tearDownClass(self):

self.driver.close_app()

print 'tearDownClass'

def setUp(self):

'''setup'''

print "setup"

###############

#编写测试用例的手机(lg g3)分辨率,adb shell dumpsys window displays

testcase_phone_width=2392

#编写测试用例的手机分辨率宽度,就是app的宽度

testcase_phone_height=1440

#编写测试用例的手机分辨率高度,就是app的宽度

####################################

#执行测试用例的手机分辨率:很多台测试手机,分辨率会不一样

#执行测试用例的手机分辨率,app的宽度

#执行测试用例的手机分辨率,app的高度

print '执行测试用例的手机app分辨率-宽度',execute_case_phone_width

print '\n'

print '执行测试用例的手机app分辨率-高度',execute_case_phone_height

self.base_x=execute_case_phone_width/testcase_phone_width

#测试手机分辨率宽度和编写测试用例手机的分辨率的宽度的相对值

self.base_y=execute_case_phone_height/testcase_phone_height

#测试手机分辨率高度和编写测试用例手机的分辨率的高度的相对值

print 'X轴坐标相对系数:',self.base_x

print '\n'

print 'Y轴坐标相对系数:',self.base_y

def tearDown(self):

'''teardown'''

print 'teardown'

tap_x=0.0

tap_y=0.0

def tap_coordination(self,tap_x,tap_y):

self.x=self.tap_x*self.base_x

self.y=self.tap_y*self.base_y

#此函数封装不同手机分辨率下点击坐标时调用swipe方法

def test_gotomain(self):

'''进入主界面 testcase1'''

'''

x0=1197*self.base_x

y0=727*self.base_y

sleep(3)

sleep(15)

'''

self.tap_coordination(1197, 727)

sleep(6)

def test_clickplus(self):

'''点击"-"按钮,数值应该变大 testcase2'''

x1=158*self.base_x

y1=723*self.base_y

for i in range(10):

sleep(2)

def test_clickadd(self):

'''点击“+”按钮滑动后再退出 testcase3'''

#点击“+”按钮

x2=153*self.base_x

y2=1193*self.base_y

sleep(2)

x3=1737*self.base_x

y3=1286*self.base_y

sleep(3)

#取消"add"

x4=153*self.base_x

y4=1193*self.base_y

sleep(3)

#开始在屏幕上移动

sleep(3)

#按手机上的返回键

sleep(3)

#点击退出按钮

print '点击退出按钮'

def test_load(self):

'''返回后再点击“载入按钮 testcase4'''

sleep(3)

sleep(3)

sleep(3)

#点击退出按钮

if __name__ == '__main__':

timestr = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))

filename = "E:\\testappium\\appiumgame\\result_" + timestr + ".html"

print (filename)

fp = open(filename, 'wb')

runner = HTMLTestRunner(

stream=fp,

title='testreport',

description='testresult'

)

suitecmd = unittest.TestLoader().loadTestsFromTestCase(Gametest)

unittest.TextTestRunner(verbosity=4).run(suitecmd)

#测试用例名称打印到cmd,在cmd下显示乱码,需要注意cmd编码格式

fp.close()

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190213G07D1000?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券