当前位置:   article > 正文

在python中实现简单的app自动化框架_python app自动化

python app自动化

一、app自动化环境搭建

1、安装jdk及配置jdk的环境变量

app底层是c语言,应用层是java,所以需要jdk

2、安装SDK,配置android SDK环境
3、安装模拟器
4、下载安装Appium工具

01、appium客户端  appium destop 服务器

02、命令行安装:pip.exe install Appium-Python-Client

 apium python库

同时,我也为大家准备了一份软件测试视频教程(含面试、接口、自动化、性能测试等),就在下方,需要的可以直接去观看,也可以直接点击文末小卡片免费领取资料文档

软件测试视频教程观看处:

2023年B站最牛软件测试面试突击教程,字节大佬亲授,99%的人都能拿到offer

二、测试

1、打开usb选项

2、电脑与模拟器建立连接 通过adb命令

检查电脑和模拟器是否建立连接 adb devices

3、没有连接 adb connect  127.0.0.1:62001

三、pycharm代码启动app.apk

1、线性代码

下载考研帮,在电脑端下载后拉到模拟器即可使用

  1. #用python代码启动考研帮
  2. #提前告知代码要测试哪个app,哪个设备
  3. #设备信息
  4. from appium import webdriver
  5. info={
  6. #测试的平台Androidios
  7. #info['platformName']='Android'
  8. "platformName":"Android",
  9. #测试的版本号设置-关于-版本号
  10. "platformVersion":"7.1.2",
  11. #设备名adbdevices
  12. "deviceName":"127.0.0.1:62001",
  13. #包名获取方式有很多种adbshelldumpsyswindowfindstrmCurrentFocu打开当前窗口的命令
  14. "appPackage":"com.tal.kaoyan",
  15. #应用名
  16. "appActivity":"com.tal.kaoyan.ui.activity.SplashActivity",
  17. #"允许不重置"
  18. "noRest":False
  19. }
  20. #启动考研帮
  21. #web自动化seleniumwebdriver
  22. #app自动化appiumwebdriver
  23. driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',info)
  24. #重点打开appiumdestop,start
  25. #清空设置-应用-缓存
  26. #appiumsdk中的工具tools,uiautomator.bat
  27. #测试登录
  28. #取消点击
  29. #driver.find_element_by_id('android:id/button2').click()
  30. #跳过点击
  31. #driver.find_element_by_id('com.tal.kaoyan:id/tv_skip').click()
  32. #用户协议点击同意
  33. #每次打开界面都不一样,不写代码了
  34. #无法播放此视频点击确定
  35. driver.find_element_by_id('android:id/button1').click()
  36. #密码登录
  37. driver.find_element_by_id('com.tal.kaoyan:id/loginRegistorcodeAndPassword').click()
  38. #输入用户名,输入密码,点击登录按钮
  39. driver.find_element_by_id('com.tal.kaoyan:id/loginEmailEdittext').send_keys('')
  40. driver.find_element_by_id('com.tal.kaoyan:id/loginPasswordEdittext').send_keys('')
  41. #已阅读并同意,点击单选按钮
  42. driver.find_element_by_id('android.widget.CheckBox').click()
  43. #点击登录
  44. #driver.find_element_by_id('com.tal.kaoyan:id/loginLoginBtn').click()
  45. #xpath写法
  46. driver.find_element_by_xpath("//*[@text='登录']").click()

2、优化代码

优化思路:

登录脚本  优化  配置信息放在yaml文件
启动时,如果说没启动,启动报错,可以用日志文件记录起来,封装日志
登录,有些app会弹窗,这些方法可以封装成公共方法 公共文件
登录脚本,关键字驱动,把常用的方法封装成一个文件
测试登录,测试不同的情况,可以用unittest,pytest;+ddt测试数据,可以放在测试文件中
生成测试报告 unittest,pytest
把框架放在jenkins,实现开发提交代码,就自动运行自动化框架,把测试报告发出来
搭建框架容易,难点在编程基础

完整优化代码

2.1)base_page.py

  1. #基类,封装的公共方法都在这里
  2. class BasePage:
  3. def __init__(self,driver):
  4. self.driver= driver
  5. #元素定位
  6. def locator(self,loc):
  7. return self.driver.find_element(*loc)
  8. #输入
  9. # self.driver.find_element_by_id('').sendkey('')
  10. def input_(self,loc,txt):
  11. self.locator(loc).send_keys(txt)
  12. # 点击
  13. def click(self,loc):
  14. self.locator(loc).click()

2.2)common_fun.py

  1. import logging
  2. from selenium.common.exceptions import NoSuchElementException
  3. import logging
  4. from selenium.webdriver.common.by import By
  5. from config.desired_caps import appium_desired
  6. from config.base_page import BasePage
  7. class Common(BasePage):
  8. cancel = (By.ID,'android:id/button2')
  9. skip=(By.ID,'com.tal.kaoyan:id/tv_skip')
  10. def check_cancel(self):
  11. logging.info("=============开始检查取消按钮==============")
  12. try:
  13. cancel=self.driver.find_element(*self.cancel)
  14. except NoSuchElementException:
  15. logging.info("取消按钮没有找到")
  16. else:
  17. logging.info("点击取消")
  18. cancel.click()
  19. def check_skip(self):
  20. logging.info("=========开始检查跳过按钮============")
  21. try:
  22. skip = self.driver.find_element(*self.skip)
  23. except NoSuchElementException:
  24. logging.info("跳过按钮没有找到")
  25. else:
  26. logging.info("点击跳过")
  27. skip.click()
  28. #1、获取整个屏幕的大小size
  29. def size(self):
  30. # a=driver.get_window_size()['width']
  31. x=self.driver.get_window_size()['width']
  32. y=self.driver.get_window_size()['height']
  33. return x,y
  34. #向左划,宽10001000
  35. # driver.swipe(900,800,500,800,2000)
  36. def swipeLeft(self,t,n):
  37. lsize=self.driver.size()
  38. #900
  39. x1=lsize[0]*0.9
  40. y1=lsize[1]*0.5
  41. x2=lsize[0]*0.1
  42. for i in range(n):
  43. self.driver.swipe(x1,y1,x2,y1,t)

2.3)cs_caps.yaml

  1. platformName: Android
  2. platformVersion: 7.1.2
  3. deviceName: 127.0.0.1:62001
  4. appPackage: com.tal.kaoyan
  5. appActivity: com.tal.kaoyan.ui.activity.SplashActivity
  6. noRest: False
  7. ip: 127.0.0.1
  8. port: 4723

2.4)desired_caps.py

  1. import yaml
  2. from appium import webdriver
  3. from config.testLog import test_log
  4. log=test_log()
  5. # 要yaml文件的数据 找到yanl文件,可读
  6. def appium_desired():
  7. stream = open('../config/cs_caps.yaml', 'r')
  8. # 数据加载出来
  9. data = yaml.load(stream, Loader=yaml.FullLoader)
  10. # 字典是什么 元组是什么
  11. info = {}
  12. info['platformName'] = data['platformName']
  13. info['platformVersion'] = data['platformVersion']
  14. info['deviceName'] = data['deviceName']
  15. info['appPackage'] = data['appPackage']
  16. info['appActivity'] = data['appActivity']
  17. info['noRest'] = data['noRest']
  18. # info['ip']=data['ip']
  19. # info['port']=data['port']
  20. # driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', info)
  21. log.info('开始跑')
  22. driver = webdriver.Remote('http://' + str(data['ip']) + ':' + str(data['port']) + '/wd/hub', info)
  23. return driver
  24. if __name__ == '__main__':
  25. appium_desired()

2.5)login_page.py

  1. from selenium.webdriver.common.by import By
  2. from config.common_fun import Common
  3. log=test_log()
  4. class LoginPage(Common):
  5. user=(By.ID, 'com.tal.kaoyan:id/login_email_edittext')
  6. pwd=(By.ID, 'com.tal.kaoyan:id/login_password_edittext')
  7. button = (By.ID, 'com.tal.kaoyan:id/login_login_btn')
  8. def login(self, username,password):
  9. #点击取消
  10. self.check_cancel()
  11. #点击跳过
  12. self.check_skip()
  13. #输入用户名,输入密码,点击登录
  14. log.info('请输入用户名%s'%username)
  15. self.input_(self,user,username)
  16. log.info('请输入密码%s' % password)
  17. self.input_(self, pwd, password)
  18. self.click(self.button)
  19. #要测试各种情况,测正常的情况,异常的情况,先进性unittest永历官吏框架
  20. #结合ddt,想要把测试数据放在Yaml中,放在代码
  21. if __name__ == '__main__':
  22. driver = appium_desired()
  23. lp=LoginPage(driver)
  24. lp.login('qwerty2664','qwerty123')

2.6)testLog.py

  1. #日志
  2. import logging
  3. def test_kog():
  4. logger=logging.getLogger()
  5. logger.setLevel(logging.INFO)
  6. if not logger.handlers:
  7. #输出到控制台
  8. sh=logging.StreamHandler()
  9. logger.addHandler(sh)
  10. #设置格式
  11. fomartor=logging.Formatter(fmt='%(asctime)s%(filename)s%(levelname)s%()')
  12. sh.setFormatter(fomartor)
  13. #输出到文本
  14. fh =logging.FileHandler('../logs/runlog.log',encoding='utf-8')
  15. logger.addHandler(fh)
  16. fh.setFormatter(fomartor)
  17. return logger

总结

最后在这里分享一套软件测试的自学教程合集。对于在测试行业发展的小伙伴们来说应该会很有帮助,有需要的朋友你可以【点击文末小卡片免费领取】

除了基础入门的资源,博主也收集不少进阶自动化的资源,从理论到实战,知行合一才能真正的掌握。全套内容已经打包到网盘,内容总量接近600个G,包括基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等配套学习资源。

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/844840
推荐阅读
相关标签
  

闽ICP备14008679号