• 008 python接口 unittest


    '''
    时间:2018/10/30
    功能:unittest
    目录:
        一: 三种介绍
            1 help查看
            2 文件查看
            3 类型查看
        二: 单个运行
    1 测试用例
    2 测试类 三: 全部运行 1 方法1 2 方法2 四: 执行结果
    五: 执行顺序
    六: 实际操作
    七: Error
         1 tab和空格
    '''

    一: 三种介绍
      1 help查看

    # coding:utf-8
    import unittest
    
    print(help(unittest))
    Help on package unittest:
    
    NAME
        unittest
    
    DESCRIPTION
        Python unit testing framework, based on Erich Gamma's JUnit and Kent Beck's
        Smalltalk testing framework (used with permission).
        
        This module contains the core framework classes that form the basis of
        specific test cases and suites (TestCase, TestSuite etc.), and also a
        text-based utility class for running the tests and reporting the results
         (TextTestRunner).

      2 文件查看

      3 类型查看

    # coding:utf-8
    import unittest
    
    print(type(unittest))
    <class 'module'>

    二: 单个运行

      1 测试用例

    # coding:utf-8
    import unittest
    
    class IntegerArithmeticTestCase(unittest.TestCase):
        def testAdd(self):  # test method names begin with 'test'
            self.assertEqual((1 + 2), 3)
            self.assertEqual(0 + 1, 1)
        def testMultiply(self):
            self.assertEqual((0 * 10), 0)
            self.assertEqual((5 * 8), 40)
    
    if __name__ == '__main__':
        unittest.main()

    1 : 使用例子代码,复制到py文件。

    1 : 选择要执行的单个用例xxx,右击选择Run 'xxx'。

    1 : 可以看红框内运行:数量、结果和时间。

      2 测试类

    1 : 选择要执行的测试类xxx,右击选择Run 'xxx'。

    1 : 可以看红框内运行:数量、结果和时间。


    三: 全部运行

      1 方法1

    1 : 选择'__main__',右击选择Run '文件名'。

    1 : 可以看红框内运行:数量、结果和时间


      2 方法2

    1 : 右击文件名,选择Run 'Unittests in 文件名'。

    1 : 可以看红框内运行:数量、结果和时间

    四: 执行结果

    . : 执行成功
    E : 测试代码错误
    F : assert断言失败,开发代码问题)
      

    五: 执行顺序

    # coding:utf-8
    import unittest
    
    class A8(unittest.TestCase):
        def setUp(self):
             print("setUp")
        def tearDown(self):
             print("tearDown")
    
        @classmethod
        def setUpClass(cls):
            print("setUpClass")
        @classmethod
        def tearDownClass(cls):
            print("tearDownClass")
    
        def testAdd(self):  # test method names begin with 'test'
            print("testAdd")
            self.assertEqual((1 + 2), 3)
            self.assertEqual(0 + 1, 1)
        def testMultiply(self):
            print("testMultiply")
            self.assertEqual((0 * 10), 0)
            self.assertEqual((5 * 8), 40)
        def testAsd(self):
            print("testAsd")
            self.assertEqual((1 + 1), 2)
            self.assertEqual((1 + 1), 2)
    
    if __name__ == '__main__':
        unittest.main()
    Testing started at 1:16 ...
    setUpClass
    setUp
    testAdd
    tearDown
    setUp
    testAsd
    tearDown
    setUp
    testMultiply
    tearDown
    tearDownClass
    每次用例 - 最先执行: def setUp(self):
    每次用例 - 最后执行: def tearDown(self):
    
    所有用例 - 最先执行一次: def setUpClass(cls):
    所有用例 - 最后执行一次: def tearDownClass(cls):

    class和用例执行顺序排序: 大写字符(A-Z),小写字母(a-z), 数字(0-9)

    六: 实际操作

    1 : 使用第三方接口做测试。

    {'error_code': 0, 'reason': 'success', 'result': {'data': {'conclusion': '[凶]波澜重迭,常陷穷困,动不如静,有才无命', 'analysis': '越是对命运的抗争,越是使自已陷入困境,常常想靠自已改变命运,却一次次使自已的生活走入穷困,还不如听天由命,安于本份。'}}}
    
    {'resultcode': '101', 'reason': 'KEY ERROR!', 'result': [], 'error_code': 10001}

    1 : 查看不同情况下的返回数据,还可以查看官方的接口描述。

    # coding:utf-8
    import requests
    import unittest
    
    class TestQQ(unittest.TestCase):
        # key值 - 正确情况
        def test_qq_right_key(self):
            url = "http://japi.juhe.cn/qqevaluate/qq"
            par = {
                "key": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx", # 正确的key
                "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'] != [])        # 检查点 - 返回结果
    
         # key值 - 错误情况
        def test_qq_error_key(self):
            url = "http://japi.juhe.cn/qqevaluate/qq"
            par = {
                "key": "123456789", # 错误的key
                "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'] == [])           # 检查点 - 返回结果
    
        # qq - 为空
        def test_qq_no_qq(self):
            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 : 根据不同的测试方法,编写测试用例。

    1 : 可以看红框内运行:数量、结果和时间

    
    

    七: Error
         1

    TabError: inconsistent use of tabs and spaces in indentation
    原因是在代码对齐中,混合使用tab健和空格健

    1 : notepad: 视图 -> 显示符号 -> 显示空格与制表符。

    def testAdd(self):  
        self.assertEqual((1 + 2), 3)    # tab对齐
        self.assertEqual(0 + 1, 1)      # 空格对齐





  • 相关阅读:
    jquery.FixedColumns 滚动兼容问题
    面向对象三大特性:继承、封装、多态
    jquery.chosen.js和select2使用笔记
    Git查看、删除、重命名远程分支和tag(转载)
    GIT忽略追踪文件
    git代码量统计(转载)
    SQL SERVER如何收缩日志-通过脚本收缩(转发)
    GIT常用命令
    解决 git extensions 每次提交需要输入用户名和密码
    Mysql 5.7初始化密码
  • 原文地址:https://www.cnblogs.com/huafan/p/9874339.html
Copyright © 2020-2023  润新知