千纸鹤

  博客园  ::  :: 新随笔  ::  ::  :: 管理
  5 随笔 :: 70 文章 :: 0 评论 :: 9301 阅读
《一》基于ddt实现UnitTest测试用例与数据分离的形态
1. data实现数据分离
data的实现原理
1. 声明data装饰器,生成对应的测试数据。每一组数据都基于,进行区分
2. 基于data分离了多少组数据,则该条用例执行多少次
3. 基于测试函数中定义的形参,将data分离的每一组数据依次传入
2. unpack 解包data中的数据包
unpack的实现原理
1. 基于data生成的数据组,进行二次解包
2. 解包的规则与data本身是一样的
3. 基于data和UNpack装饰器解包的数据组,个数上要与形参完全一致

《二》DDT_实战程序Demo(ddt_demo.py)
主支程序代码
import unittest
from ddt import ddt, data, unpack
@ddt
class Demo(unittest.TestCase):
# 代码示例(def test_01、def test_02、def test_03、def test_04、def test_05)
if __name__ == '__main__':
unittest.main()
    分支程序代码
def test_01
def test01(self):
li=['北京','上海','广州','深圳']
for s in li:
print(s,end=' ') # 输出结果:北京 上海 广州 深圳

def test_02
@data('北京', '上海', '广州', '深圳')
def test_02(self, name):
print(name,end=' ') # 输出结果:北京 上海 广州 深圳

def test_03
@data(['北京','一线城市'], ['昆明','二线城市'], ['海口','三线城市'],['常德','四线城市'])
def test_03(self, name):
print(name,end=' ')
# 输出结果:# ['北京', '一线城市'] ['昆明', '二线城市'] ['海口', '三线城市'] ['常德', '四线城市']

def test_04
@data(['北京'], ['昆明','二线城市'], ['海口','三线城市'],['常德','四线城市'])
@unpack
def test_04(self, name,type_=None):
print(name,end=':')
print(type_)
# 输出结果 北京: None 昆明: 二线城市 海口: 三线城市 常德: 四线城市

def test_05
def read_file():
li=[]
file = open('./data/demo.txt',encoding='utf-8')
for line in file.readlines():
li.append(line)
return li

@data(*read_file())
def test_05(self,name):
print(name) # 输出内容:demo.txt(北京, 上海 广州, 深圳)

《三》读取yaml文件的内容:请看资料:Python编程进阶 > 文件处理与OS模块2 > yaml文件读取

    yaml文件读取内容详情:《0034》第三章 Python编程进阶:文件处理与os模块2

《四》写入yaml文件的内容
# 写入yaml(定义写入的内容)
dic = {
'name2': '虚竹'
}
dic1 = {
'age': '14'
}

# 写入操作:为了避免中文编码被解析成其他内容,需要添加一个参数,在文件中追加内容,则读写模式参数为a
with open('./data/data4.yaml', 'a', encoding='utf-8') as file:
yaml.dump(dic, file, allow_unicode=True)

# 读取写入后的yaml文件内容
file = open('./data/data4.yaml', 'r', encoding='utf-8')
# 读取yaml中的内容
data = yaml.load(stream=file, Loader=yaml.FullLoader)
print(data)

《五》基于Yaml来实现数据驱动的测试行为
data_login.yaml
-
url: http://39.98.138.157/shopxo/index.php
login:
name: link text
value: 登录
accounts:
name: name
value: accounts
txt: xuzhu666
password:
name: name
value: pwd
txt: '123456'
time_: 3
button:
name: xpath
value: //button[text()="登录"]
assert_text:
reality:
name: link text
value: 退出
expect: 退出
read_yaml.py
import unittest
from ddt import ddt, file_data
from test008.test0084.test0084_01.keys import Keys

@ddt
class TestCase(unittest.TestCase):
def setUp(self) -> None:
self.key = Keys('Chrome')

def tearDown(self) -> None:
self.key.quit()

# 实现登录操作流程:file_data中传入yaml的文件路径即可
@file_data('./data/data_login1.yaml')
def test_01_login(self, **kwargs):
print(kwargs)
self.key.open(kwargs['url'])
self.key.click(**kwargs['login'])
self.key.input(**kwargs['accounts'])
self.key.input(**kwargs['password'])
self.key.click(**kwargs['button'])
self.key.wait(kwargs['time_'])
self.assertEqual(first=kwargs['assert_text']['expect'],
second=self.key.get_text(**kwargs['assert_text']['reality']),
msg='断言失败')

if __name__ == '__main__':
unittest.main()
posted on   隆江猪脚饭  阅读(83)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示