对于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测试报告,但报告内容为空,如图所诉:
出现的原因:
- 代码缺少这句话:fp.close()#关闭文件流,不关的话生成的报告是空的
- 测试用例压根没有执行,测试用例集的调用出现代码问题; 测试用例压根没有执行,测试用例集的调用出现代码问题;
解决的方法:
- 在运行测试用例集之后,添加fp.close(),如图所诉:
- 检查调用测试用例集的代码,不能出现重复调用的情况;重复调用测试用例集的话,会出现无法找到需要运行的测试用例的情况;但代码不会报错,正常执行
网上有很多生成测试报告的代码,东拼西凑起来,不可避免有代码错误
错误代码如下:
#构造测试集
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() # 关闭文件对象把数据写进磁盘,关闭文件流,不关的话生成的报告是空的
程序运行结果终于出现了想要的数据,如图所诉:虽然测试用例执行失败了,但好歹测试报告生成了,测试用例也执行了;哎,突然想放声大哭,这个东西对于无代码基础的初学者有点难度的;
今天就写这么多,以后碰到的问题,我会再补充进来,谢谢!