我在上一篇(https://www.cnblogs.com/wlyhy/p/10083318.html) 文章整理了unittest的模板,但在后续学习中,发现还有许多值得优化的地方。例如在我们设计测试用例的时候,很多时候会出现测试步骤一样,只是其中的测试数据有变化而已。就比如测试登录时的账号密码。这个时候,如果我们依然使用一条case一个方法的话,会出现大量的代码冗余,而且效率也会大大降低。此时,ddt模块就能帮助我们解决这个问题。ddt(data-driven test),顾名思义,数据驱动测试。这个模块是第三方库,需要我们自己下载。或者直接在命令行输入pip install ddt。下载成功之后我们就能直接使用。基于ddt模块,我修改了上次整理的unittest模板,的确觉得代码清爽了很多。以下是基于ddt优化后的代码:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time :2018/12/10 15:03
# @Author :Yosef-夜雨声烦
# @Email :wurz529@foxmail.com
# @File: :learnddt.py
# @Software :PyCharm Community Edition import unittest
from ddt import ddt, data, unpack
import HTMLTestRunner
import time @ddt # 代表这个测试类使用了数据驱动ddt
class TestCases(unittest.TestCase): def setUp(self):
print("*******************************")
print("每一条case执行之前都会执行这个方法") def tearDown(self):
print("每一条case执行之后都会执行这个方法\n") @data("hello", "", " ") # 代表传入的参数,一共三个参数,每次执行传一个值给value。
def test_testcases1(self, value):
print("这是一条测试用例case")
try:
self.assertTrue(value.isalpha())
print("test pass")
except Exception as e:
print("出错啦,错误结果是%s" % e)
print("test failed")
raise e @data((1, 1), (1, 2), (1, 1.0)) # 代表传入的参数,一共三个参数,每次传入两个值,下面两个value分别来接收两个值。
@unpack # 告诉我们的测试用例传入的是两个以上的值
def test_testcases2(self, value1, value2):
print("这是一条测试用例case")
try:
self.assertEqual(value1, value2)
print("test pass")
except Exception as e:
print("出错啦,错误结果是%s" % e)
print("test failed")
raise e # if __name__ == "__main__":
# unittest.main() suite = unittest.TestSuite()
loader = unittest.TestLoader()
suite.addTest(loader.loadTestsFromTestCase(TestCases)) report_dir = "../Test report"
now = time.strftime("%Y-%m-%d %H-%M-%S")
reportname = report_dir + "/" + now + " Test report.html" with open(reportname, "wb+") as file:
runner = HTMLTestRunner.HTMLTestRunner(file, 2, title="Model test report",
description="Hello testers! This is the description of Model test"
"report")
runner.run(suite)

ddt模块的更多操作使用等待大佬们去发现,我这里就不细说了。 当然,这只是在unittest模块上基于ddt模块的优化,在后面我将继续学习,做到测试数据与代码分离,然后会继续优化这个模板。 新手学习,不足之处肯定有,希望大佬们不吝赐教。

最新文章

  1. AFNetworking 3.0 源码解读(八)之 AFImageDownloader
  2. geotrellis使用(二十四)将Geotrellis移植到CDH中必须要填的若干个坑
  3. 移动端WEB开发备忘录
  4. bootstrap按钮组
  5. hdu 4744 最小费用流
  6. 【转】Android SDK Manager 更新方法
  7. Floyd-Warshall算法详解(转)
  8. deque(双端队列)
  9. 014 一对多关联映射 单向(one-to-many)
  10. CLion之C++框架篇-优化框架,单元测试(二)
  11. Qt.常用代码整理
  12. [CodeForces - 447D] D - DZY Loves Modification
  13. 关于Vector,map等迭代器问题
  14. MEF框架简介
  15. c# 16进制转int
  16. SQL Server 断开某个数据库所有连接(还原的时候需要)
  17. CakePHP调用model类和foreach循环
  18. Jenkins系列-Jenkins添加git密钥对
  19. golang 聊天室
  20. 为Arch Linux添加鼠标支持(gpm)

热门文章

  1. c语言条件编译#ifdef与#if defined
  2. Ubuntu14.04 下安装Samba服务
  3. mongodb密码忘了怎么办
  4. Python3常见Exception
  5. 【小梅哥SOPC学习笔记】系统时钟的使用
  6. c语言和java以及安卓和苹果
  7. Python 数据分析—第九章 数据聚合与分组运算
  8. linux vi vim文本编辑器
  9. python抓网页数据【ref:http://www.1point3acres.com/bbs/thread-83337-1-1.html】
  10. java学习(一)数据类型