前言
在上一篇文章--Appium自动化(十四)引入分层化思想优化代码,由于代码的逐渐增加,原有的文件足够大,不利于维护,为了更好的维护呢,我们利用分层化的思想对于代码进行拆分,优化,便于后期的维护。
正文
在之前的文章中,我们针对了文件进行了优化。现在我们再来看一些代码还是有优化的空间的,比如,我们之前测试的测试apk存放,测试case数据的维护,接下来,我们就是去优化以上内容。
首先,我们去创建一个目录,起名为apk目录,然后我们去存放我们的apk。
我们把apk放到这个目录即可。
接下来,我们在logintestcase.py修改我们的apk的路径。
apk_path = "apk/iBiliPlayer-bili.apk"
优化掉apk,接下来我们就是要优化测试用例数据的。我们要怎么去优化呢,首先可以创建一个目录来管理数据的,我们可以创建文件夹data来管理。又因为我们管理的是casedata数据,我们在data创建一个目录来区分case的管理。
我们再来看这些数据,我们可以看到这些数据在list下面都是固定格式的信息,就可以使用yaml来管理。
我们在data的casedata目录创建logincase.yaml来管理。文件内容如下
-
user: name
user_password: 123456
msg: 测试失败
-
user: shibai
user_password: 123456
msg: 测试成功
接下来,我们在case下面的logintestcase.py修改我们的测试用例,如下:
from time import sleep
from common.adbtool import *
from common.packageparse import *
import unittest
from ddt import ddt,file_data
from appium import webdriver
apk_path = "apk/iBiliPlayer-bili.apk"
@ddt
class testCase(unittest.TestCase):
def setUp(self) -> None:
packname = get_apkname(apk_path)
dev = get_devices()[0]
is_first_install = False
# 1.判断是否安装app
is_install = isinstallapk(packname, dev)
if is_install is False:
# 2.如果没有安装,则安装
installapk(apk_path, dev)
is_first_install = True
# 3.启动apk测试
apkname = get_apkname(apk_path)
launcheractivity = get_apk_lautc(apk_path)
desired_caps = {
'platformName': 'Android',
'deviceName': dev, # adb deivces
'platformVersion': getPlatForm(dev), # 从设置中可以获取
'appPackage': apkname, # 包名
'appActivity': launcheractivity, # apk的launcherActivity
# 'skipServerInstallation': True
}
self.driver = webdriver.Remote('http://0.0.0.0:4723/wd/hub', desired_caps)
sleep(10)
# 启动同意用户协议
self.driver.find_element_by_id("tv.danmaku.bili:id/agree").click()
if is_first_install:
# 首次安装需要加载文件
sleep(50)
sleep(10)
self.driver.find_element_by_id("tv.danmaku.bili:id/avatar_layout").click()
sleep(5)
self.driver.find_element_by_xpath("//*[@text='登录']").click()
def tearDown(self) -> None:
self.driver.close()
@file_data("data/casedata/logincase.yaml")
def testlogin(self,user,user_password,msg):
username = self.driver.find_element_by_id('tv.danmaku.bili:id/username')
username.clear()
username.send_keys(user)
password = self.driver.find_element_by_id('tv.danmaku.bili:id/passport_tag')
password.clear()
password.send_keys(user_password)
login = self.driver.find_element_by_id('tv.danmaku.bili:id/btn_login')
login.click()
try:
self.driver.find_element_by_id('tv.danmaku.bili:id/btn_login')
self.assertTrue(False,msg=msg)
except:
self.assertTrue(True,msg=msg)
这样我们就完成来,我们的参数的提取,目前存在的问题,就是元素定位的问题,我们应该如何来维护。后续将会给大家打来后续的分享。