一、接口对象封装
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,"登录成功")
四、参数化封装