appium示例代码python_Appium+python测试app实例

Appium和selenium差不到,只是一个用于测web,一个用于测APP。下面记录一下我搭的测试框架,同样是基于PO模式,用的unittest.

最后测试报告如下:

1087925-20170811160654367-446872155.png

1.1 代码结构

1087925-20170811160707179-257734756.png

这个结构是不是很熟悉,都是基于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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值