首页 > 技术文章 > 009 python接口 断言与报告

huafan 2018-10-30 12:28 原文

 

 

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

 

推荐阅读