Python做接口测试生成测试报告失败

来源:互联网 发布:mac的相册导出 编辑:程序博客网 时间:2024/05/22 17:05

一、先看看我的代码,一个简单的Demo

'''Created on 2017年8月11日#登录接口参数化@author: zx'''import unittestimport requestsimport ddtimport HTMLTestRunnerimport time@ddt.ddtclass Test(unittest.TestCase):    def setUp(self):        print('start')    def tearDown(self):        print('end')    @ddt.data(('张想','123'),              ('黄浩','123'),              ('肖菊','123'),              ('刘威','123'))    @ddt.unpack    def test_example(self,LoginName,Password):        res=requests.get('http://192.168.50.51:8099/Logins/Login',params={'LoginName':LoginName,'Password':Password})        print(res.status_code)        print(res.cookies)        print(res.text)        self.assertEqual(200,res.status_code)        self.assertTrue('true' in res.text)if __name__ == "__main__":     #定义一个测试容器    suite = unittest.TestSuite()    #将测试用例添加到容器    suite.addTest(Test("test_example"))    now = time.strftime("%Y-%m-%d %H_%M_%S",time.localtime())    filename='D:/Users/zx/workspace/AppiumDemo1/report/'+now+'_result.html'    with open(filename, 'wb') as fp:        runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'测试报告', description=u'用例执行详情:')        runner.run(suite) 

二、用python unittest执行,可以运行测试用例,但是无法生成测试报告,因为 ‘if name == “main“: ’下面的代码都没有执行,看图:
用 Python unittest 执行
执行结果
三、于是用python来执行,但是执行不成功,报错信息如下图:
Python 执行时的报错信息
四、期间各种分析原因,换了pycharm运行,包括其他方法:http://blog.csdn.net/xie_0723/article/details/50825310(这里提到的方法都试过)还是不行。
最后永别的又弄了一个简单案例,居然生成报告了,唯一的区别是那个用例没有用到数据驱动。代码如下:

# coding=utf-8#1.先设置编码,utf-8可支持中英文,如上,一般放在第一行#2.注释:包括记录创建时间,创建人,项目名称。'''Created on 2016-7-27@author: JenniferProject:使用unittest框架编写测试用例思路'''#3.导入unittest模块import unittestimport HTMLTestRunnerimport time#4.定义测试类,父类为unittest.TestCase。#可继承unittest.TestCase的方法,如setUp和tearDown方法,不过此方法可以在子类重写,覆盖父类方法。#可继承unittest.TestCase的各种断言方法。class Test(unittest.TestCase): #5.定义setUp()方法用于测试用例执行前的初始化工作。#注意,所有类中方法的入参为self,定义方法的变量也要“self.变量”#注意,输入的值为字符型的需要转为int型    def setUp(self):        #self.number=input('Enter a number:')        #self.number=int(self.number)        self.number=10#6.定义测试用例,以“test_”开头命名的方法#注意,方法的入参为self#可使用unittest.TestCase类下面的各种断言方法用于对测试结果的判断#可定义多个测试用例#最重要的就是该部分    def test_case1(self):        print (self.number)        self.assertEqual(self.number,10,msg='Your input is not 10')    def test_case2(self):        print (self.number)        self.assertEqual(self.number,20,msg='Your input is not 20')    @unittest.skip('暂时跳过用例3的测试')    def test_case3(self):        print (self.number)        self.assertEqual(self.number,30,msg='Your input is not 30')#7.定义tearDown()方法用于测试用例执行之后的善后工作。#注意,方法的入参为self    def tearDown(self):        print ('Test over')#8如果直接运行该文件(__name__值为__main__),则执行以下语句,常用于测试脚本是否能够正常运行if __name__=='__main__':#8.1执行测试用例方案一如下:#unittest.main()方法会搜索该模块下所有以test开头的测试用例方法,并自动执行它们。#执行顺序是命名顺序:先执行test_case1,再执行test_case2    #unittest.main()    suite=unittest.TestSuite()    suite.addTest(Test('test_case2'))    suite.addTest(Test('test_case1'))    now = time.strftime("%Y-%m-%d %H_%M_%S",time.localtime())    filename='D:/'+now+'_result.html'    with open(filename, 'wb') as fp:        runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'测试报告', description=u'用例执行详情:')        runner.run(suite)

生成的报告如下:
生成的测试报告
点击详情之后的显示结果
这里的样式是经过改进后的HTMLTestRunner的样式,喜欢的可以拿走用:http://pan.baidu.com/s/1miFp3vE
五、于是果断的把数据驱动去掉了,代码如下:

'''Created on 2017年8月16日@author: zx'''import unittestimport requestsimport HTMLTestRunnerimport timeclass Test(unittest.TestCase):    def setUp(self):        print('start')    def tearDown(self):        print('end')    def test_example(self):        res=requests.get('http://192.168.50.51:8099/Logins/Login',params={'LoginName':"张想",'Password':'123'})        print(res.status_code)        print(res.cookies)        print(res.text)        self.assertEqual(200,res.status_code)        self.assertTrue('true' in res.text)if __name__=='__main__':#8.1执行测试用例方案一如下:#unittest.main()方法会搜索该模块下所有以test开头的测试用例方法,并自动执行它们。#执行顺序是命名顺序:先执行test_case1,再执行test_case2    #unittest.main()    suite=unittest.TestSuite()    suite.addTest(Test('test_example'))    now = time.strftime("%Y-%m-%d %H_%M_%S",time.localtime())    filename='D:/'+now+'_result.html'    with open(filename, 'wb') as fp:        runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'测试报告', description=u'用例执行详情:')        runner.run(suite)

这样就生成测试报告了:
生成的测试报告
点详情后的查看样式

原创粉丝点击