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实例相关推荐

  1. appium示例代码python_appium+Python 脚本编写

    两年前刚进公司的时候用过 appium,最后因换项目也就没再研究过了.就在前两个月一个通过阅读新闻赚钱的 App 让我意识到 也许 appium 可以这么干,哈哈.结果很不理想,这里就分享一下过程吧! ...

  2. appium示例代码python_(appium+python)UI自动化_07_UI自动化实例【拼多多搜索商品为例】...

    前言 初学UI自动化的小伙伴,在配置好appium+python自动化环境后,往往不知道如何下手实现自动化.小编在初期学习的时候也有这种疑惑,在此以拼多多搜索为实例,展示下appium是如何实现自动化 ...

  3. appium+python测试app使用相对坐标定位元素

    我们获取到的是绝对坐标,如果换一个屏幕分辨率不同的手机那这个坐标自然会发生变化,要实现不同手机均能实现点击同一控件自然要用到相对坐标了,具体方法如下: 1.获取当前空间的绝对坐标(x1,y1),开启指 ...

  4. python测试脚本实例-Python单元测试实例详解

    本文实例讲述了Python单元测试.分享给大家供大家参考,具体如下: 在Python中进行单元测试需要用到自动单元测试框架PyUnit,Python2.1及其以后的版本都将PyUnit作为一个标准模块 ...

  5. python测试app性能_App性能测试工具MobilePerformance

    一. 环境搭建 安装Android SDK 1.6或者1.7版本均可,建议1.7,环境变量的配置,Java SDK的安装很简单,不赘述了. 安装SDK 1.安装Android SDK: 2.安装完毕后 ...

  6. ajax 示例代码,Ajax的简单实用实例代码

    我将实现一个简单的Ajax页面无刷新进行用户验证案例: 效果如下图: 实现主要过程: 在UsersAction类中的checkUser方法中接收并验证前台的表单数据,针对不同情况,返回一个状态码cod ...

  7. php的微信登录示例代码,关于微信用户注册登录实例代码汇总

    这篇文章主要介绍了.NET微信开发之PC 端微信扫码注册和登录功能实现的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下一.前言先声明一下,本文所注重点为实现思路,代码及数据库设计主要为了展 ...

  8. python海龟绘图代码大全-python海龟绘图实例教程

    本文以实例形式介绍了python turtle模块即海龟绘图的使用方法,对于需要进行图形编程的朋友相信会有一定的借鉴价值. python turtle模块简介: python2.6版本中引入的一个简单 ...

  9. 【精品示例】超实用Python爬虫入门实例——做一个优质舔狗

    引言 最近发现了一个有意思的网站,里面充斥了大量的舔狗箴言.作为一个爬虫发烧友怎么能错过此等机会,咱们直接就是上才艺! 类的编写 本次爬虫使用了多协程的方案进行,保证了爬虫的速度.在这里我们新建一个爬 ...

  10. python测试脚本实例-使用python测试框架完成自动化测试并生成报告-实例练习

    练习一: 使用unittest 完成自动化测试并使用HttpTestRunner生成报告 ''' 1.写个简单的计算器功能,大小写转换功能,随机生成字符串功能 2.编写测试用例,不同的数据(你能想到的 ...

最新文章

  1. Log4j使用及配置
  2. 剑指offer之斐波那契问题(C++/Java双重实现)
  3. 洛谷P3414 SAC#1 - 组合数
  4. lambda表达式对比
  5. 微信小程序swiper高度自适应,swiper的子元素高度不固定
  6. VSCode前端文件(html文件)如何以服务器模式打开?
  7. 查询时间转换成短格式
  8. 平时常见的音频文件格式有哪些呢?
  9. html链接鼠标在悬停颜色,如何让HTML链接显示悬停样式?
  10. 树的专项练习(补充)
  11. 困了累了到底喝啥?浅谈饮料品牌如何进行推广策略定位
  12. java 函数 throw_java为什么有些异常throw出去需要在函数头用throws声明,一些就不用。...
  13. Hadoop开发相关问题
  14. 从身份证号获取身份证信息
  15. SQL Server Select Top语句
  16. python爬虫可以爬哪些网站-网络爬虫都能干什么?有哪些网站的数据可以爬取?...
  17. mysql 不支持分区_MySQL分区表的局限和限制
  18. 手把手教你搭建自己的 AV1 Analyzer
  19. 系统调用的内核实现,一文讲透open函数内核真实实现。
  20. java实训报告结论_Java实验报告(二)及总结

热门文章

  1. 微新小程序封装wx.request (使用回调函数)
  2. android killer java_android killer无法查看java源代码的解决方法
  3. mysql条件计数_Mysql按条件计数多种实现方法详解
  4. java阴阳师抽卡概率_《阴阳师》手游随机抽取类玩法概率公示
  5. php里用钢笔画曲线,ps钢笔工具组怎么用 ps钢笔工具使用方法
  6. 猴王问题(项目分析以及项目实现)
  7. 建模是什么,建模定义,及学习方法
  8. 非 Java、C、Python,我使用的第一门计算机语言是它!
  9. 虚拟机搭建web服务器
  10. WPS新建文字分享微信.docx形式_这 3 个实用的文档「分享」技巧,很多人都不会用...