009 python接口 断言与报告

可莉
• 阅读 736

009 python接口 断言与报告

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

一: 测试报告
1 工程结构

009 python接口 断言与报告

1 :  一级目录 - 工程名称

2 :  二级目录 - 测试用例

3 :  二级目录 - 测试报告

4 :  二级文件 - 运行文件

2 TestCase

009 python接口 断言与报告

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

009 python接口 断言与报告

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

009 python接口 断言与报告

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

009 python接口 断言与报告

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

4 common

009 python接口 断言与报告

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来判断。
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这