博客
关于我
Appium--pageobject实践(4)-unittest封装
阅读量:512 次
发布时间:2019-03-07

本文共 3105 字,大约阅读时间需要 10 分钟。

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=DEBUGhandlers=consoleHandler,fileHandler[logger_main]level=DEBUGqualname=mainhandlers=fileHandler[handlers]keys=consoleHandler,fileHandler[handler_consoleHandler]class=StreamHandlerlevel=DEBUGformatter=fmtargs=(sys.stdout,)[handler_fileHandler]class=logging.handlers.RotatingFileHandlerlevel=DEBUGformatter=fmtargs=('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 webdriverimport yamlimport  loggingimport 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

封装测试用例

 

转载地址:http://wcnjz.baihongyu.com/

你可能感兴趣的文章
MYSQL 幻读(Phantom Problem)不可重复读
查看>>
mysql 往字段后面加字符串
查看>>
mysql 快照读 幻读_innodb当前读 与 快照读 and rr级别是否真正避免了幻读
查看>>
MySQL 快速创建千万级测试数据
查看>>
mysql 快速自增假数据, 新增假数据,mysql自增假数据
查看>>
MySql 手动执行主从备份
查看>>
Mysql 批量修改四种方式效率对比(一)
查看>>
Mysql 报错 Field 'id' doesn't have a default value
查看>>
MySQL 报错:Duplicate entry 'xxx' for key 'UNIQ_XXXX'
查看>>
Mysql 拼接多个字段作为查询条件查询方法
查看>>
mysql 排序id_mysql如何按特定id排序
查看>>
Mysql 提示:Communication link failure
查看>>
mysql 插入是否成功_PDO mysql:如何知道插入是否成功
查看>>
Mysql 数据库InnoDB存储引擎中主要组件的刷新清理条件:脏页、RedoLog重做日志、Insert Buffer或ChangeBuffer、Undo Log
查看>>
mysql 数据库中 count(*),count(1),count(列名)区别和效率问题
查看>>
mysql 数据库备份及ibdata1的瘦身
查看>>
MySQL 数据库备份种类以及常用备份工具汇总
查看>>
mysql 数据库存储引擎怎么选择?快来看看性能测试吧
查看>>
MySQL 数据库操作指南:学习如何使用 Python 进行增删改查操作
查看>>
MySQL 数据库的高可用性分析
查看>>