appium示例代码python_Appium+python测试app实例
Appium和selenium差不到,只是一个用于测web,一个用于测APP。下面记录一下我搭的测试框架,同样是基于PO模式,用的unittest.
最后测试报告如下:
1.1 代码结构
这个结构是不是很熟悉,都是基于PO模式,用的是unittest框架。
1.2 配置文件globalparameter.py
1 #coding:utf-8
2 __author__ = 'Helen'
3 '''
4 description:配置全局参数5 '''
6 importtime,os7
8 #获取项目路径
9 #project_path = os.path.abspath(os.path.join(os.path.dirname(os.path.realpath(__file__)[0]), '.'))
10 project_path = os.path.abspath(os.path.join(os.path.dirname(os.path.split(os.path.realpath(__file__))[0]), '.'))11 #测试用例代码存放路径(用于构建suite,注意该文件夹下的文件都应该以test开头命名)
12 test_case_path = project_path+"\\src\\test_case"
13 #print u'日志路径:'+log_path
14 #测试报告存储路径,并以当前时间作为报告名称前缀
15 report_path = project_path+"\\report\\"
16 report_name = report_path+time.strftime('%Y%m%d%H%S', time.localtime())17 #设置发送测试报告的公共邮箱、用户名和密码
18 smtp_sever = 'smtp.exmail.qq.com' #邮箱SMTP服务,各大运营商的smtp服务可以在网上找,然后可以在foxmail这些工具中验正
19 email_name = "888@x88.com" #发件人名称
20 email_password = "*888" #发件人登录密码
21 email_To = '888@qq.com;88@88.com' #收件人
1.3 配置文件driver_configure.py
1 #coding:utf-8
2 __author__ = 'Helen'
3 '''
4 description:driver配置5 '''
6 from appium importwebdriver7
8
9 classdriver_configure():10 defget_driver(self):11 '''获取driver'''
12 try:13 self.desired_caps ={}14 self.desired_caps['platformName'] = 'Android' #平台
15 self.desired_caps['platformVersion'] = '6.0' #系统版本
16 #self.desired_caps['app'] = 'E:/autotestingPro/app/UCliulanqi_701.apk' # 指向.apk文件,如果设置appPackage和appActivity,那么这项会被忽略
17 self.desired_caps['appPackage'] = 'com.xsteach.appedu' #APK包名
18 self.desired_caps['appActivity'] = 'com.qihoo.util.StartActivity' #被测程序启动时的Activity
19 self.desired_caps['unicodeKeyboard'] = 'true' #是否支持unicode的键盘。如果需要输入中文,要设置为“true”
20 self.desired_caps['resetKeyboard'] = 'true' #是否在测试结束后将键盘重轩为系统默认的输入法。
21 self.desired_caps['newCommandTimeout'] = '120' #Appium服务器待appium客户端发送新消息的时间。默认为60秒
22 self.desired_caps['deviceName'] = '612QKBQD225A2' #手机ID
23 self.desired_caps['noReset'] = True #true:不重新安装APP,false:重新安装app
24 self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",self.desired_caps)25 returnself.driver26 exceptException,e:27 raise e
1.4 公共类Base_page.py
#coding:utf-8
__author__ = 'Helen'
'''description:UI页面公共类'''
from selenium.webdriver.support.wait importWebDriverWaitfrom selenium.webdriver.support importexpected_conditions as ECclassBase_page:def __init__(self,driver):
self.driver=driverdef find_element(self,*loc):'''重写find_element方法,显式等待'''
try:
WebDriverWait(self.driver,10).until(EC.visibility_of_element_located(loc))return self.driver.find_element(*loc)exceptException as e:raiseedef send_keys(self,value,*loc):try:
self.find_element(*loc).clear()
self.find_element(*loc).send_keys(value)exceptAttributeError,e:raise e
1.5 公共类gesture_mainpulation
#coding:utf-8
__author__ = 'Helen'
'''description:手势操作'''
classgesture_mainpulation:defswipe_left(self,driver):'''左滑'''x= driver.get_window_size()['width']
y= driver.get_window_size()['height']
driver.swipe(x*3/4,y/4,x/4,y/4)defswipe_right(self,driver):'''右滑'''x= driver.get_window_size()['width']
y= driver.get_window_size()['height']
driver.swipe(x/4,y/4,x*3/4,y/4)defswipe_down(self,driver):'''下滑'''x= driver.get_window_size()['width']
y= driver.get_window_size()['height']
driver.swipe(x/2,y*3/4,x/2,y/4)defswipe_up(self,driver):'''上滑'''x= driver.get_window_size()['width']
y= driver.get_window_size()['height']
driver.swipe(x/2,y/4,x/2,y*3/4)
1.6 公共类send_email
1 #coding:utf-8
2 __author__ = 'Helen'
3 '''
4 description:邮件发送最新的测试报告5 '''
6 importos,smtplib,os.path7 from config importglobalparameter as gl8 from email.mime.multipart importMIMEMultipart9 from email.mime.text importMIMEText10
11
12 classsend_email:13 #定义邮件内容
14 defemail_init(self,report,reportName):15 with open(report,'rb')as f:16 mail_body =f.read()17
18 #创建一个带附件的邮件实例
19 msg =MIMEMultipart()20 #以测试报告作为邮件正文
21 msg.attach(MIMEText(mail_body,'html','utf-8'))22 report_file = MIMEText(mail_body,'html','utf-8')23 #定义附件名称(附件的名称可以随便定义,你写的是什么邮件里面显示的就是什么)
24 report_file["Content-Disposition"] = 'attachment;filename='+reportName25 msg.attach(report_file) #添加附件
26 msg['Subject'] = '88APP自动化测试报告:'+reportName #邮件标题
27 msg['From'] = gl.email_name #发件人
28 msg['To'] = gl.email_To #收件人列表
29 try:30 server =smtplib.SMTP(gl.smtp_sever)31 server.login(gl.email_name,gl.email_password)32 server.sendmail(msg['From'],msg['To'].split(';'),msg.as_string())33 server.quit()34 exceptsmtplib.SMTPException:35 self.mylog.error(u'邮件发送测试报告失败 at'+__file__)36
37 defsendReport(self):38 #找到最新的测试报告
39 report_list =os.listdir(gl.report_path)40 report_list.sort(key=lambda fn: os.path.getmtime(gl.report_path+fn) if not os.path.isdir(gl.report_path+fn) else0)41 new_report = os.path.join(gl.report_path,report_list[-1])42 #发送邮件
43 self.email_init(new_report,report_list[-1])
1.7 页面事件login_page.py(只记录一个,其他的都一样)
1 #coding:utf-8
2 __author__ = 'Helen'
3 '''
4 description:登录页5 '''
6 from src.common importBase_page7 from appium.webdriver.common importmobileby8
9
10 classlogin_page(Base_page.Base_page):11 by =mobileby.MobileBy()12 etUser_loc = (by.ID,"com.xsteach.appedu:id/etUser")13 etPws_loc = (by.ID,"com.xsteach.appedu:id/etPwd")14 btnLogin_loc = (by.ID,"com.xsteach.appedu:id/btnLogin")15
16 definput_user(self,username):17 self.send_keys(username,*self.etUser_loc)18
19 definput_Pws(self,password):20 self.send_keys(password,*self.etPws_loc)21
22 defclick_btnLogin(self):23 self.find_element(*self.btnLogin_loc).click()
1.8 测试用例test_appium.py
1 #coding:utf-8
2 __author__ = 'Helen'
3 '''
4 description:测试登录和退出功能5 '''
6 importunittest7
8 from src.pages importindex_page,myInfo_page,login_page,relative_page9 from src.common importgesture_manipulation10 from config importdriver_configure11
12
13 classtest_appium(unittest.TestCase):14 @classmethod15 defsetUpClass(cls):16 dconfigur =driver_configure.driver_configure()17 cls.driver =dconfigur.get_driver()18 cls.GM =gesture_manipulation.gesture_mainpulation()19
20 deftest_01login(self):21 '''测试登录功能'''
22 #主页面
23 self.index_page =index_page.index_page(self.driver)24 self.index_page.click_btnCancel()25 self.GM.swipe_down(self.driver)26 self.index_page.click_inXSTeach()27 #我在邢帅
28 self.myInfo_page =myInfo_page.myInfo_page(self.driver)29 self.myInfo_page.click_login_btn()30 #登录页
31 self.login_page =login_page.login_page(self.driver)32 self.login_page.input_user("lihailing@xsteqach.com")33 self.login_page.input_Pws("123456")34 self.login_page.click_btnLogin()35 self.assertEqual(u'签到',self.myInfo_page.getText_signHint())36
37 deftest_02loginOut(self):38 '''测试退出功能'''
39 self.myInfo_page =myInfo_page.myInfo_page(self.driver)40 self.myInfo_page.click_relative()41 self.relative =relative_page.relative_page(self.driver)42 self.relative.click_tvLoginOut()43 self.relative.click_btnYes()44 self.assertEqual(u'点击登录',self.myInfo_page.getText_login())45
46 @classmethod47 deftearDownClass(cls):48 cls.driver.quit()49
50 if __name__=='__main__':51 unittest.main()
1.9 执行测试runtest.py
#coding:utf-8
__author__ = 'Helen'
'''description:执行测试'''
importunittest,time,HTMLTestRunnerfrom config.globalparameter importtest_case_path,report_namefrom src.common importsend_mail#构建测试集,包含src/test_case目录下的所有以test开头的.py文件
suite = unittest.defaultTestLoader.discover(start_dir=test_case_path,pattern='test*.py')#执行测试
if __name__=="__main__":
report= report_name+"Report.html"fb= open(report,'wb')
runner=HTMLTestRunner.HTMLTestRunner(
stream=fb,
title=u'88APP自动化测试报告',
description=u'项目描述:生产环境')
runner.run(suite)
fb.close()#发送邮件
time.sleep(10) #设置睡眠时间,等待测试报告生成完毕(这里被坑了==)
email =send_mail.send_email()
email.sendReport()
appium示例代码python_Appium+python测试app实例相关推荐
- appium示例代码python_appium+Python 脚本编写
两年前刚进公司的时候用过 appium,最后因换项目也就没再研究过了.就在前两个月一个通过阅读新闻赚钱的 App 让我意识到 也许 appium 可以这么干,哈哈.结果很不理想,这里就分享一下过程吧! ...
- appium示例代码python_(appium+python)UI自动化_07_UI自动化实例【拼多多搜索商品为例】...
前言 初学UI自动化的小伙伴,在配置好appium+python自动化环境后,往往不知道如何下手实现自动化.小编在初期学习的时候也有这种疑惑,在此以拼多多搜索为实例,展示下appium是如何实现自动化 ...
- appium+python测试app使用相对坐标定位元素
我们获取到的是绝对坐标,如果换一个屏幕分辨率不同的手机那这个坐标自然会发生变化,要实现不同手机均能实现点击同一控件自然要用到相对坐标了,具体方法如下: 1.获取当前空间的绝对坐标(x1,y1),开启指 ...
- python测试脚本实例-Python单元测试实例详解
本文实例讲述了Python单元测试.分享给大家供大家参考,具体如下: 在Python中进行单元测试需要用到自动单元测试框架PyUnit,Python2.1及其以后的版本都将PyUnit作为一个标准模块 ...
- python测试app性能_App性能测试工具MobilePerformance
一. 环境搭建 安装Android SDK 1.6或者1.7版本均可,建议1.7,环境变量的配置,Java SDK的安装很简单,不赘述了. 安装SDK 1.安装Android SDK: 2.安装完毕后 ...
- ajax 示例代码,Ajax的简单实用实例代码
我将实现一个简单的Ajax页面无刷新进行用户验证案例: 效果如下图: 实现主要过程: 在UsersAction类中的checkUser方法中接收并验证前台的表单数据,针对不同情况,返回一个状态码cod ...
- php的微信登录示例代码,关于微信用户注册登录实例代码汇总
这篇文章主要介绍了.NET微信开发之PC 端微信扫码注册和登录功能实现的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下一.前言先声明一下,本文所注重点为实现思路,代码及数据库设计主要为了展 ...
- python海龟绘图代码大全-python海龟绘图实例教程
本文以实例形式介绍了python turtle模块即海龟绘图的使用方法,对于需要进行图形编程的朋友相信会有一定的借鉴价值. python turtle模块简介: python2.6版本中引入的一个简单 ...
- 【精品示例】超实用Python爬虫入门实例——做一个优质舔狗
引言 最近发现了一个有意思的网站,里面充斥了大量的舔狗箴言.作为一个爬虫发烧友怎么能错过此等机会,咱们直接就是上才艺! 类的编写 本次爬虫使用了多协程的方案进行,保证了爬虫的速度.在这里我们新建一个爬 ...
- python测试脚本实例-使用python测试框架完成自动化测试并生成报告-实例练习
练习一: 使用unittest 完成自动化测试并使用HttpTestRunner生成报告 ''' 1.写个简单的计算器功能,大小写转换功能,随机生成字符串功能 2.编写测试用例,不同的数据(你能想到的 ...
最新文章
- Log4j使用及配置
- 剑指offer之斐波那契问题(C++/Java双重实现)
- 洛谷P3414 SAC#1 - 组合数
- lambda表达式对比
- 微信小程序swiper高度自适应,swiper的子元素高度不固定
- VSCode前端文件(html文件)如何以服务器模式打开?
- 查询时间转换成短格式
- 平时常见的音频文件格式有哪些呢?
- html链接鼠标在悬停颜色,如何让HTML链接显示悬停样式?
- 树的专项练习(补充)
- 困了累了到底喝啥?浅谈饮料品牌如何进行推广策略定位
- java 函数 throw_java为什么有些异常throw出去需要在函数头用throws声明,一些就不用。...
- Hadoop开发相关问题
- 从身份证号获取身份证信息
- SQL Server Select Top语句
- python爬虫可以爬哪些网站-网络爬虫都能干什么?有哪些网站的数据可以爬取?...
- mysql 不支持分区_MySQL分区表的局限和限制
- 手把手教你搭建自己的 AV1 Analyzer
- 系统调用的内核实现,一文讲透open函数内核真实实现。
- java实训报告结论_Java实验报告(二)及总结
热门文章
- 微新小程序封装wx.request (使用回调函数)
- android killer java_android killer无法查看java源代码的解决方法
- mysql条件计数_Mysql按条件计数多种实现方法详解
- java阴阳师抽卡概率_《阴阳师》手游随机抽取类玩法概率公示
- php里用钢笔画曲线,ps钢笔工具组怎么用 ps钢笔工具使用方法
- 猴王问题(项目分析以及项目实现)
- 建模是什么,建模定义,及学习方法
- 非 Java、C、Python,我使用的第一门计算机语言是它!
- 虚拟机搭建web服务器
- WPS新建文字分享微信.docx形式_这 3 个实用的文档「分享」技巧,很多人都不会用...