appium-python3进行app自动化测试
一、项目概述
使用目前较为流行的UI自动化测试工具Appium,语言选择python3.7,利用ddt进行数据驱动,yaml管理项目的定位,Excel管理测试用例,unittest进行组织测试用例,测试设备选择自助机
测试报告使用HTMLTestRunnerCN进行测试用例完成后测试报告的生成。
可配置输出excel报告并,钉钉邮件发送。
依赖第三方包见disanfang.txt
2.目录简介:
2.1 common.config:配置相关,(配置app以及测试设备相关信息)
2.2 data:用例存放Excel管理,dingwei下面需要写成测试步骤的逻辑。
2.3 exctfuntion 根据测试文件里面的测试步骤形成相应的测试逻辑
from common.untils.operyaml import open_da
from common.untils.log import logger,LOG
import time
from common.untils.py_app import deriver_fengzhuang as feng
'''解析测试步骤,按照需求进行测试用例
默认的定位的最后的一组为断言
'''
@logger('解析测试步骤')
class Makeappcase():
def __init__(self,deriver,path):
self.deriver=deriver
self.path=path
def open_file(self):
return open_da(path=self.path)
def exce_case(self,**kwargs):
data=self.open_file()['data']
case_der=feng(driver=self.deriver)
for i in range(len(data)-1):
f=case_der.find_elemens(lujing=data[i]['element_info'],fangfa=data[i]['find_type'])
if data[i]['operate_type'] =='click':
f[int(data[i]['index'])].click()
elif data[i]['operate_type'] =='text':
f[int(data[i]['index'])].text
elif data[i]['operate_type'] =='send_key':
f[int(data[i]['index'])].clear()
f[int(data[i]['index'])].set_value(kwargs.get(data[i]['key']))
elif data[i]['operate_type'] =='top':
se=''
self.driver.tap(self,[(99,99)])
else:
LOG.info('请检查您的测试步骤')
i+=1
time.sleep(8)
f=case_der.find_elemens(lujing=data[-1]['element_info'], fangfa=data[-1]['find_type'])
if data[-1]['operate_type'] == 'text':
duanyan={'code':0,'data':f[int(data[-1]['index'])].text}
else:
duanyan = {'code': 1, 'data':"请检查您的测试步骤最后一步为断言用的"}
LOG.info('请检查您的测试步骤最后一步为断言用的')
return duanyan
print("解析测试步骤,按照需求进行测试用例,默认的定位的最后的一组为断言")
2.4 funtions:根据测试逻辑相关和exctfuntion下的形成测试步骤后组合成测试用例
# encoding: utf-8
'''
测试测试
'''
from common.untils.log import LOG,logger
from excetfuntion.exectfuntion import Makeappcase
import os
path=os.getcwd()
path_yongli = path+'\\data\\dingwei\\reg.yaml'
@logger('测试测试')
class RegFuntion:
def __init__(self,deriver):
self.deriver=deriver
self.path=path_yongli
self.open=Makeappcase(self.deriver,path=self.path)
def reg(self,**kwargs):
f=self.open.exce_case(**kwargs)
if f['code']==1:
LOG.info('无法获取断言')
return
else:
guomiao=f['data']
return guomiao
2.5 report:根据功能模块 形成的测试用例加入相应的测试数据 组成测试用例
2.6 logs:测试过程的日志
2.7 report:测试报告,性能收集结果存储地方
2.8 testsuite:组织测试用例。
2.9 common.until:公共的工具模块。
2.10 run.py ui自动化测试的主脚本
3 目前存在的不足:
3.1 页面定位和参数放至excel中,分模块执行,也是会启动多次app,频繁重启会有性能问题,例1:提示当前网络差,页面加载慢;例2:页面元素无法加载
3.2 输入excel报告,通过失败分组有bug
3.3 查看民法典,页面卡死无响应:appium 使用的无障碍服务, 获取页面节点,导致浏览器内核长时间未响应
3.4 目前的断言,只判断每组定位的最后一个是否正确
3.5 页面定位放置在excel的一个sheet中,可以连贯性执行。具体看需求,是否需要用例连贯性执行,或者分模块多次重启app执行,各有优缺点。
用例连贯性执行:一步不通过,会影响后续步骤的点击;
分模块多次重启app执行:频繁重启app,没有足够的带宽支撑。会出现页面无法加载