从一个框架,延伸各项知识点,补补基础,挺好~
入口函数
上篇介绍了框架每个目录的作用及个别文件的用途,但我漏了一个很重要的,入口函数。
不过已经下载了框架的小伙伴,应该一眼就能看到,start.py
这个文件就是入口,这个文件内容也非常简单,只有一个启动项。
from utils import index
def start():
index.main()
# 从根目录启动,确保相对路径调用正常
if __name__ == '__main__':
# os.popen('adb start-server') #针对android设备
start()
这里调用了utils下index中的main函数,这部分我们放后面再讲。
config.ini 配置说明
代码语言:javascript复制[config]
testcasepath = 'TestCase'
deviceslist =
这部分是基础配置
testcasepath为指定的测试用例集合文件夹名称;
deviceslist为需要运行的设备,这里我们设置为空,默认会读取现在所有连接的设备。未做单独处理,这块可以根据自己需求进行改动。
代码语言:javascript复制[packageMsg]
packagename = ''
apppath = ''
对于安卓设备,使用apk直接安装,需要将包名和路径填到此处。
本框架的iOS设备安装包是直接到TestFlight中进行下载,也可以修改为ipa安装包模式。
这部分可以根据自己需求进行扩展:
1、在config.ini的读取配置中加入此项进行读取;
2、在TestCase对应项目的用例里面编写安装应用脚本
3、此功能归类于应用安装测试,所以我没有在框架中单独分类,需要使用者自行扩展。
4、Android各种设备有不同的权限确认,都是需要自行根据实际情况进行编写对应的测试集。
代码语言:javascript复制[TestCaseSpFolder]
All=0
Demo=1
1表示选择,0表示不选,只能有一个为1,其他为0。
All 表示选择TestCase文件夹下所有的测试用例,本框架中,如果不打算在Testcase文件夹下建项目文件夹,而是把test*.py文件全放里面,就可以把All的值置为1。
这里表示All不选,选择了Demo文件夹。
后面执行用例的时候,就会自动找到TestCase/Demo下的所有测试文件。
扩展:
使用者可以根据自己的需求,选择直接创建测试文件,也可以选择单个项目建一个文件夹存放测试文件
代码语言:javascript复制[TestCaseforDevice]
;#################################################################### Demo
;99999999999999 = TEST_Demo_001
;; 123 ->>
00008101-001859DE1E38001E = TEST_Demo_002
;; 186 ->>
00008030-001E19021A42802E = TEST_Demo_001,TEST_Demo_002
这个配置表示指定某些设备执行某些用例文件。
1、如果设备不在线,则会跳过;
2、设备选择的测试文件所在的文件夹需要在TestCaseSpFolder置为1;
3、如果需要执行多个测试文件,则用逗号进行分隔;
4、多台设备,依次写下去即可;
代码语言:javascript复制[Email]
mail_host = ''
mail_user = ''
mail_pwd = ''
sender = ''
receivers = ''
[DingTalk]
webhook = ''
secret = ''
[FeiShu]
webhook = ''
这些是当你执行完测试报告后,进行报告的发送。
如何使用可以参考我之前的文章,以钉钉为示例。
python之钉钉机器人自动发消息——傻瓜式教程 (qq.com)
config读取及相关代码
utils --> readConfig.py
此py文件中都是对config文件的相关操作
注意:
代码语言:javascript复制增加了新增及删除对应的section和option,但不建议使用;
configparser库本身存在问题,在写入和删除时会丢失所有注释,建议使用其他方式写入;
或者说注释丢失没有影响的话,就可以随意使用。
文件里面都有详细注释,这个大家有兴趣的就直接看源码哦~
这里放一部分:
代码语言:javascript复制import os,inspect,configparser
# 获取当前文件的上层路径
parentPath = os.path.abspath(os.path.dirname(inspect.getfile(inspect.currentframe())) os.path.sep ".")
# 获取当前项目的根路径
rootPath = os.path.abspath(os.path.dirname(parentPath) os.path.sep ".")
# 获取config.ini文件路径
configPath = rootPath "settingsconfig.ini"
# 初始化配置文件
configFile = configparser.ConfigParser()
configFile.read(configPath, encoding="utf-8")
# 获取TestCaseforDevice下的所有设备uuid及对应的用例,多个用例用逗号分隔
def getAllTestCase():
'''
:return: 字典组合的{'device1':'case1,case1_1','device2':'case2'}
'''
selectDevicesList = configFile.options('TestCaseforDevice')
selectTestCaseList = []
for i in selectDevicesList:
selectTestCaseList.append(configFile.get('TestCaseforDevice',i))
device_case_dict = dict(zip(selectDevicesList,selectTestCaseList))
return device_case_dict
# 获取指定的用例文件夹名称
def getSpCaseFolder():
getCaseFolder = configFile.options('TestCaseSpFolder')
getSpCaseFolderList = []
for i in getCaseFolder:
try:
if configFile.getint('TestCaseSpFolder',i) == 1:
getSpCaseFolderList.append(i)
except:pass
return getSpCaseFolderList
#获取设备列表
def get_devicesList():
devicesList = []
get_devicesList = configFile.get('config','deviceslist')
devices = get_devicesList.split(',')
for i in devices:
devicesList.append(i)
return devicesList
增删改也有,但会把ini文件的注释给冲掉,慎用
代码语言:javascript复制#写配置文件
def addConfig(section,option,value):
if option!="" and value!="":
if not configFile.has_section(section):
configFile.add_section(section)
configFile.set(section,option,value)
configFile.write(open(configPath, "w"))
#删除配置文件下某个setion的所有内容
def delSectionConfig(section):
if configFile.has_section(section):
configFile.remove_section(section)
configFile.write(open(configPath, "w"))
else:
raise f"{section}不存在!"
#删除配置文件下setion下的某个option
def delOptionConfig(section,option):
if configFile.has_option(section,option):
configFile.remove_option(section,option)
configFile.write(open(configPath, "w"))
else:
raise f"填写的{option}不存在于{section}下!"
IOS设备环境配置说明
iOS设备的复杂的地方在于Xcode配置安装WebDriverAgent,必须要使用Mac电脑。
参考往期文章:
ios自动化 - Xcode、WebDriverAgent环境部署 (qq.com)
这里需要注意的是,如果你的ios版本小于等于ios10,需要使用Xcode10版本,而Xcode对应的Mac电脑OS版本需要较低,最新OS系统无法安装(这也就是我有一台ios10没配好环境的原因,如果有解决方案,欢迎给我后台留言或者联系我,万分感谢)
版本支持列表参考:
Xcode - 支持 - Apple Developer
后续预告
框架执行流程图
主功能逻辑
unittest的testcase外部传参函数剖析
最后祝大家工作顺利身体健康,打个喷嚏就暴富!