UI自动化测试框架

2018/07/16 17:16
阅读数 60

UI自动化测试框架(主要cases(test_study)和page)tools中的logger.py  path.py  pyse.py  tool.py HTMLTestRunner.py(网页模板)不多介绍  

 

case和page 相解耦 一般只需维护page,不同功能继承不同的page属性

ui自动化主要用于回归测试。

0.0需求分析:

1、pageObject  页面分层
将每个页面看做一个代码类 每一个可点击的功能点 当做类的函数
比如:
class login_page():
pass
def username():
pass

def passwd():
pass


def login():
pass



lib
pyse 对于selenium二次封装
logger 日制模块
HTMLTestRunner 生成HTML报告的
path 一些我们要用到的环境地址


2、case 和 page分离

1.1  test_study  (用来设计用例)

import unittest  ###case基于该模块
from page.page import Page

class TestStudy(unittest.TestCase): ####
@classmethod ###每个类生效 如果不加是每个def执行
def setUpClass(cls):
cls.page = Page()###实例化
cls.page.open('http://ui.imdsx.cn/uitester/')##打开

@classmethod ##一个case打开一个浏览器就可以
def tearDownClass(cls):
cls.page.quit() ###关闭连接

def test_a_study(self): ###以test文件开头
# self.page.send_i1()
# 执行滚动js
self.page.new_tag_js()
# 点击按钮 打开新的标签
self.page.new_tag()
# 切换 tag指针
self.page.swicth_windows()
# 在新建的tag页面输入字符串
self.page.send_new_tag()
# 校验是否为True
self.assertTrue(self.page.check_study(self.test_a_study.__name__))###unitest提供的方法。


if __name__ == '__main__':
unittest.main() ##执行用例
1.2.Page()
from lib.pyse import Pyse  ###导入lib目录下的pyse


# 实例化 pyse 和提供一个公用功能
class BasePage(object):
def __init__(self):
self.pyse = Pyse('chrome') ##实例化

def open(self, url):
self.pyse.open(url) ##再次封装 方便调用

def close(self):
self.pyse.close()

def quit(self):
self.pyse.quit()

def swicth_windows(self):
self.pyse.open_new_window()


# 公司业务的页面 实际业务相关
class StudyPage(BasePage):

def send_i1(self):
css = 'css=>#i1'
self.pyse.type(css, '11111')

def new_tag(self):
css = 'css=>[href="/new-index/"]' ###属性定位
self.pyse.click(css)

def new_tag_js(self):
js = 'window.scrollTo(0, 0);' ##滚动到最上面
self.pyse.js(js)

def check_study(self,name):
css = 'id=>newtag0'
res = self.pyse.wait_and_save_exception(css, name)###后台需要匹配测试用例,需要用用例名命名
return res


class NewTagPage(StudyPage):
def send_new_tag(self):
css = 'id=>newtag'
self.pyse.type(css, 'xxxxxx')


# 由于可能存在多个业务页面 所以通过继承最后只实例化page
class Page(NewTagPage):
pass


if __name__ == '__main__':
page = Page() ##因为继承关系 只需实例化就可以用其他。
page.open('http://ui.imdsx.cn/uitester/')
page.send_i1()
1.3main()
import unittest
from lib.path import WEBCASEPATH,REPORTPATH
from lib.HTMLTestRunner import HTMLTestRunner
from lib.tool import Tool
class Main(object):
def run(self):
Tool().clear_picture()##实例化再调用清除图片
suit = unittest.TestSuite()
cases = unittest.defaultTestLoader.discover(WEBCASEPATH) #####case路径
for case in cases:
suit.addTest(case)
f = open(REPORTPATH,'wb')
runner = HTMLTestRunner(f, verbosity=1, title=u'测试报告', description=u'用例执行情况:')
runner.run(suit)
f.flush()####实时将内存写入磁盘
f.close()
if __name__ == '__main__':
Main().run()


展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部