python接口自动化5 unittest使用
1、安装unitest cmd >python> import unittest
python默认情况下是有unittest包的
2、用例方法必须以test开头
3、在每个test方法执行的时候都会执行一遍setUp()和tearDown()。该场景针对那些测试用例间有相互影响的场景,才需要在每执行一条新用例时进行一次初使化,执行完毕后再清空所有配置
在整个类中执行一遍setUPClass()和tearDownClass()然后所有用例执行完成后再清空所有配置,此种用法主要用在用例之间相互没有什么影响的场景
结果:setUp连接数据库,tearDown关闭数据库,这样反复执行,无疑是会增加数据库服务器资源的损耗,且浪费时间
把unittest用例和之前写的接口结合使用
import unittest
from we import RunMain
class TestMethod(unittest.TestCase):
def test_01(self):
url = 'http://127.0.0.1:8000/login/'
data = {
'username': 'test1',
'password': 222
}
run=RunMain(url,'GET',data=None)
res = run.run_main(url,'GET',data)
print(res)
def test_02(self):
url = 'http://127.0.0.1:8000/login/'
data = {
'username': 'test2',
'password': 222
}
run = RunMain(url, 'GET', data=None)
res = run.run_main(url,'GET',data)
print(res)
if __name__ == '__main__':
unittest.main()
import unittest
import json
from we import RunMain
class TestMethod(unittest.TestCase):
def test_01(self):
url = 'http://127.0.0.1:8000/login/'
data = {
'username': 'test1',
'password': 222
}
run=RunMain(url,'GET',data=None)
res = json.loads(run.run_main(url,'GET',data))
self.assertEqual(res['user'],'test1','测试失败')
def test_02(self):
url = 'http://127.0.0.1:8000/login/'
data = {
'username': 'test1',
'password': 222
}
run = RunMain(url, 'GET', data=None)
res = json.loads(run.run_main(url,'GET',data))
self.assertEqual(res['user'],'test1','测试失败')
if __name__ == '__main__':
unittest.main()
1、全局变量
Def test01(self):
global name
Name =’nihao’
Def test02(self):
Print(name)
2、unittest里面执行用例,是按照用例的序号顺序执行
先执行test01,后执行test02
不可以先执行序号较小的用例
3、跳过第二个case
在case前面加@unittest.skip(‘case名称’)
@unittest.skip('test_02')
def test_02(self):
4、unittest.TestSuite执行方法
5、使用TestSuite测试套件只添加1条用例,但是却执行了所有用例。
这个问题怎么解决?
第一步,进入到编辑结构
第二步,新建一个python文件
第三步,选择要执行的python脚本,应用。然后再次运行
5-5 unittest和HTMLTestRunner结合生成报告
- 下载HTMLTestRunner报告
下载路径:https://pypi.python.org/pypi/HTMLTestRunner ,
右键 HTMLTestRunner.py 目标另存为python的Lib的路径下
2、因为HTMLTestRunner.py 原本就是python2版本,目前还没找到python3版本,所以需要我们自己修改 HTMLTestRunner.py 文件。
修改内容如下:
第94行,将import StringIO修改成import io
第539行,将self.outputBuffer = StringIO.StringIO()修改成self.outputBuffer = io.StringIO()
第642行,将if not rmap.has_key(cls):修改成if not cls in rmap:
第766行,将uo = o.decode('latin-1')修改成uo = e
第772行,将ue = e.decode('latin-1')修改成ue = e
第631行,将print >> sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime)修改成print(sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime))
百度链接:https://www.cnblogs.com/hy546880109/p/12078784.html
3、检查HTMLTestRunner报告是否导入成功
Cmd->python->import HTMLTestRunner
4、导入HTMLTestRunner报告,执行报告
import HTMLTestRunner
执行报告
if __name__ == '__main__':
filepath='E:/untitled/report/htmlReport.html' #新建路径,用于存放报告
fp= open(filepath,'wb')# 打开一个二进制文件,允许写入
suite = unittest.TestSuite()
suite.addTest(TestMethod('test_01'))
suite.addTest(TestMethod('test_02'))
#使用HTMLTestRunner模块
runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title='第一个测试报告',
description='测试用例情况:')
runner.run(suite)#unittest和HTMLTestRunner结合
5、显示报告
unittest常见面试题:
1、如何使用python开发测试框架
Python + requests + mysql + unittest + HTMLTextRunner + jenkins
2、如何管理case
用unittest去做管理,可以都执行,也可以执行其中某一些case,也可以跳过某些case
case可以存放在excel里,也可以存放在.py文件里
3、简述case的执行
case执行按序号执行,有依赖的情况,必须先执行依赖的case,后执行依赖上一条的case
4、如何解决case依赖
可以使用全局变量来传递数据
也可以把数据存储在配置文件或数据库里,然后去配置文件和数据库里取
5、如何生成测试报告
利用第三方HTMLTestRunner报告,结合unittest来生成报告