''' 时间:2018/10/30 功能:断言与报告 目录: 一: 测试报告 1 工程结构 2 TestCase 3 TestReport 4 common 5 run_all
(1) unittest生成
(2) HTMLTestRunner生成 二: 断言使用 '''
一: 测试报告
1 工程结构
1 : 一级目录 - 工程名称
2 : 二级目录 - 测试用例
3 : 二级目录 - 测试报告
4 : 二级文件 - 运行文件
2 TestCase
1 : 编写了两个测试case
# coding:utf-8 import unittest class IntegerArithmeticTestCase(unittest.TestCase): ''' 测试符号计算 ''' def testMultiply(self): ''' 乘法计算''' self.assertEqual((0 * 10), 0) self.assertEqual((5 * 8), 40) def testAsd(self): ''' 加法计算''' self.assertEqual((1 + 1), 2) self.assertEqual((1 + 1), 2) if __name__ == '__main__': unittest.main()
1 : test_count.py
# coding:utf-8 import requests import unittest class TestQQ(unittest.TestCase): ''' 测试QQ接口''' def test_qq_right_key(self): ''' key值 - 正确情况''' url = "http://japi.juhe.cn/qqevaluate/qq" par = { "key": "980bf619855953f6ebef9abe90d52712", "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'] != []) # 检查点 - 返回结果 def test_qq_error_key(self): ''' key值 - 错误情况 ''' url = "http://japi.juhe.cn/qqevaluate/qq" par = { "key": "123456789", "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'] == []) # 检查点 - 返回结果 def test_qq_no_qq(self): ''' qq - 为空 ''' 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 : 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生成
# coding:utf-8 import unittest import os # 路径兼容 - windows/mac cur_path = os.path.dirname(os.path.realpath(__file__)) # 获取路径 - 当前脚本 cur_path = os.path.join(cur_path, "TestCase") # 拼接路径 # 显示结果 - unnitest pattern = "test*.py" # 匹配文件 discover = unittest.defaultTestLoader.discover(start_dir = cur_path, pattern = pattern) print(discover) runner = unittest.TextTestRunner() runner.run(discover)
..<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>]>]>]> ... ---------------------------------------------------------------------- Ran 5 tests in 0.299s OK
(2) HTMLTestRunner生成
# coding:utf-8 import unittest import os from common import HTMLTestRunner_cn # 路径兼容 - windows/mac cur_path = os.path.dirname(os.path.realpath(__file__)) # 获取路径 - 当前脚本 cur_path = os.path.join(cur_path, "TestCase") # 拼接路径 # 显示结果 - unnitest pattern = "test*.py" # 匹配文件 discover = unittest.defaultTestLoader.discover(start_dir = cur_path, pattern = pattern) print(discover) # 路径兼容 - windows/mac cur_path = os.path.dirname(os.path.realpath(__file__)) # 获取路径 - 当前脚本 report_path = os.path.join(cur_path, "TestReport", "report.html") # 显示结果 - HTMLTestRunner fp = open(report_path, "wb") runner = HTMLTestRunner_cn.HTMLTestRunner(stream = fp, # 报告路径 title = "接口测试用例报告", # 报告标题 description = "测试用例详情报告", # 报告描述 retry = 1, # 错误重写执行 verbosity = 2) # 注释显示 runner.run(discover)
<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>]>]>]>
ok testAsd (test_count.IntegerArithmeticTestCase)
ok testMultiply (test_count.IntegerArithmeticTestCase)
ok test_qq_error_key (test_qq_api.TestQQ)
ok test_qq_no_qq (test_qq_api.TestQQ)
ok test_qq_right_key (test_qq_api.TestQQ)
Time Elapsed: 0:00:00.304017
二: 断言使用
常用的断言 assertEqual 数字相同 assertNotEqual 数字不同 assertFalse 条件为假 assertTrue 条件为真 assertIn 字符串 - 包含 assertNotIn 字符串 - 不包含 所有的测试结果判断,都可以用True和False来判断。