• 接口自动化之unittest+ddt


    我在上一篇(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执行之后都会执行这个方法
    ")
    
        @data("hello", "123", " ")  # 代表传入的参数,一共三个参数,每次执行传一个值给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模块的优化,在后面我将继续学习,做到测试数据与代码分离,然后会继续优化这个模板。 新手学习,不足之处肯定有,希望大佬们不吝赐教。

  • 相关阅读:
    互斥锁属性
    Linux线程属性总结
    Linux 线程调度与优先级
    [置顶] 自旋锁和互斥锁的区别
    C语言中的未初始化变量的值
    在液晶屏里显示浮点数的方法 (sprintf 的妙用)
    消息队列函数(msgget、msgctl、msgsnd、msgrcv)及其范例
    在链表尾部添加数据
    Android 之 Matrix(转)
    Android退出应用最优雅的方式(改进版)
  • 原文地址:https://www.cnblogs.com/wlyhy/p/10100743.html
Copyright © 2020-2023  润新知