学习笔记之软件测试3:一个小小小Django项目的登录注册模块单元测试

前言

  • 本章节以 用户注册->登录(注销)->用户中心的三个模块为例进行的单元测试

  • 会用到很多 第二章节的知识,建议翻看了解第二章

  • 有任何问题随时评论区提问

Prepare-测试前的准备

一、基础资料/环境准备

  1. 接口文档->实际工作中,为了保证无效沟通,接口文档更新一定即时邮件传递!
  2. 测试服务器->数据库
  3. 测试用例编写->执行
  4. 生成测试报告->可以通过类似禅道的项目管理软件上报BUG以及测试报告

二、软件环境准备

  1. 测试的框架目录搭建

    • 目的:方便管理、提升测试代码效率

    • 目录结构说明
      在这里插入图片描述

  2. 目录中文件代码准备

    • pytest.ini 配置文件修改

      [pytest]
      
      # 1.给 pytest  传参数  三个插件的配置文件中写写法如下
      # -s 输出测试用例中的print内容  
      # --html 插件 将测试结果输出为报告网页  
      # --rerun碰见测试报错重新测试几遍
      addopts = -s --html=./a.html --reruns 3
      
      # 2.指定 测试脚本的 路径 指定到scripts文件夹下
      testpaths = ./scripts
      
      # 3.指定 测试文件的 名字
      python_files = test_*.py
      
      # 4.指定 测试文件类的 名字  当前的目录下有指定名称文件才会执行
      python_classes = Test*
      
      # 5.指定 测试文件函数的 名字
      python_functions = test_*
      
    • base文件夹1 发送请求代码(因为我们每个单元测试都是要向后端发送请求)

      import requests
      
      # get 请求方式 url必传项 params一般传递字典类似于向后端发送请求携带数据
      def method_get(url, params=None, **kwargs):
          response = requests.get(url, params=params, **kwargs)
          return response
      
      # post请求方式 url必传项  data-表单数据  json-json格式数据
      def method_post(url, data=None, json=None, **kwargs):
          response = requests.post(url, data=data, json=json, **kwargs)
          return response
      
    • base文件夹2 测试代码向后端发送请求携带数据 把数据统一存储到yaml文件中方便维护

      # 文件读取涉及到文件路径问题  需要使用python自带的os模块进行文件路径的查找
      # ======几个常用文件路径函数说明======
      	 os.path.dirname()   ../ 上级目录
           os.path.abspath()   绝对路径
           os.getcwd()    ./   获取当前目录(文件夹路径)
           os.sep === '/' 字符串/  用于路径拼接  
      # ===================================
      import os
      import yaml
      
      
      class ReadData:
          def __init__(self, file_name):
             """
      # =============方法1===============
      # 1. 当前目录的绝对路径 的上级目录的上级目录   xxx/data/data.yaml        print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
      # 2. 路径作为属性传递给 filepath
      self.filepath=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + '/data/' + file_name
              """
      		#===========方法2============
              # 执行路径   在子目录中  
              # self.filepath = os.path.dirname(os.getcwd()) + os.sep + 'data' + os.sep + file_name
      
              # 执行路径    在测试文件根目录
              self.filepath = os.getcwd() + os.sep + 'data' + os.sep + file_name
      
              print('当前文件夹路径:', os.getcwd())
      
          def read_data(self):
              # 读的方式打开
              f = open(self.filepath, 'r')
              # yaml自带load读取后转化为python中的dict形式
              data = yaml.load(f, Loader=yaml.FullLoader)
              # 返回字典数据
              return data
      

Register-注册单元测试

以下测试用例通用流程

  1. 测试需要的测试数据准备到yaml文件中(如用户名密码等)
  2. 测试用例中读取数据
  3. pytest.mark.parametrize(‘key’, [value]) 将测试数据传递到测试用例中
  4. 编写测试用例具体代码
  5. 执行测试函数
  6. 如需要数据库参与 开启mysql/redis等
RepeJudg-用户名+手机号重复判断

一、判断用户名是否重复

  • 测试数据准备

    # 1. 用户名是否重复 数据准备  url username  第1、4名字在数据库中存在
    RepeJudg_username:
      url: "http://127.0.0.:8000/usernames/{username}/count/"
      usernames: ['python3', 'dreba', 'nazha', 'python3']    
    
  • 测试代码

    from base.data_read import ReadData
    from base.response import method_get
    import pytest
    
    
    # ====测试数据读取函数====
    def data_read():
        # 1. 将yaml文件读取
        data_dict = ReadData('data.yaml').read_data()
        # 2. 从字典中取数据  url  usernames
        url = data_dict['RepeJudg_username']['url']
        usernames = data_dict['RepeJudg_username']['usernames']
        # 3. 返回数据 供测试用例调用
        return url, usernames
    
    
    class Test_username():
        # ===parametrize() 方式传递给测试用例参数===
        # pytest.mark.parametrize('key', [value])
        @pytest.mark.parametrize('url,usernames', [data_read()])
        def test_username(self, url, usernames):
            while len(usernames) != 0:
                # 0.获取用户名 用pop删除并获取
                name = usernames.pop()
                # 1.拼接完整的路由
                username_count_url = url.format(username=name)
                print('\n', username_count_url)
                # 2.发送get请求
                response = method_get(username_count_url)
                # 3.断言--可能访问失败
                assert response.status_code == 200, '访问失败!'
                # print(username_count_url)
                # print(response.content.decode())
                # 4. 根据对返回数据库username数量查询 count!=0重复  count=0不重复
                count = response.json().get('count')
                if count == 1:
                    print('{}重复了..'.format(name))
                    assert count == 1
                else:
                    print('{}不重复..'.format(name))
                    assert count == 0
                    
    # ============测试结果================
    scripts/
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ricerd_S

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值