
1''' 2时间:2018/10/30 3功能:断言与报告 4目录: 5 一: 测试报告 6 1 工程结构 7 2 TestCase 8 3 TestReport 9 4 common 10 5 run_all (1) unittest生成 (2) HTMLTestRunner生成 11 二: 断言使用 12'''
一: 测试报告
1 工程结构

1 : 一级目录 - 工程名称
2 : 二级目录 - 测试用例
3 : 二级目录 - 测试报告
4 : 二级文件 - 运行文件
2 TestCase

1 : 编写了两个测试case
1# coding:utf-8 2import unittest 3 4class IntegerArithmeticTestCase(unittest.TestCase): 5 ''' 测试符号计算 ''' 6 def testMultiply(self): 7 ''' 乘法计算''' 8 self.assertEqual((0 * 10), 0) 9 self.assertEqual((5 * 8), 40) 10 def testAsd(self): 11 ''' 加法计算''' 12 self.assertEqual((1 + 1), 2) 13 self.assertEqual((1 + 1), 2) 14 15if __name__ == '__main__': 16 unittest.main()
1 : test_count.py
1# coding:utf-8 2import requests 3import unittest 4 5class TestQQ(unittest.TestCase): 6 ''' 测试QQ接口''' 7 def test_qq_right_key(self): 8 ''' key值 - 正确情况''' 9 url = "http://japi.juhe.cn/qqevaluate/qq" 10 par = { 11 "key": "980bf619855953f6ebef9abe90d52712", 12 "qq": "1812436356" 13 } 14 r = requests.get(url, params=par) 15 res = r.json() 16 17 self.assertTrue(res['reason'] == 'success') # 检查点 - 结果 18 self.assertTrue(res['error_code'] == 0) # 检查点 - 错误码 19 self.assertTrue(res['result'] != []) # 检查点 - 返回结果 20 21 22 def test_qq_error_key(self): 23 ''' key值 - 错误情况 ''' 24 url = "http://japi.juhe.cn/qqevaluate/qq" 25 par = { 26 "key": "123456789", 27 "qq": "1812436356" 28 } 29 r = requests.get(url, params=par) 30 res = r.json() 31 32 self.assertTrue(res['reason'] == 'KEY ERROR!') # 检查点 - 结果 33 self.assertTrue(res['error_code'] == 10001) # 检查点 - 错误码 34 self.assertTrue(res['result'] == []) # 检查点 - 返回结果 35 36 def test_qq_no_qq(self): 37 ''' qq - 为空 ''' 38 url = "http://japi.juhe.cn/qqevaluate/qq" 39 par = { 40 "key": "980bf619855953f6ebef9abe90d52712", 41 "qq": "" 42 } 43 r = requests.get(url, params=par) 44 res = r.json() 45 46 self.assertTrue(res['reason'] == '错误的请求参数') # 检查点 - 结果 47 self.assertTrue(res['error_code'] == 216602) # 检查点 - 错误码 48 49if __name__ == "__main__": 50 unittest.main()
1 : test_qq_api.py
3 TestReport

1 : 等run_all.py执行完毕,会生成一个report.html文件。

1 : 全部测试通过的报告。

1 : 全部测试失败的报告,可以看到失败原因。
4 common

1 : 使用第三方 HTMLTestRunner_cn.py,方便查看测试结果。
5 run_all
(1) unittest生成
1# coding:utf-8 2import unittest 3import os 4 5 6# 路径兼容 - windows/mac 7cur_path = os.path.dirname(os.path.realpath(__file__)) # 获取路径 - 当前脚本 8cur_path = os.path.join(cur_path, "TestCase") # 拼接路径 9 10# 显示结果 - unnitest 11pattern = "test*.py" # 匹配文件 12discover = unittest.defaultTestLoader.discover(start_dir = cur_path, pattern = pattern) 13print(discover) 14 15runner = unittest.TextTestRunner() 16runner.run(discover) 17 18..<unittest.suite.TestSuite tests=[<unittest.suite.TestSuite tests=[<unittest.suite.TestSuite tests=[<test_count.IntegerArithmeticTestCase testMethod=testAsd>, <test_count.IntegerArithmeticTestCase testMethod=testMultiply>]>]>, <unittest.suite.TestSuite tests=[<unittest.suite.TestSuite tests=[<test_qq_api.TestQQ testMethod=test_qq_error_key>, <test_qq_api.TestQQ testMethod=test_qq_no_qq>, <test_qq_api.TestQQ testMethod=test_qq_right_key>]>]>]> 19... 20---------------------------------------------------------------------- 21Ran 5 tests in 0.299s 22 23OK
(2) HTMLTestRunner生成
1# coding:utf-8 2import unittest 3import os 4from common import HTMLTestRunner_cn 5 6 7# 路径兼容 - windows/mac 8cur_path = os.path.dirname(os.path.realpath(__file__)) # 获取路径 - 当前脚本 9cur_path = os.path.join(cur_path, "TestCase") # 拼接路径 10 11# 显示结果 - unnitest 12pattern = "test*.py" # 匹配文件 13discover = unittest.defaultTestLoader.discover(start_dir = cur_path, pattern = pattern) 14print(discover) 15 16 17# 路径兼容 - windows/mac 18cur_path = os.path.dirname(os.path.realpath(__file__)) # 获取路径 - 当前脚本 19report_path = os.path.join(cur_path, "TestReport", "report.html") 20 21# 显示结果 - HTMLTestRunner 22fp = open(report_path, "wb") 23runner = HTMLTestRunner_cn.HTMLTestRunner(stream = fp, # 报告路径 24 title = "接口测试用例报告", # 报告标题 25 description = "测试用例详情报告", # 报告描述 26 retry = 1, # 错误重写执行 27 verbosity = 2) # 注释显示 28runner.run(discover) 29 30<unittest.suite.TestSuite tests=[<unittest.suite.TestSuite tests=[<unittest.suite.TestSuite tests=[<test_count.IntegerArithmeticTestCase testMethod=testAsd>, <test_count.IntegerArithmeticTestCase testMethod=testMultiply>]>]>, <unittest.suite.TestSuite tests=[<unittest.suite.TestSuite tests=[<test_qq_api.TestQQ testMethod=test_qq_error_key>, <test_qq_api.TestQQ testMethod=test_qq_no_qq>, <test_qq_api.TestQQ testMethod=test_qq_right_key>]>]>]> 31ok testAsd (test_count.IntegerArithmeticTestCase) 32ok testMultiply (test_count.IntegerArithmeticTestCase) 33ok test_qq_error_key (test_qq_api.TestQQ) 34ok test_qq_no_qq (test_qq_api.TestQQ) 35ok test_qq_right_key (test_qq_api.TestQQ) 36 37Time Elapsed: 0:00:00.304017
二: 断言使用
1常用的断言 2 assertEqual 数字相同 3 assertNotEqual 数字不同 4 5 assertFalse 条件为假 6 assertTrue 条件为真 7 8 assertIn 字符串 - 包含 9 assertNotIn 字符串 - 不包含 10 11 12 所有的测试结果判断,都可以用True和False来判断。
