十一、UI自动化框架介绍
1. 配置文件中放置config.ini
#登录id login_id = com.ucredit.sale.android:id/account_et #密码id password_id = com.ucredit.sale.android:id/password_et #登录按钮id login_submit_id = com.ucredit.sale.android:id/sign_in_tv
2.locattor
class LocatorSalesLogin:
# 位置授权是否弹出
auth_location_is_show_text = myConfig.getAppElement("auth_location_is_show_text")
# 位置授权按钮
location_check_id = myConfig.getAppElement("login_click_id")
# 用户名
username_id = myConfig.getAppElement("login_id")
# 密码
password_id = myConfig.getAppElement("password_id")
# 登录按钮
login_btn_id = myConfig.getAppElement("login_submit_id")
3. page
class SalesLoginPage(AppPageCommon):
def location_check(self):
"""
位置授权
:return:
"""
# 检查位置授权是否弹出
return self.is_toast_exist(LocatorSalesLogin.auth_location_is_show_text)
def location_click(self):
"""
位置授权
:return:
"""
# 点击
logger.info("开始授权位置...")
print("开始授权位置...")
self.click_element("id",LocatorSalesLogin.location_check_id)
def login(self,u_data,p_data):
"""
登录元素
:param u_data:
:param p_data:
:return:
"""
logger.info("开始登录...")
self.input_id(LocatorSalesLogin.username_id,u_data)
self.input_id(LocatorSalesLogin.password_id,p_data)
logger.info("登录参数为:username : %s,password : %s" % (u_data,p_data))
print("登录参数为:username : %s,password : %s" % (u_data,p_data))
self.click_element("id",LocatorSalesLogin.login_btn_id)
4. testCase-测试用例逻辑
5. testFile-测试用例
6. caseList.txt
#这里存放要运行的case,带#号的测试用例不会执行 # 登录 # app/appCommon/testSalesLogin/test_001_sales_login_module
7. runCase.py
读取caseList.txt中的用例到一个列表。
def set_case_list(self):
"""
读取caselist.txt文件中的用例名称,并添加到caselist元素组
:return:
"""
fb = open(self.caseListFile,encoding="utf-8")
for value in fb.readlines():
data = str(value)
if data != and not data.startswith("#"): # 如果data非空且不以#开头
self.caseList.append(data.replace("
", "")) # 读取每行数据会将换行转换为
,去掉每行数据中的
fb.close()
# print(self.caseList)
生成测试套件,并将用例添加至其中
def set_case_suite(self):
"""
:return:
"""
# 通过set_case_list()拿到caselist元素组
self.set_case_list()
# 创建测试套件
test_suite = unittest.TestSuite()
suite_module = []
# 从caselist元素组中循环取出case
for case in self.caseList:
# 通过split函数来将aaa/bbb分割字符串,-1取后面,0取前面
case_name = case.split("/")[-1]
# 打印出取出来的名称
print(case_name + ".py")
# 批量加载用例,第一个参数为用例存放路径,第二个参数为规则
discover = unittest.defaultTestLoader.discover(self.caseFile, pattern=case_name + .py,
top_level_dir=None)
# 将discover存入suite_module元素组
suite_module.append(discover)
# print(suite_module:+str(suite_module))
# 判断suite_module元素组是否存在元素
if len(suite_module) > 0:
# 如果存在,循环取出元素组内容,命名为suite
for suite in suite_module:
# 从discover中取出test_name,使用addTest添加到测试集
for test_name in suite:
test_suite.addTest(test_name)
else:
print(测试套件中无可执行的测试用例)
return None
return test_suite
run
