使用pytest写的测试用例怎么加到unittest的测试套件中?

刚接触pytest,咨询一下使用pytest写的测试用例怎么加到unittest的测试套件中,这能实现吗?还是只能添加unittest写的测试用例?
就是我测试用例是通过pytest开发的,后面要生成HTML的测试报告,要用到HTMLTestRunner的方法实现,这个是unittest用例的,我要将pytest的测试用例通过unittest的addTest方法添加到测试套件中,一直不成功,有什么办法吗?还是只能将pytest的测试用例改为unittest的方式才行。我查到pytest有生成HTML报告的方法,但是需要第三方包,不行。

以下内容是从百度等帖子中掏出来了,筛选不易,希望能帮到你
如果您想使用unittest的HTMLTestRunner方法来生成HTML测试报告,那么将pytest的测试用例添加到unittest测试套件中是可行的。以下是一些步骤可以帮助您实现这个目标:

  1. 创建一个unittest测试套件

    img

  2. 导入pytest测试模块并将测试用例添加到测试套件中

    img

    注意:在添加pytest测试用例时,需要使用pytest.FunctionalTestSuite包装测试用例,这是因为pytest测试用例和unittest测试用例的方法签名不同,需要进行适当的转换。
  3. 运行unittest测试套件并生成HTML测试报告

    img


    在这个例子中,HTMLTestRunner将测试结果输出到名为“report.html”的HTML文件中,并设置标题和描述信息。

请注意,虽然pytest有自己的HTML测试报告生成工具,但如果您希望使用unittest的HTMLTestRunner生成测试报告,那么您需要使用上述方法来添加pytest测试用例到unittest测试套件中。

  • 这篇文章:Unittest和Pytest到底谁好用? 也许有你想要的答案,你可以看看
  • 除此之外, 这篇博客: unittest和pytest测试框架基础中的 2.2.4.加载测试用例 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 1.方式1

    • suite = loader.discover(start_dir=‘./test_case’,pattern=‘test*.py’)
    • suite = unittest.defaultTestLoader.discover(start_dir=‘./test_case’,pattern=‘test*.py’)
    • 参数解析
      • discover可以一次调用多个脚本
      • start_dir被测试脚本的路径
      • pattern脚本名称匹配规则

    2.方式2: 只测试某个具体的模块、功能,使用 loaderTestsFromTestCaseloaderTestsFromModule
    3.方式3:加载指定测试类loader.loadTestsFromTestCase(测试用例类名)

    import os
    import time
    import unittest
    # 1. 初始化testloader(加载器)
    loader = unittest.TestLoader()
    # 2.1 加载方式1: 加载全部测试用例
    # 2.1 suite = testloader.discover(文件夹路径,'test_*.py) 发现(加载)用例
    # 2.2 加载方式2:加载多个模块测试用例
    # 加载多个模块的测试用例,保存到测试套件当中
    suite1 = loader.loadTestsFromModule(模块名)
    suite2= loader.loadTestsFromTestCase(类名) 
    suite3 = loader.loadTestsFromName(name,模块名) # name:传入一个模块或测试用例类或测试方法,或一个可调用的对象 
    suite_list = [suite1,suite2,suite3]
    # 将多个测试套件合并添加第一个总的测试套件中,初始化一个空的测试套件
    total_suite = unittest.TestSuite()
    total_suite.addTests(suite_list)
    # suite.addTests([类名1('函数名1'),类名1('函数名2'),类名1('函数名3'),类名2,模块名1,模块名2,....])
    # 加载方式3:加载指定测试类
    # suite = loader.loadTestsFromTestCase(测试用例类名)
    # 3. 初始化运行器
    runner = unittest.TextTestRunner()
    # 4. 运行测试用例 runner.run(suite)
    runner.run(total_suite)
    

我还是将pytest改为了unittest的方式进行生成HTML报告的。