接口测试Day10-封装IHRM登录(接口自动化框架)

  • 接口自动化框架
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

登录接口

  • 普通方式实现
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"))

  • 登录接口对象层
    在这里插入图片描述

思路:

  • 动态变化的,写入参数
  • 固定不变,直接写到方法实现内
  • 响应结果,通过返回值 return

分析:

封装实现:

import requests
"""
思路:
> - 动态变化的,写入参数
> - 固定不变,直接写到方法实现内
> - 响应结果,通过返回值 return
"""

class IhrmLoginApi(object):
    # 登录方法
    @classmethod
    def login(cls, json_data):
        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)
        return resp

if __name__ == '__main__':
    json_data = {
   
   "mobile": "13800000002", "password": "123456"}
    res = IhrmLoginApi.login(json_data)
    print(res.json())
    
  • 登录接口测试用例层

1、在 scripts/ 下,创建 test_ihrm_login.py 文件
2. 在 文件内,创建 测试类 TestIhrmLogin 从 unittest.TestCase 继承
3. 添加 测试方法, 并实现

import unittest

from api.ihrm_login_api import IhrmLoginApi


class TestIhrmLogin(unittest.TestCase):

    # 登录成功
    def test01_login_success(self):
        # 1、组织请求数据
        json_data = {
   
   "mobile": "13800000002", "password": "123456"}

        # 调用自己封装的接口
        resp = IhrmLoginApi.login(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"))

    # 手机号为空
    def test02_moblie_none(self):
        # 1、组织请求数据
        json_data = {
   
   "mobile": None, "password": "123456"}

        # 调用自己封装的接口
        resp = IhrmLoginApi.login(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"))

    # 密码错误
    def test03_pwd_err(self):
        # 组织请求数据
        json_data = {
   
   "mobile": "13800000002", "password": "123456890"}
        # 调用自己封装的接口
        resp = IhrmLoginApi.login(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"))
  • 封装断言方法

1、 在 common/ 下,新建文件 assert_util.py 文件,
2. 在文件内,添加 函数 assert_util()
3. 在 函数内,实现通用的断言函数。
4. 在 测试方法中,使用 直接封装的 通用断言函数, 实现断言

# 定义通用断言方法
def assert_util(self, resp, status_code, success, code, message):
    self.assertEqual(status_code, resp.status_code)
    self.assertEqual(success, resp.json().get("success"))
    self.assertEqual(code, resp.json().get("code"))
    self.assertIn(message, resp.json().get("message"))
    

使用断言方法:
在这里插入图片描述

import unittest

from api.ihrm_login_api import IhrmLoginApi
from common.assert_util import assert_util


class TestIhrmLogin(unittest.TestCase):

    # 登录成功
    def test01_login_success(self):
        # 1、组织请求数据
        json_data = {
   
   "mobile": "13800000002", "password": "123456"}

        # 调用自己封装的接口
        resp = IhrmLoginApi.login(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"))
        assert_util(self, 200, True, 10000, "操作成功")

    # 手机号为空
    def test02_moblie_none(self):
        # 1、组织请求数据
        json_data = {
   
   "mobile": None, "password": "123456"}

        # 调用自己封装的接口
        resp = IhrmLoginApi.login(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"))
        assert_util(self, 200, False, 20001, "用户名或密码错误")


    # 密码错误
    def test03_pwd_err(self):
        # 组织请求数据
        json_data = {
   
   "mobile": "13800000002", "password": "123456890"}
        # 调用自己封装的接口
        resp = IhrmLoginApi
<think>我们正在处理用户关于iHRM系统接口测试本地化部署方案的问题。根据用户提供的引用内容,我们可以提取以下关键信息: 1. 引用[1]展示了前端开发服务器的代理配置,用于解决跨域问题。具体配置是将以`/api`开头的请求代理到目标服务器(例如百度),并通过路径重写移除`/api`前缀。 2. 引用[2]提供了使用Newman运行Postman集合的命令,用于接口测试的持续集成,并生成HTML报告。 3. 引用[3]提到了性能测试的相关概念和工具,包括Jmeter和Locust,以及性能测试的类型和指标。 用户需求是获取iHRM系统接口测试的本地化部署方案。本地化部署通常意味着将系统部署在本地环境(如个人电脑或公司内网服务器),以便进行接口测试。 结合引用内容,我们可以推断iHRM系统是一个前后端分离的项目。前端可能使用类似Vue.js的框架,后端提供API接口。本地化部署需要部署后端服务,并配置前端以连接本地后端。 ### 步骤分解 1. **后端服务部署**: - 获取iHRM后端代码(可能是Java项目,因为引用中提到了Spring Boot的代理配置)。 - 配置数据库(如MySQL)并导入初始数据。 - 启动后端服务(通常在本地端口运行,如8080)。 2. **前端服务部署**: - 获取iHRM前端代码(可能是Vue.js或React项目)。 - 配置前端连接后端的地址。在开发环境中,通常使用代理解决跨域问题(如引用[1]所示)。 - 启动前端服务(通常在本地端口如8888运行)。 3. **接口测试**: - 使用Postman编写接口测试用例,并导出为集合(如`IHRM.postman_collection.json`)和环境变量文件(如`test.postman_environment.json`)。 - 使用Newman运行测试集合并生成报告(如引用[2]所示)。 4. **持续集成(可选)**: - 将上述测试过程集成到CI/CD工具(如Jenkins)中,实现自动化测试。 ### 详细方案 #### 1. 后端部署 假设iHRM后端是一个Spring Boot项目: - 克隆项目代码或获取项目压缩包。 - 使用IDE(如IntelliJ IDEA)导入项目,或使用Maven命令构建:`mvn clean package`。 - 配置数据库连接信息(`application.properties`或`application.yml`),创建数据库并导入初始化SQL脚本。 - 运行项目:`java -jar target/ihrm-backend.jar`(假设构建后的jar包名为`ihrm-backend.jar`)。 #### ##### 验证后端部署: 访问`http://localhost:8080/`(或配置的端口)的健康检查接口,如`/actuator/health`,应返回状态UP。 #### 2. 前端部署 假设iHRM前端是一个Vue.js项目: - 克隆项目代码或获取项目压缩包。 - 安装Node.js和npm(或yarn)。 - 安装依赖:`npm install`。 - 配置代理:在`vue.config.js`中配置代理,如引用[1]所示。但注意,引用[1]中的目标地址是百度,我们需要改为本地后端地址。例如: ```javascript module.exports = { devServer: { proxy: { '/api': { target: 'http://localhost:8080', // 后端服务地址 changeOrigin: true, pathRewrite: { '^/api': '' // 移除请求路径中的/api } } } } } ``` - 启动前端:`npm run serve`,通常运行在`http://localhost:8888`。 ##### 验证前端部署: 打开浏览器访问`http://localhost:8888`,应能看到登录页面。 #### 3. 接口测试 - 使用Postman: 1. 导入已有的接口测试集合(如`IHRM.postman_collection.json`)和环境变量文件(如`test.postman_environment.json`)。 2. 修改环境变量中的`base_url`为本地后端地址(如`http://localhost:8080`)。 3. 运行测试集合,确保所有测试通过。 - 使用Newman运行测试(命令行): ```bash newman run IHRM.postman_collection.json -e test.postman_environment.json -r html --reporter-html-export report.html ``` 这将在当前目录生成`report.html`测试报告。 #### 4. 持续集成(示例) 在Jenkins中配置一个自由风格项目: 1. 源码管理:Git(配置仓库地址)。 2. 构建步骤:执行Shell命令,包括: - 启动后端服务(可能需要后台运行) - 启动前端服务(可能需要后台运行) - 运行Newman测试 3. 归档HTML报告(使用插件:HTML Publisher plugin)。 ### 注意事项 - 数据库:确保本地数据库服务运行,且表结构和数据正确。 - 端口冲突:如果8080或8888端口被占用,需修改配置。 - 环境变量:在测试环境中,可能需要配置不同的环境变量(如数据库连接、密钥等)。 ### 引用说明 - 引用[1]提供了前端代理配置的示例,我们将其调整用于连接本地后端。 - 引用[2]提供了Newman运行测试的命令,用于本地测试和持续集成。 - 引用[3]关于性能测试的内容,虽然与本地部署没有直接关系,但可以作为后续性能测试的参考。 ### 相关问题 1. 如何解决iHRM前端访问后端时的跨域问题? 2. 如何使用Newman在本地运行Postman集合并生成报告? 3. 如何将iHRM接口测试集成到Jenkins中实现持续集成?</think>### iHRM接口测试本地化部署方案 根据引用内容[1][2][3],iHRM系统接口测试的本地化部署需要完成以下核心步骤: #### 1. **后端服务部署** ```bash # 克隆项目代码 git clone http://ihrm.itheima.net/api.git cd ihrm-backend # 安装依赖并启动(以Spring Boot为例) mvn clean package java -jar target/ihrm-core.jar ``` - **关键配置**:修改`application.yml`中的数据库连接信息 - **验证**:访问`http://localhost:8080/swagger-ui.html`查看API文档[^1] #### 2. **前端服务部署** ```javascript // vue.config.js 代理配置(引用[1]) module.exports = { devServer: { proxy: { '/api': { target: 'http://localhost:8080', // 指向本地后端 changeOrigin: true, pathRewrite: { '^/api': '' } // 移除API前缀 } } } } ``` ```bash # 启动前端服务 npm install npm run serve ``` - 访问地址:`http://localhost:8888` #### 3. **数据库部署** ```sql -- 创建数据库(MySQL示例) CREATE DATABASE ihrm_db; USE ihrm_db; SOURCE /path/to/init.sql; -- 导入初始化脚本 ``` - **配置要求**: - 字符集:`utf8mb4` - 账号权限:需开放远程连接(测试用) #### 4. **接口测试环境搭建** 1. **Postman配置**: - 导入集合:`IHRM.postman_collection.json` - 环境变量:`test.postman_environment.json`中设置: ```json { "base_url": "http://localhost:8080", "token": "{{login_token}}" } ``` 2. **自动化测试执行**(引用[2]): ```bash newman run IHRM.postman_collection.json \ -e test.postman_environment.json \ -r html --reporter-html-export report.html ``` #### 5. **持续集成配置(Jenkins示例)** ```groovy pipeline { stages { stage('Deploy Backend') { steps { sh 'java -jar ihrm-core.jar &' // 后台启动服务 } } stage('Run Tests') { steps { sh '''newman run tests/IHRM.postman_collection.json -e env/test.postman_environment.json --reporters cli,html''' } } } } ``` ### 部署验证要点 1. **连通性检查**: - 前端 → 后端:`curl http://localhost:8888/api/sys/profile` - 后端 → 数据库:`SHOW STATUS LIKE 'Threads_connected';` 2. **测试覆盖范围**(引用[3]): - 核心模块:登录认证、员工管理、薪资计算 - 性能指标:响应时间<500ms,吞吐量>50req/s 3. **跨域解决方案**: - 后端添加`@CrossOrigin`注解 - Nginx反向代理配置: ```nginx location /api { proxy_pass http://localhost:8080; add_header 'Access-Control-Allow-Origin' '*'; } ``` ### 常见问题排查 | 问题现象 | 解决方案 | |---------|----------| | 前端代理404 | 检查`vue.config.js`的`pathRewrite`规则[^1] | | 数据库连接失败 | 验证`spring.datasource.url`的IP和权限 | | Token失效 | 检查测试脚本的`pm.setGlobalVariable()`调用时序 | | 性能不达标 | 使用Jmeter进行并发压力测试[^3] | > **注**:完整部署资源获取路径: > 后端代码:`http://ihrm.itheima.net/api.git` > 测试集合:`IHRM.postman_collection.json` > 初始化SQL:`ihrm_db_init_v2.3.sql`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值