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'])

在这里插入图片描述

目录
相关文章
|
11天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
48 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
1月前
|
测试技术 Python
自动化测试项目学习笔记(一):unittest简单运行(初始化,清除,设置测试行为)
本文介绍了Python的unittest框架的基础用法,包括测试初始化(setup)、清除(tearDown)函数的使用,以及assertEqual和assertGreaterEqual等断言方法,并展示了如何创建测试用例,强调了测试函数需以test_开头才能被运行。
63 1
自动化测试项目学习笔记(一):unittest简单运行(初始化,清除,设置测试行为)
|
1月前
|
测试技术 Python
自动化测试项目学习笔记(三):Unittest加载测试用例的四种方法
本文介绍了使用Python的unittest框架来加载测试用例的四种方法,包括通过测试用例类、模块、路径和逐条加载测试用例。
61 0
自动化测试项目学习笔记(三):Unittest加载测试用例的四种方法
|
16天前
参数化测试
参数化测试
23 0
|
3月前
|
测试技术
单元测试问题之使用TestMe时利用JUnit 5的参数化测试特性如何解决
单元测试问题之使用TestMe时利用JUnit 5的参数化测试特性如何解决
48 2
|
3月前
|
JSON Java 测试技术
单元测试问题之使用JSON文件作为参数化测试的输入源如何解决
单元测试问题之使用JSON文件作为参数化测试的输入源如何解决
70 0
|
5月前
|
XML 测试技术 数据格式
软件测试之 自动化测试 基于Python语言使用Selenium、ddt、unitTest 实现自动化测试(下)
软件测试之 自动化测试 基于Python语言使用Selenium、ddt、unitTest 实现自动化测试(下)
65 3
|
5月前
|
Java 测试技术 程序员
软件测试之 自动化测试 基于Python语言使用Selenium、ddt、unitTest 实现自动化测试(上)
软件测试之 自动化测试 基于Python语言使用Selenium、ddt、unitTest 实现自动化测试(上)
61 1
|
5月前
|
测试技术 Python
python接口自动化测试 - unittest框架suite、runner详细使用
python接口自动化测试 - unittest框架suite、runner详细使用
|
5月前
|
测试技术 Python
【Python自动化测试】:Unittest单元测试与HTMLTestRunner自动生成测试用例的好帮手
【Python自动化测试】:Unittest单元测试与HTMLTestRunner自动生成测试用例的好帮手
74 0