unittest(4):openpyxl结合ddt练习

ddt介绍及使用

ddt介绍

  • 名称:Data-Driven Tests,数据驱动测试
  • 作用:由外部数据集合来驱动测试用例的执行
  • 核心的思想:数据和测试代码分离
  • 应用场景:一组外部数据来执行相同的操作
  • 优点:当测试数据发生大量变化的情况下,测试代码可以保持不变
  • 实际项目:excel存储测试数据,ddt读取测试数据到单元测试框架(测试用例中)

补充:

所谓数据驱动,就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。说的直白些,就是参数化的应用。

ddt:装饰类,也就是继承自TestCase的类。data:装饰测试方法。参数是一系列的值。unpack:传递的是复杂的数据结构时使用。比如使用元组或者列表,添加unpack之后,ddt会自动把元组或者列表对应到多个参数上,字典也可以这样处理;当没有加unpack时,方法的参数只能填一个。

import unittest
import ddt


# 装饰类
@ddt.ddt
class DdtDemo(unittest.TestCase):
def setUp(self):
pass

def tearDown(self):
pass

# 装饰方法
@ddt.data(("15312344578", "12345678"), ("15387654321", "12345678"))
@ddt.unpack
def test_ddt(self, username, password):
print(username, password)
if __name__ == '__main__':
unittest.main(verbosity=2)

上面的例子是为了加深理解,接下来介绍excel结合ddt实现数据驱动,优化之前的test_login.py模块。

import unittest
import urllib.parse
from common.request_handle import requestHandle
from common.excel_handle import ExcelHandler
import ddt
@ddt.ddt
class TestF(unittest.TestCase):
'''
@ddt.data(*case_data)传递的参数不能在setup里实例化
'''
case_data = ExcelHandler('case1.xlsx', 'Second').get_data()
print(case_data)

def setUp(self) -> None:
self.request=requestHandle()

def tearDown(self) -> None:
self.request.close()

@ddt.data(*case_data)
def testCaseF(self,items):
'''
当请求方式是"Content-Type":"application/x-www-form-urlencoded"
传入的数据需要进行转换formdata=urllib.parse.urlencode(parmes)
:return:
'''
header={"key":"Content-Type",
"Content-Type":"application/x-www-form-urlencoded"
}
# print(items[0])
re_method='post'
re_method=str(items['method'])
re_url=str(items['URL'])
'''
从excel读取的字典数据要加eval恢复成原类型数据,字符串类型加str恢复原类型
'''
parmes=eval(items['payload'])
print(parmes)
formdata=urllib.parse.urlencode(parmes)
result=self.request.visvit(method=re_method,data=formdata,url=re_url,headers=header)
return result
posted @ 2021-07-12 15:37  Tester-**  阅读(59)  评论(0编辑  收藏  举报