zoukankan      html  css  js  c++  java
  • 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)      # 空格对齐





  • 相关阅读:
    Atom使用教程
    4-[函数]-参数
    4-[函数]- 独立功能的代码块
    3 [文件]-修改文件
    2 [文件]-文件操作
    1. [文件]- 文件类型,文件open模式
    2-16 阶段考核
    react native 网络get请求方式参数不可为undefined或null
    [网络]远程访问局域网svn服务器[转]
    react native listview 一个有用的属性,用作两列布局
  • 原文地址:https://www.cnblogs.com/huafan/p/9874339.html
Copyright © 2011-2022 走看看