接口对象封装思想及实现-笔记

目录

  • 接口对象封装
    • 代码分层思想
  • 封装案例
    • 封装Tpshop商城登录
    • Tpshop商城登录参数化

接口对象封装

代码分层思想

接口对象封装思想及实现-笔记_第1张图片
分层思想:将普通思想分为两层,分为接口对象层和测试脚本层
接口对象层:
对接口进行封装,封装好之后,给测试用例调用
面向对象来封装实现
测试用例层:
调用接口对象层封装的方法,拿到响应结果,断言进行接口测试
借助unittest框架实现
封装思想:
将动态变化的数据,设计到方法的参数
将固定不变的,直接写成方法实现
将响应结果,通过返回值传出

封装案例

封装Tpshop商城登录

接口封装

class LoginApi:
    #发送验证码请求
    @classmethod      #类方法,不用创建实例,可直接类名调用
    def get_verify(cls,session):
        session.get(url='url地址')   #url地址是固定不变的
    #发送登录请求
    @classmethod
    def post_login(cls,session,data):
        resp=session.post(url='url地址',data=data)
        return resp

断言封装

class AssertFeizhuang:
    def common_assert(self,resp,status_code,status,msg):
        self.assertEquel(status_code, resp.status_code)
        self.assertEquel(status, resp.json().get("status"))
        self.assertEqual(msg, resp.json().get("msg"))

用例优化(前置方法提取)

import unittest
from assert_feizhuang import AssertFeizhuang
from login_api import LoginApi
from assert_feizhuang import AssertFeizhuang

class TestLogin(unittest.TestCase):
    session=None
    @classmethod
    def setUpClass(cls):
        cls.session = requests.session()
    def setUp(self):
        # 获取验证码
        LoginApi.get_verify(self.session)
    def test_login_01(self):
        """登录成功"""
        #登录
        data={"username":"13800000002","password":"123456","verifyCode":"8888"}
        resp=LoginApi.post_login(self.session,data)
        #断言
        AssertFeizhuang.common_assert(self,resp,200,1,"登录成功")
    def test_login_02(self):
        """手机号不存在"""
        # 登录
        data = {"username": "13800123002","password": "123456","verifyCode": "8888"}
        resp = LoginApi.post_login(self.session, data)
        # 断言
        AssertFeizhuang.common_assert(self, resp, 200, -1, "账号不存在")
    def test_login_03(self):
        """密码错误"""
        # 登录
        data = {"username": "13800000002","password": "000000","verifyCode": "8888"}
        resp = LoginApi.post_login(self.session, data)
        # 断言
        AssertFeizhuang.common_assert(self, resp, 200, -1, "密码错误")

Tpshop商城登录参数化

参数化实现步骤:
1.导包from parameterized import parameterized
2.在需要参数的方法前一行添加@parameterized.expand(数据)
3.给expand()传入数据,数据格式[(),(),()]
4.修改需要参数的方法,添加形参,个数、顺序与传入数据()的所有key一一对应
5.在通用测试方法内,使用形参
json数据文件

[{
  "data": {"username":"13800000002","password":"123456","verifyCode":"8888"},
  "status_code": 200,
  "status": 1,
  "msg": "登录成功"
},{
  "data": {"username":"13800123002","password":"123456","verifyCode":"8888"},
  "status_code": 200,
  "status": -1,
  "msg": "账号不存在"
}, {
  "data": {"username":"13800000002","password":"000000","verifyCode":"8888"},
  "status_code": 200,
  "status": 1,
  "msg": "密码错误"}]

读取数据

import json
def get_data(file):
    with open(file,'r',encoding='utf-8') as f:
        list=json.load(f)
        list1=[]
        for i in list:
            list1.append(tuple(i.values()))
    return list1

参数化后用例

import unittest
import requests
from parameterized import parameterized
from get_data import get_data
from login_api import LoginApi
from assert_feizhuang import AssertFeizhuang

class TestLogin(unittest.TestCase):
    session=None
    @classmethod
    def setUpClass(cls):
        cls.session = requests.Session()
    def setUp(self):
        # 获取验证码
        LoginApi.get_verify(self.session)
    @parameterized.expand(get_data('./login.json'))
    def test_login_01(self,data,status_code,status,msg):
        """登录成功"""
        print(data,status_code,status,msg)
        #登录
        resp=LoginApi.post_login(self.session,data)
        #断言
        AssertFeizhuang.common_assert(self,resp,status_code,status,msg)

你可能感兴趣的:(python)