接口测试框架(封装)+Git+Jenkins

332 阅读6分钟

一、接口测试框架(5个目录文件,2个py文件)

  1. api:自己封装的接口
  2. data:存储的数据
  3. lib:第三方库
  4. report:测试报告
  5. script:测试脚本(测试类、测试方法)
  6. app.py:存放全局变量、公用变量
  7. run_suite.py:存放批量执行用例,生成测试报告的代码
  8. utils.py:存放工具函数、方法

二、总的封装步骤:

1、按普通方法实现http请求

2、将请求封装成自己的API(在api目录下)

3、在脚本中调用自己封装的API(在script目录下)

三、封装的思想

1、固定不变的,写入到属性方法中。

2、动态变化的,设置到参数返回值

四、数据参数化步骤

1、导包。

from parameterized import parameterized

2、在通用测试方法中的上一行,添加@parameterized.expand()

3、给expand()传入[(),()...]的数据。(把[{},{}...]数据进行转化)

4、修改通用测试方法,添加形参

5、在通用测试方法内,使用形参

import unittest
import app
import utils
from api.ihrm_login_api import IhrmLoginApi
from utils import common_assert
from parameterized import parameterized

class TestIhrmLogin(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        cls.api = IhrmLoginApi()
    filename = app.BASE_DIR + "/data/login_data.json"
    @parameterized.expand(utils.read_file(filename))
    def test01_login(self,desc,req_data,stauts_code,success,code,message):
        resp = self.api.login(req_data)
        common_assert(resp,stauts_code,success,code,message)

封装函数,获取json文件

def read_file(filename):
    with open(filename,'r',encoding="utf-8") as f:
        jsonData = json.load(f) #从文件中读取
        param_list = []
        #遍历循环,取value值,转换成元组,追加到空列表中。[(),()...]
        for i in jsonData:
            param_list.append(tuple(i.values()))
        return param_list

五、员工管理接口测试框架流程

image.png

1、封装(api)

  • 修改登录获取令牌
  • 封装员工crud接口

image.png

2、编写测试用例脚本(script)

  • 登录获取令牌
  • 添加员工获取ID
  • 增删改查查员工列表
  • 添加断言

image.png

3、参数化(登录接口参数化,data)

  • 组织数据文件
  • 读取数据文件
  • 用parameterized实现参数化

image.png

4、导入第三方库(如HTMLTestRunner.py,lib)

image.png

5、存放全局变量、公共变量(app.py)

image.png

6、定义的通用方法(如定义通用断言方法、获取json文件的函数)

image.png

7、生成测试报告(run_suite.py、report)

#存放批量执行用例,生成测试报告的代码
import unittest

import app
from lib.HTMLTestRunner import HTMLTestRunner

#1、将HTMLTestRunner.py 模块文件,放到lib/目录下
#2、在run_suite.py中,导入模块
#3、创建 测试套件 实例
from script.test_ihrm_login import TestIhrmLogin
suite = unittest.TestSuite()
#4、组装 测试用例到 测试套件
suite.addTest(unittest.makeSuite(TestIhrmLogin))
#5、指定测试报告生成的路径以及名称
report_path = app.BASE_DIR +"/report"+"myReport.html"
#6、open()打开报告,以wb形式写入
with open(report_path,"wb") as f:
    runner =HTMLTestRunner(f,title="人力资源系统报告",description="2023-2-20")
    runner.run(suite)

六、Git和Gitee

持续集成:团队成员将自己的工作成果,持续集成到一个公共平台的过程。

相关工具:

  • 本地代码管理:git
  • 远程代码管理:gitee(国内)、github(国外)、gitlib(公司私有服务器)
  • 持续集成:jenkins

1、git(本地代码管理)

git是一款在 本地 管理代码的工具。自带一个小型 仓库,存储本地代码

git需要安装。

查看:cmd,输入git --version

2、gitee(远程代码管理)

image.png git和gitee管理代码工作原理

image.png

七、PyCharm与Gitee相关操作

PyCharm配置Gitee插件

image.png

1、将Gitee的项目Checkout到PyCharm中

使用场景第一次加入某个项目,第一次从 gitee 获取代码时。

image.png

2、推送PyCharm新项目到Gitee远程仓库

应用场景:本地开发的项目,第一次上传到gitee中

image.png

image.png

image.png

3、将PyCharm代码push到Gitee远程仓库

使用场景:本地和gitee有相同的项目。本地代码做了新增,需要将新增的代码,推送gitee中。

image.png

第一步:添加到git缓存中:Add

image.png

第二步:添加到git中:Commit

image.png

image.png

第三步:推送到远程仓库:push

image.png

image.png

4、将Gitee仓库的新代码pull到PyCharm中

**应用场景:本地和gitee有相同的项目,gitee上代码做了新增,需要将新增的代码,拿到本地来。 **

image.png

5、解决冲突

应用场景:本地和gitee有相同项目,gitee上代码做了新增,本地对同一处代码,做了不同的新增。

image.png

image.png

image.png

结论:避免少出冲突:建议:先pull,再push。

八、Jenkins

简介:基于Java开发(必须按照jdk)的一种开源、跨平台的持续集成工具。

安装

  • 必须按照jdk,配置环境。
  • 查验:java -version

启动

  1. 在 jenkins.war 文件 所在 目录地址栏 输入 cmd 打开 终端。
  2. 输入命令 java -jar jenkins.war 启动服务。
  3. 启动成功后,终端窗口 不能关闭。最小化。
  4. 在浏览器地址栏 输入 localhost:8080

插件安装

  • Jenkins左侧菜单栏 —> “Manage Jenkins” —> 选择 “Manage Plugins” —> “可选插件” —> 插件名称,如:“HTML Publisher”

系统设置:

image.png

九、持续集成(Jenkins)-postman

准备工作:

  1. 打开已完成并测试无误的 postman 项目脚本。 再次执行测试。
  2. 导出(测试用例集、环境变量两个文件)“不支持中文” —— 全部改成英文!
  3. 文件所在目录地址栏输入cmd 打开终端。注意:用 “绝对路径” 测试。方便使用Jenkins。
  4. 执行无误,查看生成的测试报告文件
# extra版报告

newman run 测试用例集名.json -e 环境变量文件.json -d 数据文件.json -r htmlextra --reporter

htmlextra-export 报告名称.html

# 示例:

newman run "C:\Users\xwp\Desktop\postman_jenkins\iHRM.postman_collection.json" -e

"C:\Users\xwp\Desktop\postman_jenkins\iHRM_env.postman_environment.json" -r htmlextra --

reporter-htmlextra-export report.html

使用Jenkins管理——手动构建

打开 Jenkins 首页,点击 “新建Item” 创建一个新任务。

image.png

image.png

image.png

image.png

image.png

image.png

image.png

2、使用Jenkins管理——自动构建

  • 选择“构建触发器” 标签。 选择 “Build periodically(定期地)”
  • “日程表” 中写入:* * * * *(空格隔分) —> 分别对应 “分 时 日 月 年”
    • 修改:10 16 * * * 就是 每天的 16 点 10 分 执行。

image.png

报告样式错乱 原因:

  • Jenkins为了避免受到恶意攻击,设置了CSP安全策略。只允许加载 Jenkins服务器上托管的 CSS文件 和图片文件。
  • 我们的用例、代码都是放在自己的服务器上,被恶意攻击的可能性极低。

解决报告样式错乱:

  • 在启动时,添加参数 :
java -Dhudson.model.DirectoryBrowserSupport.CSP= -jar Jenkins.war

image.png

十、持续集成(Jenkins)-代码

准备工作:将运行无误,能生成报告的 iHRM项目代码上传至 Gitee中。

image.png

使用Jenkins管理——手动构建

  • 打开 Jenkins 首页, 点击 “新建Item” 创建一个新任务。

image.png

  • “源码管理” 标签。

image.png

  • “构建”标签

image.png

  • “构建后操作”标签

image.png

  • 再次点击“增加构建后操作步骤”

image.png

image.png

image.png

image.png

使用Jenkins管理——自动构建

image.png

在 “构建触发器” 标签。

  • 选择 “Build periodically(定期地)” 添加 定时构建!

  • “日程表” 中写入:* * * * *(空格隔分) —> 分别对应 “分 时 日 月 年”。修改:10 16 * * * 就是 每天的 16 点 10 分 执行。

  • 也可以在 “构建触发器” 标签 中选择 “Poll SCM”。 写入 :*/1 * * * * (空格隔分)。代表1分钟 检查一次 gitee 上的代码,查验是否有更新。

image.png

image.png