'''
时间: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来判断。