博客
关于我
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 Cluster与MGR集群实战
查看>>
multipart/form-data与application/octet-stream的区别、application/x-www-form-urlencoded
查看>>
mysql cmake 报错,MySQL云服务器应用及cmake报错解决办法
查看>>
Multiple websites on single instance of IIS
查看>>
mysql CONCAT()函数拼接有NULL
查看>>
multiprocessing.Manager 嵌套共享对象不适用于队列
查看>>
multiprocessing.pool.map 和带有两个参数的函数
查看>>
MYSQL CONCAT函数
查看>>
multiprocessing.Pool:map_async 和 imap 有什么区别?
查看>>
MySQL Connector/Net 句柄泄露
查看>>
multiprocessor(中)
查看>>
mysql CPU使用率过高的一次处理经历
查看>>
Multisim中555定时器使用技巧
查看>>
MySQL CRUD 数据表基础操作实战
查看>>
multisim变压器反馈式_穿过隔离栅供电:认识隔离式直流/ 直流偏置电源
查看>>
mysql csv import meets charset
查看>>
multivariate_normal TypeError: ufunc ‘add‘ output (typecode ‘O‘) could not be coerced to provided……
查看>>
MySQL DBA 数据库优化策略
查看>>
multi_index_container
查看>>
MySQL DBA 进阶知识详解
查看>>