unittest使用parameterized参数化后如何调用添加到测试套件中

简介: unittest使用parameterized参数化后如何调用添加到测试套件中

写了一个Unittest+Python+execl的一个接口自动化,在参数化的时候遇到了一个问题。具体的“坑”如下

要实现的需求

在execl中涉及或写接口测试用例,然后读取execl中每一行的数据,每一行数据就相当于一条用例

需求实现

path = "F:\InterFace_JIA1\dataconfig\source_user_case.xlsx"
params_list = TestRunCase(path).get_params()
print("params_list:",params_list)

class TestRun(unittest.TestCase):
    #params_list = [(2, 100000, 100001),(1, 100000, 100003)]
    @parameterized.expand(params_list) # 这里参数化了params_list
    def test_run(self, name, expect_res, actual_res):
        self.assertEqual(expect_res, actual_res)

if __name__ == '__main__':
    unittest.main()
用例为:
在这里插入图片描述
结果为:
在这里插入图片描述
先不管接口是不是有问题,从这个运行看,流程是OK的

参数化后调用加入测试条件中

if __name__ == '__main__':
    suite = unittest.TestSuite()
    now = datetime.datetime.now().strftime('%Y-%m-%d_%H_%M_%S')
    filename = "./report/" + now + '_result.html'
    fp = open(filename, 'wb')
    suite.addTest(TestRun('test_run'))
    runner = HTMLTestRunner.HTMLTestRunner(
        stream=fp,
        title=u'测试结果',
        description=u'全部测试用例')
    runner.run(suite)
    fp.close()
    time.sleep(2)
    print("sdasdasdasdasdasdsa")

结果出错

TypeError: 'NoneType' object is not callable

在这里插入图片描述

排查分析

使用unittest.defaultTestLoader.discover,打印所有的case,发现用例格式是“test_run_0”

<unittest.suite.TestSuite tests=[<unittest.suite.TestSuite tests=[<main.run.TestRun testMethod=test_run_0>, <main.run.TestRun testMethod=test_run_1>]>]>
if __name__ == '__main__':

    suite = unittest.defaultTestLoader.discover('./', pattern='run.py')
    for case in suite:
        print (case)

重新调用

把test_run改成test_run_0

if __name__ == '__main__':
    suite = unittest.TestSuite()
    now = datetime.datetime.now().strftime('%Y-%m-%d_%H_%M_%S')
    filename = "./report/" + now + '_result.html'
    fp = open(filename, 'wb')
    suite.addTest(TestRun('test_run_0'))
    runner = HTMLTestRunner.HTMLTestRunner(
        stream=fp,
        title=u'测试结果',
        description=u'全部测试用例')
    runner.run(suite)
    fp.close()
    time.sleep(2)
    print("sdasdasdasdasdasdsa")

仍然报错:
提示“test_run_0”找不到

再次分析

发现如图,使用suite = unittest.defaultTestLoader.discover('./', pattern='run.py')即可,直接去掉suite.addTest(TestRun('test_run_0'))
在这里插入图片描述

再次调试

结果就OK了

class TestRun(unittest.TestCase):
    #params_list = [(2, 100000, 100001),(1, 100000, 100003)]
    @parameterized.expand(params_list)
    def test_run(self, name, expect_res, actual_res):
        self.assertEqual(expect_res, actual_res)
        #print(actual_res)
        #self.assertTrue(True, actual_res)

if __name__ == '__main__':

    suite = unittest.defaultTestLoader.discover('./', pattern='run.py')
    # for case in suite:
    #     print (case)
    # suite = unittest.TestSuite()
    now = datetime.datetime.now().strftime('%Y-%m-%d_%H_%M_%S')
    filename = "./report/" + now + '_result.html'
    fp = open(filename, 'wb')
    #suite.addTest(TestRun('test_run_0'))
    runner = HTMLTestRunner.HTMLTestRunner(
        stream=fp,
        title=u'测试结果',
        description=u'全部测试用例')
    runner.run(suite)
    fp.close()
    time.sleep(2)
    print("sdasdasdasdasdasdsa")
    #sendmain(filename, mail_to=['zhangbo@novastar.tech'])

在这里插入图片描述

目录
相关文章
|
22天前
|
Java 测试技术
Java一分钟之-JUnit测试框架:断言与测试套件
【6月更文挑战第3天】本文介绍了JUnit在Java单元测试中的应用,包括断言基础如`assertEquals`、`assertTrue`等,用于验证代码预期结果;利用`@Suite`创建测试套件以组合多个测试;并讨论了常见问题及解决方法,如忽略测试、错误断言、异常处理和保持测试简洁。理解并熟练运用这些概念能提升测试代码的质量和效率。
37 2
|
20天前
|
测试技术 Python
【Python自动化测试】:Unittest单元测试与HTMLTestRunner自动生成测试用例的好帮手
【Python自动化测试】:Unittest单元测试与HTMLTestRunner自动生成测试用例的好帮手
13 0
|
1月前
|
测试技术 Python
Python测试架构unittest
【4月更文挑战第19天】
12 3
|
1月前
|
消息中间件 Kafka 网络安全
JUnit5学习之七:参数化测试(Parameterized Tests)进阶
JUnit5学习之七:参数化测试(Parameterized Tests)进阶
|
1月前
|
Java 测试技术 数据库连接
【如何学习Python自动化测试】—— Python 的 unittest 框架
【如何学习Python自动化测试】—— Python 的 unittest 框架
11 0
|
1月前
|
前端开发 测试技术 C++
Python自动化测试面试:unittest、pytest与Selenium详解
【4月更文挑战第19天】本文聚焦Python自动化测试面试,重点讨论unittest、pytest和Selenium三大框架。unittest涉及断言、TestSuite和覆盖率报告;易错点包括测试代码冗余和异常处理。pytest涵盖fixtures、参数化测试和插件系统,要注意避免过度依赖unittest特性。Selenium的核心是WebDriver操作、等待策略和测试报告生成,强调智能等待和元素定位策略。掌握这些关键点将有助于提升面试表现。
62 0
|
1月前
|
测试技术 Python 容器
09 Python之UnitTest【使用,生成HTML测试报告】
09 Python之UnitTest【使用,生成HTML测试报告】
18 0
09 Python之UnitTest【使用,生成HTML测试报告】
|
1月前
|
测试技术 Python
Python 的自动化测试:如何使用 Python 的 unittest 模块进行测试?
在Python中进行自动化测试可利用`unittest`模块。以下是一个简单的示例,展示了如何编写测试用例
14 0
|
1月前
|
测试技术 API Python
Python自动化测试:unittest与pytest的实战技巧
Python自动化测试:unittest与pytest的实战技巧
|
1月前
|
测试技术 数据库
参数化单元测试
参数化单元测试
25 0