博客
关于我
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学习总结(70)——MySQL 优化实施方案
查看>>
Mysql学习总结(71)——MySQL 重复记录查询与删除总结
查看>>
Mysql学习总结(71)——数据库介绍(MySQL安装 体系结构、基本管理)再回顾
查看>>
Mysql学习总结(72)——MySQL 开发者开发,设计规范再总结
查看>>
Mysql学习总结(73)——MySQL 查询A表存在B表不存在的数据SQL总结
查看>>
Mysql学习总结(74)——慢SQL!压垮团队的最后一根稻草!
查看>>
Mysql学习总结(75)——并发量大、数据量大的互联网业务数据库设计军规
查看>>
Mysql学习总结(76)——MySQL执行计划(explain)结果含义总结
查看>>
Mysql学习总结(77)——温故Mysql数据库开发核心原则与规范
查看>>
Mysql学习总结(78)——MySQL各版本差异整理
查看>>
Mysql学习总结(79)——MySQL常用函数总结
查看>>
Mysql学习总结(7)——MySql索引原理与使用大全
查看>>
Mysql学习总结(80)——统计数据库的总记录数和库中各个表的数据量
查看>>
Mysql学习总结(81)——为什么MySQL不推荐使用uuid或者雪花id作为主键?
查看>>
Mysql学习总结(82)——MySQL逻辑删除与数据库唯一性约束如何解决?
查看>>
Mysql学习总结(83)——常用的几种分布式锁:ZK分布式锁、Redis分布式锁、数据库分布式锁、基于JDK的分布式锁方案对比总结
查看>>
Mysql学习总结(84)—— Mysql的主从复制延迟问题总结
查看>>
Mysql学习总结(85)——开发人员最应该明白的数据库设计原则
查看>>
Mysql学习总结(8)——MySql基本查询、连接查询、子查询、正则表达查询讲解
查看>>
Mysql学习总结(9)——MySql视图原理讲解与使用大全
查看>>