• python学习笔记-day11-02【单元测试框架unittest -之数据驱动ddt】


    接着聊聊单元测试框架unittest -之数据驱动ddt, 如何使用数据驱动。

    一、安装依赖模块

    pip install ddt

    二、如何使用ddt模块

    1、数据驱动模块ddt使用方式

    @ddt.ddt   #在类的这里写上,表明使用的ddt,数据驱动方式
    class Login(unittest.TestCase):
       
        @ddt.file_data('login01.yaml')  #这里写上@ddt.file_data('login01.yaml') 表明数据驱动的文件是login01.yaml文件,
    这是测试用你的请求参数与数据,执行用例时,每次只能读一个文件,
      def test_request(self, **kwargs):
    pass

    2、使用示例:

    数据驱动测试有例文件,以yaml格式文件进行测试用例的方式:

    login01.yaml文件:

    -  #表明下面的数据是一个列表
      url: /api/user/login
      method: post
      detail: 正常登录
      data:
        username: test
        passwd: 111111
      check:
        - userId   #这里也是一个列表,结果检测
        - sign
    
    -
      url: /api/user/login
      method: post
      detail: 密码错误
      data:
        username: test
        passwd: 2222222
      check:
        - 密码错误
    
    -
      url: /api/user/login
      method: post
      detail: 不传密码
      data:
        username: test
      check:
        - 必填参数未填

    测试执行代码 :

    testlogin.py:

    import unittest
    import ddt
    from BeautifulReport import  BeautifulReport as bf
    import requests
    from urllib import parse
    
    
    @ddt.ddt
    class Login(unittest.TestCase):
        base_url = 'http://xxxx.xxxx.xxxx'
        @ddt.file_data('login01.yaml')
        def test_request(self, **kwargs):  #**kwargs可变参数,参数不固定,当参数较多时,可以使用这种方式,没有参数的时候,不会报错,只是取不到数据而已
            detail = kwargs.get('detail', '没写用例描述')
            self._testMethodDoc = detail  #动态的用例描述
            url = kwargs.get('url')
            url = parse.urljoin(self.base_url, url) #拼接好url
            method = kwargs.get('method', 'get')
            data = kwargs.get('data', {}) #请求参数
            header = kwargs.get('header', {}) #请求头
            cookie = kwargs.get('cookie') #cookie
            check = kwargs.get('check')
            method = method.lower() #便于处理
    
            try:
                if method == 'get':
                    res = requests.get(url, params=data, cookies=cookie, headers=header).text
                else:
                    res = requests.post(url, data=data, cookies=cookie, headers=header).text
            except Exception as e:
                print('接口请求出错')
                res = e
    
            for c in check:
                self.assertIn(c, res, msg='预期结果不符, 预期结果【%s】,实际结果【%s】' %(c, res))
    
            # userid = check.get('userId')
            # # error_code = check.get('error_code')
            # # if userid:
            # #     real_userid = res.get('login_info').get('userId')
            # #     self.assertEqual(userid, real_userid, '校验userid是否一样')
            # #
            # # real_code = res.get('error_code')
            # # self.assertEqual(error_code, real_code, '校验接口返回码是否一致')

    #不要使用这样方式,校验结果没有通用化
    suite = unittest.TestSuite() #测试套件 suite.addTest(unittest.makeSuite(Login)) #将所有的测试用例加到测试套件里去 run = bf(suite) run.report('login_test', '登录测试用例') print(run.success_count) #通过的次数 print(run.failure_count) #失败的次数 #1、运行的用例条数是不是和你的用例数一样 #2、看看有没有其他不对的地方

    三、执行

    直接在测试用例文件即要执行,或是python testlogin.py也可以

    总是想多努力一点的人
  • 相关阅读:
    SecurityAccess 之 KeyGenDll_GenerateKeyEx
    信息系统项目管理师 之 采购管理论文架构
    git stash 用法总结和注意点
    IDEA报错Cannot download sources解决方法
    Windows下安装Mysql 8.0.16出现登录失败的解决方法
    Dependencies
    Quick start
    Usage(用法)
    HashMap相关问题
    Architecture(Dubbo)
  • 原文地址:https://www.cnblogs.com/shmily2018/p/9131285.html
Copyright © 2020-2023  润新知