python+unittest+HTMLtestrunner遇到的错误

对于python初学者,碰到的问题会千奇百怪,百度上也有不少解决办法,我总结归纳了自己
碰到的问题;希望对大家有用:
拿登录接口测试举例;从代码调通到HTMLtestrunner测试报告的生成,出现的问题如下:(大神们也可在下面的评论区提供更好更高效的解决方法,谢谢!)

1、问题一:运行Unittests函数时,测试用例未执行

在这里插入图片描述

出现的原因:
unittest提供了全局的main()方法,使得一个单元测试模块变成可以直接运行的测试脚本,main()方法使用TestLoader类来搜索所有包含在模块中以“test”命名开头的测试方法,并自动执行它们;

解决的方法:(每个测试用例名称前都要加“test”或“test_”)

在这里插入图片描述

2、问题二:断言判断失败,返回错误信息

在这里插入图片描述

出现的原因:
正常情况,因为我加的断言self.assertEqual(resp[‘status’],1,resp[‘info’]),实际结果与期望值不符,打印出的失败信息;“Ran 1 test in 0.069s”代表测试用例已经执行完成了;

解决的方法:
正常情况,不予解决;生成HtmltestRunner测试报告时,会在fail中查看到该信息;如图所诉:
在这里插入图片描述

3、问题三:在Pycharm中使用HTMLTestRunner不能生成测试报告

我碰到的问题是代码程序运行未报错,就是不生成测试报告;
请参考这个大神的博客:https://blog.csdn.net/zby_hlx/article/details/80415111
出现的原因:
在这里插入图片描述

解决的方法:
在pycharm右上角运行主文件;如果找不到主文件,就要添加,添加完成后,选择运行需要的文件就好了:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、问题四:生成HTMLTestRunner测试报告,但报告内容为空

生成HTMLTestRunner测试报告,但报告内容为空,如图所诉:
测试报告内容为空

出现的原因:

  1. 代码缺少这句话:fp.close()#关闭文件流,不关的话生成的报告是空的
  2. 测试用例压根没有执行,测试用例集的调用出现代码问题; 测试用例压根没有执行,测试用例集的调用出现代码问题;

解决的方法:

  1. 在运行测试用例集之后,添加fp.close(),如图所诉:
    在这里插入图片描述
  2. 检查调用测试用例集的代码,不能出现重复调用的情况;重复调用测试用例集的话,会出现无法找到需要运行的测试用例的情况;但代码不会报错,正常执行
    网上有很多生成测试报告的代码,东拼西凑起来,不可避免有代码错误
    错误代码如下:
#构造测试集
def suite(self):
    self.suiteTest = unittest.TestSuite()#实例化
    self.suiteTest.addTest(UserLoginTest("test_userlogin"))#增加测试用例
    return self.suiteTest
# #构造测试集
# def suite(f):
#     suiteTest = unittest.TestSuite()#实例化
#     suiteTest.addTest(f)  # 增加测试用例
#     return suiteTest
if __name__ == "__main__":
    testunit = unittest.TestSuite()#实例化 ,该处是从重复实例化了测试用例,则程序是找不到需要执行的测试用例的;
    testunit.addTest(suite)  # 增加测试用例
    #testunit.addTest(UserLoginTest("test_userlogin"))#增加测试用例
    now = time.strftime("%Y-%m-%d %H_%M_%S", time.localtime()) #获取当前时间
    # 定义报告存放路径(避免转义字符,则使用“/)
    filepath = 'D:/pycharm/newerpetapi/request/'+now+'_test_result.html'
    fp = open(filepath, 'wb') #python3以上版本,打开文件用open,不能用file
    # 定义测试报告
    runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'员工登录接口测试报告', description=u'测试用例执行情况')
    # 运行测试
    reportresult=runner.run(suite)
    print(reportresult)
    fp.close()  # 关闭文件对象把数据写进磁盘,关闭文件流,不关的话生成的报告是空的

将上述代码修改为:删除suite函数,直接在if中实例化测试用例,调用

if __name__ == "__main__":
    testunit = unittest.TestSuite()#实例化
    testunit.addTest(UserLoginTest("test_userlogin"))#增加测试用例
    now = time.strftime("%Y-%m-%d %H_%M_%S", time.localtime()) #获取当前时间
    # 定义报告存放路径(避免转义字符,则使用“/)
    filepath = 'D:/pycharm/newerpetapi/request/'+now+'_test_result.html'
    fp = open(filepath, 'wb') #python3以上版本,打开文件用open,不能用file
    # 定义测试报告
    runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'员工登录接口测试报告', description=u'测试用例执行情况')
    # 运行测试
    reportresult=runner.run(testunit)
    print(reportresult)
    fp.close()  # 关闭文件对象把数据写进磁盘,关闭文件流,不关的话生成的报告是空的

若不删除suite函数的修改方法如下:

#构造测试集
def suite(f):
    suiteTest = unittest.TestSuite()#实例化
    suiteTest.addTest(f)  # 增加测试用例
    return suiteTest
if __name__ == "__main__":
    now = time.strftime("%Y-%m-%d %H_%M_%S", time.localtime())
    # 定义报告存放路径(避免转义字符,则使用“/)
    filepath = 'D:/pycharm/newerpetapi/request/'+now+'_test_result.html'
    fp = open(filepath, 'wb') #python3以上版本,打开文件用open,不能用file
    # 定义测试报告
    runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'员工登录接口测试报告', description=u'测试用例执行情况')
    # 运行测试
    runner.run(suite(testadd('test_userlogin')))#调用suite函数,将测试用例名称传入函数中
    fp.close()  # 关闭文件对象把数据写进磁盘,关闭文件流,不关的话生成的报告是空的

程序运行结果终于出现了想要的数据,如图所诉:虽然测试用例执行失败了,但好歹测试报告生成了,测试用例也执行了;哎,突然想放声大哭,这个东西对于无代码基础的初学者有点难度的;
在这里插入图片描述

今天就写这么多,以后碰到的问题,我会再补充进来,谢谢!

猜你喜欢

转载自blog.csdn.net/pengyaniuniu/article/details/83422139
今日推荐