当前位置: 首页 > news >正文

python编写手机自动化脚本_使用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()

相关文章:

  • pythonrandom函数用法_Python之np.random.permutation()函数的使用
  • python显示文字框_自定义悬停框Plotly:Python以适应文本
  • seay svn漏洞利用工具_roptool 一种帮助您编写二进制漏洞利用的工具
  • springcloud全家桶_Spring cloud 微服务组件 mica 2.0.5GA 发布,添加对sentinel、undertow指标收集。...
  • 查看约束信息_谢菲尔德资源与蚌埠中恒签订“转型”约束钛铁矿承购协议
  • recyclerview item 有选中字体颜色_PPT金属文字怎么插入?PPT模板金属字体制作,PPT金属字体怎么做?...
  • 3d旋转相册代码源码_Qt Data Visualization ,让数据3D可视化
  • asp 执行 exe_Asp.Net Core学习笔记:(五)构建和部署
  • mybatis if test 用法_手写一个简易版的Mybatis,带你深入领略它的魅力
  • python写入excel数据时保存之前内容_如何使用python在保留原excel格式的前提下插入/修改数据...
  • asp.net web开发框架_ASP.NET Core Blazor未来的Web开发框架
  • 操作系统实验c语言页面置换算法(lru和lfu算法)_「任性」的C语言之父:因拒付论文装订费错失博士学位,论文52年后重见天日...
  • python生日快乐代码_【震惊小伙伴的单行代码—Python篇】的实践操作
  • c3p0连接池配置_数据库连接池amp;Spring JDBC(JdbcTemplate)
  • cdr自动排版插件_牛逼!网上卖328的CorelDraw插件免费送一键转曲批量导图文字识别...
  • const let
  • C学习-枚举(九)
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • ERLANG 网工修炼笔记 ---- UDP
  • JavaScript设计模式之工厂模式
  • js递归,无限分级树形折叠菜单
  • js正则,这点儿就够用了
  • Laravel核心解读--Facades
  • Python连接Oracle
  • Spring框架之我见(三)——IOC、AOP
  • vue-router的history模式发布配置
  • 分布式熔断降级平台aegis
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 基于遗传算法的优化问题求解
  • 技术胖1-4季视频复习— (看视频笔记)
  • 我这样减少了26.5M Java内存!
  • 项目实战-Api的解决方案
  • 一、python与pycharm的安装
  • 以太坊客户端Geth命令参数详解
  • 硬币翻转问题,区间操作
  • Java性能优化之JVM GC(垃圾回收机制)
  • Python 之网络式编程
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (2)Java 简介
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (libusb) usb口自动刷新
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (分布式缓存)Redis分片集群
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • .“空心村”成因分析及解决对策122344
  • .java 9 找不到符号_java找不到符号
  • .net core webapi 大文件上传到wwwroot文件夹
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET单元测试
  • .NET导入Excel数据