''' 时间:2018/10/30 功能:unittest 目录: 一: 三种介绍 1 help查看 2 文件查看 3 类型查看 二: 单个运行
1 测试用例
2 测试类 三: 全部运行 1 方法1 2 方法2 四: 执行结果
五: 执行顺序
六: 实际操作
七: Error
1 tab和空格
'''
一: 三种介绍
1 help查看
# coding:utf-8 import unittest print(help(unittest))
Help on package unittest: NAME unittest DESCRIPTION Python unit testing framework, based on Erich Gamma's JUnit and Kent Beck's Smalltalk testing framework (used with permission). This module contains the core framework classes that form the basis of specific test cases and suites (TestCase, TestSuite etc.), and also a text-based utility class for running the tests and reporting the results (TextTestRunner).
2 文件查看
3 类型查看
# coding:utf-8 import unittest print(type(unittest))
<class 'module'>
二: 单个运行
1 测试用例
# coding:utf-8 import unittest class IntegerArithmeticTestCase(unittest.TestCase): def testAdd(self): # test method names begin with 'test' self.assertEqual((1 + 2), 3) self.assertEqual(0 + 1, 1) def testMultiply(self): self.assertEqual((0 * 10), 0) self.assertEqual((5 * 8), 40) if __name__ == '__main__': unittest.main()
1 : 使用例子代码,复制到py文件。
1 : 选择要执行的单个用例xxx,右击选择Run 'xxx'。
1 : 可以看红框内运行:数量、结果和时间。
2 测试类
1 : 选择要执行的测试类xxx,右击选择Run 'xxx'。
1 : 可以看红框内运行:数量、结果和时间。
三: 全部运行
1 方法1
1 : 选择'__main__',右击选择Run '文件名'。
1 : 可以看红框内运行:数量、结果和时间
2 方法2
1 : 右击文件名,选择Run 'Unittests in 文件名'。
1 : 可以看红框内运行:数量、结果和时间
四: 执行结果
. : 执行成功
E : 测试代码错误
F : assert断言失败,开发代码问题)
五: 执行顺序
# coding:utf-8 import unittest class A8(unittest.TestCase): def setUp(self): print("setUp") def tearDown(self): print("tearDown") @classmethod def setUpClass(cls): print("setUpClass") @classmethod def tearDownClass(cls): print("tearDownClass") def testAdd(self): # test method names begin with 'test' print("testAdd") self.assertEqual((1 + 2), 3) self.assertEqual(0 + 1, 1) def testMultiply(self): print("testMultiply") self.assertEqual((0 * 10), 0) self.assertEqual((5 * 8), 40) def testAsd(self): print("testAsd") self.assertEqual((1 + 1), 2) self.assertEqual((1 + 1), 2) if __name__ == '__main__': unittest.main()
Testing started at 1:16 ...
setUpClass
setUp
testAdd
tearDown
setUp
testAsd
tearDown
setUp
testMultiply
tearDown
tearDownClass
每次用例 - 最先执行: def setUp(self): 每次用例 - 最后执行: def tearDown(self): 所有用例 - 最先执行一次: def setUpClass(cls): 所有用例 - 最后执行一次: def tearDownClass(cls):
class和用例执行顺序排序: 大写字符(A-Z),小写字母(a-z), 数字(0-9)
六: 实际操作
1 : 使用第三方接口做测试。
{'error_code': 0, 'reason': 'success', 'result': {'data': {'conclusion': '[凶]波澜重迭,常陷穷困,动不如静,有才无命', 'analysis': '越是对命运的抗争,越是使自已陷入困境,常常想靠自已改变命运,却一次次使自已的生活走入穷困,还不如听天由命,安于本份。'}}} {'resultcode': '101', 'reason': 'KEY ERROR!', 'result': [], 'error_code': 10001}
1 : 查看不同情况下的返回数据,还可以查看官方的接口描述。
# coding:utf-8 import requests import unittest class TestQQ(unittest.TestCase): # key值 - 正确情况 def test_qq_right_key(self): url = "http://japi.juhe.cn/qqevaluate/qq" par = { "key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx", # 正确的key "qq": "1812436356" } r = requests.get(url, params=par) res = r.json() self.assertTrue(res['reason'] == 'success') # 检查点 - 结果 self.assertTrue(res['error_code'] == 0) # 检查点 - 错误码 self.assertTrue(res['result'] != []) # 检查点 - 返回结果 # key值 - 错误情况 def test_qq_error_key(self): url = "http://japi.juhe.cn/qqevaluate/qq" par = { "key": "123456789", # 错误的key "qq": "1812436356" } r = requests.get(url, params=par) res = r.json() self.assertTrue(res['reason'] == 'KEY ERROR!') # 检查点 - 结果 self.assertTrue(res['error_code'] == 10001) # 检查点 - 错误码 self.assertTrue(res['result'] == []) # 检查点 - 返回结果 # qq - 为空 def test_qq_no_qq(self): url = "http://japi.juhe.cn/qqevaluate/qq" par = { "key": "980bf619855953f6ebef9abe90d52712", "qq": "" } r = requests.get(url, params=par) res = r.json() self.assertTrue(res['reason'] == '错误的请求参数') # 检查点 - 结果 self.assertTrue(res['error_code'] == 216602) # 检查点 - 错误码 if __name__ == "__main__": unittest.main()
1 : 根据不同的测试方法,编写测试用例。
1 : 可以看红框内运行:数量、结果和时间
七: Error
1
TabError: inconsistent use of tabs and spaces in indentation
原因是在代码对齐中,混合使用tab健和空格健
1 : notepad: 视图 -> 显示符号 -> 显示空格与制表符。
def testAdd(self): self.assertEqual((1 + 2), 3) # tab对齐 self.assertEqual(0 + 1, 1) # 空格对齐