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
封装测试用例