一、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库
同时,我也准备了一份软件测试视频教程(含接口、自动化、性能等),需要的可以直接在下方观看,或者直接关注VX公众号:互联网杂货铺,免费领取
软件测试视频教程观看处:
B站最用心的自动化测试教程,从入门到进阶(全600集),通俗易懂,2023最新版,学完即就业!学不会我立马退出测试界!
二、测试
1、打开usb选项
2、电脑与模拟器建立连接 通过adb命令
检查电脑和模拟器是否建立连接 adb devices
3、没有连接 adb connect 127.0.0.1:62001
三、pycharm代码启动app.apk
1、线性代码
下载考研帮,在电脑端下载后拉到模拟器即可使用
#用python代码启动考研帮
#提前告知代码要测试哪个app,哪个设备
#设备信息
from appium import webdriver
info={
#测试的平台Androidios
#info['platformName']='Android'
"platformName":"Android",
#测试的版本号设置-关于-版本号
"platformVersion":"7.1.2",
#设备名adbdevices
"deviceName":"127.0.0.1:62001",
#包名获取方式有很多种adbshelldumpsyswindowfindstrmCurrentFocu打开当前窗口的命令
"appPackage":"com.tal.kaoyan",
#应用名
"appActivity":"com.tal.kaoyan.ui.activity.SplashActivity",
#"允许不重置"
"noRest":False
}
#启动考研帮
#web自动化seleniumwebdriver
#app自动化appiumwebdriver
driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',info)
#重点打开appiumdestop,start
#清空设置-应用-缓存
#appiumsdk中的工具tools,uiautomator.bat
#测试登录
#取消点击
#driver.find_element_by_id('android:id/button2').click()
#跳过点击
#driver.find_element_by_id('com.tal.kaoyan:id/tv_skip').click()
#用户协议点击同意
#每次打开界面都不一样,不写代码了
#无法播放此视频点击确定
driver.find_element_by_id('android:id/button1').click()
#密码登录
driver.find_element_by_id('com.tal.kaoyan:id/loginRegistorcodeAndPassword').click()
#输入用户名,输入密码,点击登录按钮
driver.find_element_by_id('com.tal.kaoyan:id/loginEmailEdittext').send_keys('')
driver.find_element_by_id('com.tal.kaoyan:id/loginPasswordEdittext').send_keys('')
#已阅读并同意,点击单选按钮
driver.find_element_by_id('android.widget.CheckBox').click()
#点击登录
#driver.find_element_by_id('com.tal.kaoyan:id/loginLoginBtn').click()
#xpath写法
driver.find_element_by_xpath("//*[@text='登录']").click()
2、优化代码
优化思路:
登录脚本 优化 配置信息放在yaml文件
启动时,如果说没启动,启动报错,可以用日志文件记录起来,封装日志
登录,有些app会弹窗,这些方法可以封装成公共方法 公共文件
登录脚本,关键字驱动,把常用的方法封装成一个文件
测试登录,测试不同的情况,可以用unittest,pytest;+ddt测试数据,可以放在测试文件中
生成测试报告 unittest,pytest
把框架放在jenkins,实现开发提交代码,就自动运行自动化框架,把测试报告发出来
搭建框架容易,难点在编程基础
完整优化代码
2.1)base_page.py
#基类,封装的公共方法都在这里
class BasePage:
def __init__(self,driver):
self.driver= driver
#元素定位
def locator(self,loc):
return self.driver.find_element(*loc)
#输入
# self.driver.find_element_by_id('').sendkey('')
def input_(self,loc,txt):
self.locator(loc).send_keys(txt)
# 点击
def click(self,loc):
self.locator(loc).click()
2.2)common_fun.py
import logging
from selenium.common.exceptions import NoSuchElementException
import logging
from selenium.webdriver.common.by import By
from config.desired_caps import appium_desired
from config.base_page import BasePage
class Common(BasePage):
cancel = (By.ID,'android:id/button2')
skip=(By.ID,'com.tal.kaoyan:id/tv_skip')
def check_cancel(self):
logging.info("=============开始检查取消按钮==============")
try:
cancel=self.driver.find_element(*self.cancel)
except NoSuchElementException:
logging.info("取消按钮没有找到")
else:
logging.info("点击取消")
cancel.click()
def check_skip(self):
logging.info("=========开始检查跳过按钮============")
try:
skip = self.driver.find_element(*self.skip)
except NoSuchElementException:
logging.info("跳过按钮没有找到")
else:
logging.info("点击跳过")
skip.click()
#1、获取整个屏幕的大小size
def size(self):
# a=driver.get_window_size()['width']
x=self.driver.get_window_size()['width']
y=self.driver.get_window_size()['height']
return x,y
#向左划,宽1000 高1000
# driver.swipe(900,800,500,800,2000)
def swipeLeft(self,t,n):
lsize=self.driver.size()
#900
x1=lsize[0]*0.9
y1=lsize[1]*0.5
x2=lsize[0]*0.1
for i in range(n):
self.driver.swipe(x1,y1,x2,y1,t)
2.3)cs_caps.yaml
platformName: Android
platformVersion: 7.1.2
deviceName: 127.0.0.1:62001
appPackage: com.tal.kaoyan
appActivity: com.tal.kaoyan.ui.activity.SplashActivity
noRest: False
ip: 127.0.0.1
port: 4723
2.4)desired_caps.py
import yaml
from appium import webdriver
from config.testLog import test_log
log=test_log()
# 要yaml文件的数据 找到yanl文件,可读
def appium_desired():
stream = open('../config/cs_caps.yaml', 'r')
# 数据加载出来
data = yaml.load(stream, Loader=yaml.FullLoader)
# 字典是什么 元组是什么
info = {}
info['platformName'] = data['platformName']
info['platformVersion'] = data['platformVersion']
info['deviceName'] = data['deviceName']
info['appPackage'] = data['appPackage']
info['appActivity'] = data['appActivity']
info['noRest'] = data['noRest']
# info['ip']=data['ip']
# info['port']=data['port']
# driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', info)
log.info('开始跑')
driver = webdriver.Remote('http://' + str(data['ip']) + ':' + str(data['port']) + '/wd/hub', info)
return driver
if __name__ == '__main__':
appium_desired()
2.5)login_page.py
from selenium.webdriver.common.by import By
from config.common_fun import Common
log=test_log()
class LoginPage(Common):
user=(By.ID, 'com.tal.kaoyan:id/login_email_edittext')
pwd=(By.ID, 'com.tal.kaoyan:id/login_password_edittext')
button = (By.ID, 'com.tal.kaoyan:id/login_login_btn')
def login(self, username,password):
#点击取消
self.check_cancel()
#点击跳过
self.check_skip()
#输入用户名,输入密码,点击登录
log.info('请输入用户名%s'%username)
self.input_(self,user,username)
log.info('请输入密码%s' % password)
self.input_(self, pwd, password)
self.click(self.button)
#要测试各种情况,测正常的情况,异常的情况,先进性unittest永历官吏框架
#结合ddt,想要把测试数据放在Yaml中,放在代码
if __name__ == '__main__':
driver = appium_desired()
lp=LoginPage(driver)
lp.login('qwerty2664','qwerty123')
2.6)testLog.py
#日志
import logging
def test_kog():
logger=logging.getLogger()
logger.setLevel(logging.INFO)
if not logger.handlers:
#输出到控制台
sh=logging.StreamHandler()
logger.addHandler(sh)
#设置格式
fomartor=logging.Formatter(fmt='%(asctime)s%(filename)s%(levelname)s%()')
sh.setFormatter(fomartor)
#输出到文本
fh =logging.FileHandler('../logs/runlog.log',encoding='utf-8')
logger.addHandler(fh)
fh.setFormatter(fomartor)
return logger
四、总结
PS:这里分享一套软件测试的自学教程合集。对于在测试行业发展的小伙伴们来说应该会很有帮助。除了基础入门的资源,博主也收集不少进阶自动化的资源,从理论到实战,知行合一才能真正的掌握。全套内容已经打包到网盘,内容总量接近500个G。如需要软件测试学习资料,关注公众号(互联网杂货铺),后台回复1,整理不易,给个关注点个赞吧,谢谢各位大佬!
☑ 240集-零基础到精通全套视频课程
☑ [课件+源码]-完整配套的教程
☑ 18套-测试实战项目源码
☑ 37套-测试工具软件包
☑ 268道-真实面试题
☑ 200个模板-面试简历模板、测试方案模板、软件测试报告模板、测试分析模版、测试计划模板、性能测试报告、性能测试报告、性能测试脚本用例模板(信息完整)
这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。