Appium--pageobject实践(4)-unittest封装

Unittest的核心要素简介

1.TestCase

一个testcase的实例就是一个测试用例。什么是测试用例呢?就是一个完整的测试流程,包括测试前准备环境的准备(setup),执行测试代码(run),以及测试后环境的海员(teardown)。单元测试(unit test)的本质也就在这里,一个测试用例是一个完整的测试单元,通过运行这个测试单元,可以对某一个问题进行验证。

2.TestSuite

而多个测试用例集合在一起,就是testsuite,而且testsuite也可以嵌套testsuite。

Testloader是用来加载用例到testsuite中去的。

3.TextTestRunner

TextTestRunner是用来执行测试用例的,其中run()会执行testsuite/testcase中的run(result)方法。测试结果会保存到TextTestRunner实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息

4.Fixture

而对一个测试用例换件的搭建和销毁,是一个fixture

用例封装的完整过程:

前提:已配置好yaml应用初始化参数文件和log.conf日志配置文件

定义配置文件cap.yaml,包括key和value,具体内容如下:

platformName: Android 
platformVersion: 4.4.2 
deviceName: 127.0.0.1:62001 
app: apk文件路径
packageName: 包名 
appActivity: 主Activity 
unicodekeyboard: True 
resetkeyboard: True 
noReset: False 
ip: 127.0.0.1 
port: 4723 
uiautomationName: uiautomator2

定义日志配置文件logconf,脚本内容如下:

[loggers]

keys=root,main

[logger_root]

level=DEBUG

handlers=consoleHandler,fileHandler

[logger_main]

level=DEBUG

qualname=main

handlers=fileHandler

[handlers]

keys=consoleHandler,fileHandler

[handler_consoleHandler]

class=StreamHandler

level=DEBUG

formatter=fmt

args=(sys.stdout,)

[handler_fileHandler]

class=logging.handlers.RotatingFileHandler

level=DEBUG

formatter=fmt

args=('test.log','a')

[formatters]

keys=fmt

[formatter_fmt]

format=%(asctime)s - %(filename)s - %(levelname)s - [line:%(lineno)d] - %(message)s

创建启动app初始化模块:新建desired_caps.py文件,脚本内容如下

from appium import webdriver

import yaml

import  logging

import logging.config

#日志配置文件

CON_LOG='log.conf'

logging.config.fileConfig(CON_LOG)

logging=logging.getLogger()

def app_desired():

    #读取配置文件的数据

    file = open('cap.yaml', 'r')

    data = yaml.load(file)

    logging.info("Initialize  APP...")

    desired_caps = {}

    desired_caps['platformName'] = data['platformName']

    desired_caps['platformVersion'] = data['platformVersion']

    # 第一个模拟器默认127.0.0.1:62001  第二个默认:127.0.0.1:62025

    desired_caps['deviceName'] = data['deviceName']

    desired_caps['app'] = data['app']

    desired_caps['packageName'] = data['packageName']

    desired_caps['appActivity'] = data['appActivity']

    desired_caps['noReset'] = data['noReset']

    desired_caps['unicodekeyboard'] = data['unicodekeyboard']

    desired_caps['resetkeyboard'] = data['resetkeyboard']

    desired_caps['uiautomationName'] = data['uiautomationName']

    logging.info("Start APP...")

    driver = webdriver.Remote('http://' + str(data['ip']) + ':' + str(data['port']) + '/wd/hub', desired_caps)

    driver.implicitly_wait(8)

    return driver

#调试当前脚本方法

if __name__ == '__main__':

    app_desired()

 

创建基类baseview.py,脚本内容如下:

class BaseView(object):

    def __init__(self,driver):

        self.driver=driver

    #普通元素定位

    def find_element(self,*loc):

        return self.driver.find_element(*loc)

    #元素定位返回一个数组list,一般用于判断元素是否存在

    def find_elements(self,*loc):

        return self.driver.find_elements(*loc)

    #获取屏幕大小

    def getsize(self):

        return self.driver.getsize()

    #滑动屏幕

    def swipe(self, star_x,star_y,end_x,end_y,duration):

        return self.driver.swipe( star_x,star_y,end_x,end_y,duration)



    def time_wait(self,t):

        return self.sleep(t)

 

创建公共类common.py

定义测试用例实例:登录模块

初始化测试框架unittest:创建文件myunit.py

封装测试用例

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Miss糖豆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值