项目代码封装

发布时间 2023-04-11 21:34:40作者: 新入世界的小白

一、接口对象封装

  1、解决问题

    代码冗余(有大量重复代码)

    代码耦合度高

    代码维护成本高

  2、核心思想:代码分层

    分层思想:对普通方法实现的,分为 接口对象层 和 测试脚本层

    接口对象层:

      对接口进行封装,封装之后,给测试用例层执行

      面向对象类封装实现

    测试用例层:

      调用接口对象层封装的方法。拿到响应结果,断言接口测试

      借助 unittest 框架实现

  

二、自动化测试框架

  1、目录结构:7 部分(5个目录、2个文件):

    api/: 存储接口对象层(自己封装的 接口)
    scripts/: 存储测试脚本层 (unittest框架实现的 测试类、测试方法)
    data/: 存储 .json 数据文件
    report/: 存储 生成的 html 测试报告
    common/: 存储 通用的 工具方法
    confifig.py: 存储项目的配置信息(全局变量)
    run_suite.py: 组装测试用例、生成测试报告的代码
 
三、项目展示
  1、登录接口(普通方式)
import unittest 
import requests 
class TestIhrmLogin(unittest.TestCase): 
# 测试方法1,登录成功 
    def test01_login_success(self): 
    # 组织url 
        url = "http://ihrm-test.itheima.net/api/sys/login" 
        header = {"Content-Type": "application/json"} 
        json_data = {"mobile": "13800000002", "password": "123456"} 
        resp = requests.post(url=url, headers=header, json=json_data) 
        print("登录成功:", resp.json()) 
    # 断言 
        self.assertEqual(200, resp.status_code) 
        self.assertEqual(True, resp.json().get("success")) 
        self.assertEqual(10000, resp.json().get("code")) 
        self.assertIn("操作成功", resp.json().get("message")) 

# 测试方法2,密码错误 
    def test02_pwd_err(self): 
    # 组织url 
        url = "http://ihrm-test.itheima.net/api/sys/login" 
        header = {"Content-Type": "application/json"} 
        json_data = {"mobile": "13800000002", "password": "123456789"} 
        resp = requests.post(url=url, headers=header, json=json_data) 
        print("密码错误:", resp.json()) 
    # 断言 
        self.assertEqual(200, resp.status_code) 
        self.assertEqual(False, resp.json().get("success")) 
        self.assertEqual(20001, resp.json().get("code")) 
        self.assertIn("用户名或密码错误", resp.json().get("message"))

  2、改进

    思想分析:

      1. 在 api/ 下,创建 ihrm_login_api.py 文件。

      2. 在 文件内,封装 IhrmLoginApi 类,添加 login 类方法。

      3. 安照 普通方式实现,分析。实现 login 类方法。
    
    代码封装
import requests 
class IhrmLoginApi(object): 
# 登录方法 
    @classmethod 
    def login(cls, json_data): 
        url = "http://ihrm-test.itheima.net/api/sys/login" 
        header = {"Content-Type": "application/json"} 
        resp = requests.post(url=url, headers=header, json=json_data) 
        return resp 
if __name__ == '__main__': 
    data = {"mobile": "13800000002", "password": "123456"} 
    resp = IhrmLoginApi.login(data) 
    print(resp.json())

    断言代码同样可以单独提出来,然后使用让它称为通用断言方法

import request
import unittest

#通用断言方法
def common_assert(self,resp,status_code,status,msg):
    self.assertEqual(status_code,resp.status_code)
    self.assertEqual(status,resp.json().get("status"))
    self.assertEqual(msg,resp.json().get("msg"))

class TestTpshopLogin(unittest.TestCase):
    #添加属性
    session = None
    #测试登录成功
    def test01_login_ok(self):
        #调用login接口
        resp = login(self.session,data)
        #调用断言
        common_assert(self,resp,200,-1,"登录成功")

 

四、参数化封装