前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Appium系列(十五)继续利用分层化思想优化代码

Appium系列(十五)继续利用分层化思想优化代码

作者头像
雷子
发布2021-03-30 16:30:19
3970
发布2021-03-30 16:30:19
举报

前言

在上一篇文章--Appium自动化(十四)引入分层化思想优化代码,由于代码的逐渐增加,原有的文件足够大,不利于维护,为了更好的维护呢,我们利用分层化的思想对于代码进行拆分,优化,便于后期的维护。

正文

在之前的文章中,我们针对了文件进行了优化。现在我们再来看一些代码还是有优化的空间的,比如,我们之前测试的测试apk存放,测试case数据的维护,接下来,我们就是去优化以上内容。

首先,我们去创建一个目录,起名为apk目录,然后我们去存放我们的apk。

我们把apk放到这个目录即可。

接下来,我们在logintestcase.py修改我们的apk的路径。

代码语言:javascript
复制
apk_path = "apk/iBiliPlayer-bili.apk"

优化掉apk,接下来我们就是要优化测试用例数据的。我们要怎么去优化呢,首先可以创建一个目录来管理数据的,我们可以创建文件夹data来管理。又因为我们管理的是casedata数据,我们在data创建一个目录来区分case的管理。

我们再来看这些数据,我们可以看到这些数据在list下面都是固定格式的信息,就可以使用yaml来管理。

我们在data的casedata目录创建logincase.yaml来管理。文件内容如下

代码语言:javascript
复制
-
  user: name
  user_password: 123456
  msg: 测试失败
-
  user: shibai
  user_password: 123456
  msg: 测试成功

接下来,我们在case下面的logintestcase.py修改我们的测试用例,如下:

代码语言:javascript
复制
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)

这样我们就完成来,我们的参数的提取,目前存在的问题,就是元素定位的问题,我们应该如何来维护。后续将会给大家打来后续的分享。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 雷子说测试开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档