UnitTest与数据驱动及测试框架设计模式
UnitTest
通过直接导入UnitTest包即可实现: import unittest
是python库自带的自动化测试框架
主要用于管理测试用例和实现数据驱动
在nuittest 中所有的测试用例 都是基于 test_ 基于前缀来实现的 如果不写的话 那么它只是一个普通的函数
unitest 会自动识别执行 test_ 为测试用例
简单小实例 引入公代码关键字驱动脚本 https://www.cnblogs.com/sunzzc/p/13375537.html :
import unittest
from web_ui.my_keywords import TestKeyWords
import time
class Test_For_sun(unittest.TestCase):
# 前置条件 每条测试用例运行之前执行
def setUp(self):
print('执行前')
# 后置条件 每条测试用例运行之后执行
def tearDown(self):
print('执行后')
# 测试用例1
def test_1(self):
# 对类传入 url 已经浏览器
sr = TestKeyWords('http://www.baidu.com', 'chrome')
# 传入 定位方法 元素属性 已经输入内容
sr.inupt_text('id', 'kw', '老祝头')
# 点击方法
sr.click_element('id', 'su')
time.sleep(2)
# 测试用例2
def test_2(self):
sr = TestKeyWords('http://www.baidu.com', 'chrome')
sr.inupt_text('id', 'kw', '老祝头之夜的钢琴曲第五篇')
time.sleep(2)
sr.click_element('id', 'su')
if __name__ == '__main__':
unittest.main()
前置条件 SetUp 进行框架优化
import unittest
from web_ui.my_keywords import TestKeyWords
import time
class Test_For_sun(unittest.TestCase):
# 前置条件 每条测试用例运行之前执行
def setUp(self):
print('执行前进行实例化 url')
self.sr = TestKeyWords('http://www.baidu.com', 'chrome')
# 后置条件 每条测试用例运行之后执行
def tearDown(self):
print('执行后释放资源')
self.sr.quit_browser()
def test_1(self):
self.sr.inupt_text('id', 'kw', '老祝头')
self.sr.click_element('id', 'su')
time.sleep(2)
def test_2(self):
self.sr.inupt_text('id', 'kw', '老祝头之夜的钢琴曲第五篇')
time.sleep(2)
self.sr.click_element('id', 'su')
if __name__ == '__main__':
unittest.main()
quit与close的区别:
quit 是关闭浏览器,并且关闭ChromeDriver进程
close 是关闭当前的标签页不会关闭进程
数据驱动:
将代码与数据进行分离,单纯由数据组成文件,再由文件来驱动关键字,最终实际整个自动化的流程
读取到数据,基于固定格式的数据内容进行拼接 拼接后的内容作为关键字所需要的参数 进行传入,从而执行对应
的关键字,再将结果与预期结果进行对比,从而获得单条测试用例是否通过的结果
下载包 ddt数据驱动
如果传入两个不同参数 ddt 会以list形式传递 如果不导入unpack解包的话 会自动默认集合里面是一个整体 所以会报错
所以要unpack 进行对集合二次分解 即可解决
示例:
import unittest
from web_ui.my_keywords import TestKeyWords
import time
# 导入数据驱动包 引用data传参
from ddt import ddt,data,unpack
# ddt 数据驱动的测试模块 用装饰器的模式来实现
@ddt()
class Test_For_sun(unittest.TestCase):
def setUp(self):
self.sr = TestKeyWords('http://www.baidu.com', 'chrome')
def tearDown(self):
self.sr.quit_browser()
# 引用data 对测试用例的传参 传接函数形参
@data(['id','老祝头'],['id','老祝头之夜的钢琴曲第五篇'])
# unpack 进行unittest 修复bug
@unpack
def test_1(self,locator,input_value):
self.sr.inupt_text(locator, 'kw', input_value)
self.sr.click_element('id', 'su')
time.sleep(2)
if __name__ == '__main__':
unittest.main()