当前位置:首页 » 编程语言 » pythonunittest教程

pythonunittest教程

发布时间: 2022-07-09 10:12:12

python+unittest接口自动化执行多条测试用例怎么实现

我的理解是,如果都在一个class里面,确实是需要 def test_xxx 20个的,也可以直接把所有的用例写到一个def test_xx里面的,如果前面的操作步骤一样的话,这两个的差距不大的

❷ python中的unittest有什么作用

python中unittest模块是用来做单元测试的。

unittest是一个python版本的junit,junit是java中的单元测试框架,对java的单元测试,有一句话很贴切:Keep thebar green,相信使用eclipse写过java单元测试的都心领神会。unittest实现了很多junit中的概念,比如我们非常熟悉的test case, test suite等,总之,原理都是相通的,只是用不同的语言表达出来。

下面是一个例子

importrandom
importunittest

classTestSequenceFunctions(unittest.TestCase):

defsetUp(self):
self.seq=range(10)

deftest_shuffle(self):
#
random.shuffle(self.seq)
self.seq.sort()
self.assertEqual(self.seq,range(10))

#
self.assertRaises(TypeError,random.shuffle,(1,2,3))

deftest_choice(self):
element=random.choice(self.seq)
self.assertTrue(elementinself.seq)

deftest_sample(self):
withself.assertRaises(ValueError):
random.sample(self.seq,20)
forelementinrandom.sample(self.seq,5):
self.assertTrue(elementinself.seq)

if__name__=='__main__':
unittest.main()

❸ python如何开展单元测试

首先你要知道单元测试是什么,单元测试就是针对软件中的最小可测试单元进行检查和验证,在python中可以理解为是对类或者是方法的正确性验证
其次要了解python语言中的单元测试框架有哪些,在python语言中的单元测试框架也有很多,解释本身自带的unittest单元测试框架,还有很流行的pytest(有丰富的插件),这些在我之前在黑马程序员学习测试时都有涉及,或者你可以去看论坛上面有很多python开展单元测试的技术文章。
最后使用某个单元测试框架如何实现,拿解释器自带的unittest举例子吧,使用这个框架来实现单元测试的话,需要创建测试类,创建测试方法,设置fixture,断言,然后通过测试条件和运行器来执行测试用例.其测试数据可以使用参数化动态获取.

❹ python的unittest模块能用来做多线程的单元测试吗

待测试的类(Widget.py)
# Widget.py
# Python 2.7.6

class Widget:
def __init__(self, size = (40,40)):
self.size = size
def getSize(self):
return self.size
def reSize(self,width,height):
if width <0 or height < 0:
raise ValueError, 'illegal size'
else:
self.size = (width,height)
return self.size
def dispose(self):
pass

测试类(Auto.py)

# coding=utf8
# Auto.dy
# Python 2.7.6

from Widget import Widget #导入测试类模块Widget
import unittest #导入unittest模块

class WidgetTestCase(unittest.TestCase):
#让所有执行测试的类都继承于TestCase类,可以将TestCase看成是对特定类进行测试的方法的集合

#在setUp()方法中进行测试前的初始化工作。
def setUp(self):
self.widget = Widget()

#并在tearDown()方法中执行测试后的清除工作,setUp()和tearDown()都是TestCase类中定义的方法。
def tearDown(self):
self.widget = None

#测试Widget类中getSize方法
def testgetSize(self):
print "Test GetSize"
#对Widget类中getSize()方法的返回值和预期值进行比较,确保两者是相等的,
#assertEqual()也是TestCase类中定义的方法。
self.assertEqual(self.widget.getSize(), (40, 40))

#测试Widget类中reSize方法
def testreSize(self):
print "Test Resize"
#对Widget类中reSize()方法的返回值和预期值进行比较,确保两者是相等的。
#assertEqual()也是TestCase类中定义的方法。
self.assertEqual(self.widget.reSize(50,100),(50,100))

#提供名为suite()的全局方法,PyUnit在执行测试的过程调用suit()方法来确定有多少个测试用例需要被执行,
#可以将TestSuite看成是包含所有测试用例的一个容器。
def suite():
suite = unittest.TestSuite()
suite.addTest(WidgetTestCase("testgetSize"))#往此添加需要测试的方法testgetSize()
suite.addTest(WidgetTestCase("testreSize")) #往此添加需要测试的方法testreSize()
return suite

if __name__ == "__main__":
unittest.main(defaultTest = 'suite') #在主函数中调用全局方法.

测试结果:

D:\Python>python27 Auto.py
Test GetSize
.Test Resize
.
------------------------------
Ran 2 tests in 0.004s

OK

总结:
1。第一步:先写好测试类
2。第二步:导入unittest模块及测试的类,运用setup()方法做测试前的准备工作,如建立数据库连接,运用teardown()方法做测试后的清除工作,如取消数据库的链接,再对类中的方法逐一做测试。
3。第三步: 写suite()的全局方法,将要测试的方法,一一加入。
测试结果,有几个测试用例就有几个. 最后显示OK,表示通过。

❺ python单元测试引入unittest模块后一个类里面包含多个方法怎么只让setUp、方法只执行一次

不是有一个全局的setup和teardonw吗
@classmethod
def tearDownClass(cls): # 必须使用 @ classmethod装饰器, 所有test运行完后运行一次
print('4444444')
@classmethod
def setUpClass(cls): # 必须使用@classmethod 装饰器,所有test运行前运行一次
print('33333')

❻ 如何用python unittest去测试c#的接口

1.首先使用 python 的 requests 对接口进行测试

[python] view plain
# TestInface.py
import requests,json
url = visit.get_test_url()
news_url = url+'news.info'
headers = baseToken.basetoken_datas()['headers']
def new_data(data):

r = requests.post(news_url,data=data,headers=headers)
cnn = json.loads(r.text)
return cnn

2.使用unittest调用接口,且对接口测试的结果进行统计

[python] view plain
# TestCase.py
# -*- coding:utf-8 -*-
import unittest
import TestInface

# 对执行的case结果进行统计
# ---------------------------------------------------------------------------------------------------------------------
text = ""
num_success = 0
num_fail = 0

# 测试通过
def decide_success(joggle):
global num_success
num_success += 1
print_out(joggle + ":接口测试通过\n")
return num_success

# 测试不通过
def decide_fail(txt, joggle):
global num_fail
num_fail += 1
print_out(joggle + ":接口测试未通过 \n错误信息: " + txt + "\n")
return num_fail

# 邮件内容写入 & 客户端输出
def print_out(message):
global text
text += "\n" + message
return text

# 返回值判断
def decide_result(result, code, joggle):
if result['code'] == code:
decide_success(joggle)
return "pass"
else:
txt = u"期望返回值:" + str(code) + u" 实际返回值:" + str(result) + '\n' + result['message']
decide_fail(txt, joggle)
return "fail"

def decide_Count():
data = {
'num_success': num_success,
'num_fail': num_fail,
'text': text
}
return data
# --------------------------------------------------------------------------------------------------------------------
# 定义 unittest
class MyTestCase(unittest.TestCase):

# 初始化工作
def setUp(self):
pass

# 退出清理工作
def tearDown(self):
pass
def test_Case1(self):
id = 16
data = {'id':id}
a = TestInface.new_data(data)
decide_result(a,0,'test_Case1')

3.使用suite对case进行管理

[python] view plain
# TestSuite.py
# -*- coding:utf-8 -*-
import unittest
import TestCase

def test_InterFace():

# 构造测试集
suite = unittest.TestSuite()
suite.addTest(TestCase("test_Case1")) # unittest中的测试用例

runner = unittest.TextTestRunner()
runner.run(suite)
#对测试集进行测试需要返回值
# return suite

if __name__ == '__main__':

# unittest.main(defaultTest='test_InterFace')
# 执行测试
runner = unittest.TextTestRunner()
runner.run(test_InterFace())

4.对接口的数据进行统计

[python] view plain
# TestCensus.py
# -*- coding:utf-8 -*-
import time
import TestSuite
import send_email
import TestCase

class Test_Calss():

def census(self):
text = ''
# 初始化测试起始时间
start_time = time.time()
# 调用suite测试集
TestSuite.test_InterFace()
# 结束执行时间计算
end_time = time.time()

result = TestCase.decide_Count()
# 接口测试统计说明
total_use_case = u"执行用例总数:" + str(result['num_success'] + result['num_fail']) + \
u"\t通过数:" + str(result['num_success']) + \
u"\t不通过数:" + str(result['num_fail'])
total_time = u"\t总共耗时:" + str(round((end_time - start_time), 3)) + u'秒'
text = result['text'] + total_use_case + total_time
print (text)

# 发生测试报告邮件
send_email.email_file(text)

if __name__ == '__main__':
Test_Calss().census()
[python] view plain
<pre code_snippet_id="2001712" snippet_file_name="blog_20161123_4_8691238"></pre><pre code_snippet_id="2001712" snippet_file_name="blog_20161123_1_3110897" name="code" class="python"><pre code_snippet_id="2001712" snippet_file_name="blog_20161123_1_3110897" name="code" class="python"><pre code_snippet_id="2001712" snippet_file_name="blog_20161123_1_3110897" name="code" class="python"><pre code_snippet_id="2001712" snippet_file_name="blog_20161123_1_3110897" name="code" class="python"><pre code_snippet_id="2001712" snippet_file_name="blog_20161123_1_3110897" name="code" class="python"><pre code_snippet_id="2001712" snippet_file_name="blog_20161123_1_3110897"></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<pre></pre>
<link rel="stylesheet" href="http://static.blog.csdn.net/public/res-min/markdown_views.css?v=1.0">
</pre></pre></pre></pre></pre>

❼ 如何使用python编写测试脚本

1)doctest
使用doctest是一种类似于命令行尝试的方式,用法很简单,如下

复制代码代码如下:

def f(n):
"""
>>> f(1)
1
>>> f(2)
2
"""
print(n)

if __name__ == '__main__':
import doctest
doctest.testmod()

应该来说是足够简单了,另外还有一种方式doctest.testfile(filename),就是把命令行的方式放在文件里进行测试。

2)unittest
unittest历史悠久,最早可以追溯到上世纪七八十年代了,C++,Java里也都有类似的实现,Python里的实现很简单。
unittest在python里主要的实现方式是TestCase,TestSuite。用法还是例子起步。

复制代码代码如下:

from widget import Widget
import unittest
# 执行测试的类
class WidgetTestCase(unittest.TestCase):
def setUp(self):
self.widget = Widget()
def tearDown(self):
self.widget.dispose()
self.widget = None
def testSize(self):
self.assertEqual(self.widget.getSize(), (40, 40))
def testResize(self):
self.widget.resize(100, 100)
self.assertEqual(self.widget.getSize(), (100, 100))
# 测试
if __name__ == "__main__":
# 构造测试集
suite = unittest.TestSuite()
suite.addTest(WidgetTestCase("testSize"))
suite.addTest(WidgetTestCase("testResize"))

# 执行测试
runner = unittest.TextTestRunner()
runner.run(suite)

简单的说,1>构造TestCase(测试用例),其中的setup和teardown负责预处理和善后工作。2>构造测试集,添加用例3>执行测试需要说明的是测试方法,在Python中有N多测试函数,主要的有:
TestCase.assert_(expr[, msg])
TestCase.failUnless(expr[, msg])
TestCase.assertTrue(expr[, msg])
TestCase.assertEqual(first, second[, msg])
TestCase.failUnlessEqual(first, second[, msg])
TestCase.assertNotEqual(first, second[, msg])
TestCase.failIfEqual(first, second[, msg])
TestCase.assertAlmostEqual(first, second[, places[, msg]])
TestCase.failUnlessAlmostEqual(first, second[, places[, msg]])
TestCase.assertNotAlmostEqual(first, second[, places[, msg]])
TestCase.failIfAlmostEqual(first, second[, places[, msg]])
TestCase.assertRaises(exception, callable, ...)
TestCase.failUnlessRaises(exception, callable, ...)
TestCase.failIf(expr[, msg])
TestCase.assertFalse(expr[, msg])
TestCase.fail([msg])

❽ Python 的 unittest

是需要重载setup 和teardown与before,after的用法一致。
setup建立数据环境
teardown清理自己留下的垃圾尾巴。

通常我们在setup里将数据库删除重新建立,
teardown里把整个儿库再删除。

❾ python unittest单元测试框架中,如何对一个testcase参数化,具体如何实现

#首先pyunit不像junit一样支持参数化测试。。。不过不是不能实现,只是pyunit的作者想让#这个东西变得尽量简单。所以不去实现。当然这个pyhon语言足够动态,你可以自己去实现

#外部输入参数测试。

importunittest
classParametrizedTestCase(unittest.TestCase):
"""
inheritfromthisclass.
"""
def__init__(self,methodName='runTest',param=None):
super(ParametrizedTestCase,self).__init__(methodName)
self.param=param
@staticmethod
defparametrize(testcase_klass,param=None):
"""
subclass,passingthemtheparameter'param'.
"""
testloader=unittest.TestLoader()
testnames=testloader.getTestCaseNames(testcase_klass)
suite=unittest.TestSuite()
fornameintestnames:
suite.addTest(testcase_klass(name,param=param))
returnsuite


#####################################################

##用法-testcase
classTestOne(ParametrizedTestCase):
deftest_something(self):
print'param=',self.param
self.assertEqual(1,1)

deftest_something_else(self):
self.assertEqual(2,2)

##用法-测试
suite=unittest.TestSuite()
suite.addTest(ParametrizedTestCase.parametrize(TestOne,param=42))
suite.addTest(ParametrizedTestCase.parametrize(TestOne,param=13))
unittest.TextTestRunner(verbosity=2).run(suite)

#结果
test_something(__main__.TestOne)...param=42
ok
test_something_else(__main__.TestOne)...ok
test_something(__main__.TestOne)...param=13
ok
test_something_else(__main__.TestOne)...ok

----------------------------------------------------------------------
Ran4testsin0.000s

OK

当然最好的方法就是用别人写的东西。。。

https://github.com/taykey/nose-ittr

这个拿去,不谢

热点内容
滑板鞋脚本视频 发布:2025-02-02 09:48:54 浏览:432
群晖怎么玩安卓模拟器 发布:2025-02-02 09:45:23 浏览:557
三星安卓12彩蛋怎么玩 发布:2025-02-02 09:44:39 浏览:743
电脑显示连接服务器错误 发布:2025-02-02 09:24:10 浏览:537
瑞芯微开发板编译 发布:2025-02-02 09:22:54 浏览:146
linux虚拟机用gcc编译时显示错误 发布:2025-02-02 09:14:01 浏览:235
java驼峰 发布:2025-02-02 09:13:26 浏览:651
魔兽脚本怎么用 发布:2025-02-02 09:10:28 浏览:538
linuxadobe 发布:2025-02-02 09:09:43 浏览:212
sql2000数据库连接 发布:2025-02-02 09:09:43 浏览:726