您的位置:首页 > 编程语言 > Python开发

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

2017-08-16 10:11 489 查看
一、先看看我的代码,一个简单的Demo

'''
Created on 2017年8月11日
#登录接口参数化
@author: zx
'''
import unittest
import requests
import ddt
import HTMLTestRunner
import time
@ddt.ddt
class 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来执行,但是执行不成功,报错信息如下图:



四、期间各种分析原因,换了pycharm运行,包括其他方法:http://blog.csdn.net/xie_0723/article/details/50825310(这里提到的方法都试过)还是不行。

最后永别的又弄了一个简单案例,居然生成报告了,唯一的区别是那个用例没有用到数据驱动。代码如下:

# coding=utf-8
#1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

#2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2016-7-27
@author: Jennifer
Project:使用unittest框架编写测试用例思路
'''
#3.导入unittest模块
import unittest
import HTMLTestRunner
import 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 unittest
import requests

import HTMLTestRunner
import time

class 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)


这样就生成测试报告了:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: