接口自动化搭建之我所见

测试项目:若依管理平台
架构选型1:jenkins+ant+jmeter
阐述
jenkins配置node和item
node负责jenkins和远程机器的配对以实现定时任务
item为jenkins的job配置,包括定时、git拉取和运行结果校验以及触发一些邮件企微钉钉之类的通知,当然最核心功能:触发ant脚本的执行
ant的build.xml编写有不同的target,每个target可以理解为一个任务,按顺序执行,target可以包含执行jmeter脚本,生成jmeter报告,打压缩包和发送邮件等一系列操作
jmeter脚本编写接口自动化的case,可以配置一些数据驱动(用户自定义的变量,csv,mysql等),做一些响应断言和一些关联操作(json和正则提取器)包括一些函数助手啊,beanshell等的使用以丰富测试手法。
任务分解
1.jenkins关联slave机和gitee仓库(保证代码拉取并推到slave上)
2.slave机部署ant和jmeter环境(保证脚本运行)
3.ant的build.xml和jmeter脚本编写并上传gitee(保证脚本的迭代优化)
4.jenkins配置定时任务,编写命令行脚本移动build.xml到ant目录并使用ant命令执行(保证使用最新的build.xml运行任务)
实际任务执行顺序应该是3-4-1-2-3-3-3……即:先把脚本上传gitee,jenkins定时去拉取推到slave上执行,后续不断迭代和优化。
架构选型2:jenkins+python+pytest(主流方案,较灵活)
阐述
此方案与前者的区别就是把ant+jmeter发挥的作用使用Python脚本替代,并选用pytest封装并运行case,相较前者更灵活,不受工具的限制,但是项目代码的封装需要一定的技术成本,如何做到项目结构清晰合理,脚本运行高效且代码量简洁易维护应当作为我们不断追求的目标。
下面针对方案2作详细说明,如有疏漏或者您有疑问或更优解,也欢迎评论或私信,与您的交流将是推动我持续更文的极大动力。

一、jenkins搭建
1.jenkins配置slave代理

附上官网安装步骤
需注意:默认端口8080常用,请避免端口冲突
安装之后打开,输入密匙进入
新建从节点,即node,只需填写名称、workspace路径、标签(用于job指定node来运行使用)和启动方式(我们选java web方式)即可

配置从节点

保存之后会显示从节点的代理连接方式
保存后显示

需要在从节点机器上保存agent.jar,执行下方的java -jar命令即可
可能会报错,踩坑如下:
报错404

查了下大概原因是代理端口不能和jenkins端口一样,端口冲突需要改一下【系统管理】-【全局安全配置】下的代理端口即可
修改代理端口

再次执行,最后一行显示Connected即为成功
从节点代理连接成功

此时刷新节点列表的状态,等图标的红叉消失即为成功(可能会有一定的延迟)
查看图标状态

2.jenkins新建item关联slave和gitee

由于网络原因,我们选择gitee进行代码管理
新建一个jenkins的item也就是job用来构建任务,添加指定运行的slave对应的label


指定slave运行

添加源码管理,这里选用https形式,添加凭据,输入gitee的用户名和密码即可(如使用ssh形式好像是需要配置密匙,回头可以了解一下)


源码管理

添加凭据

注意,如果是私有仓库会拉取失败,建议改用公开仓库配置。
添加定时任务

比如每天凌晨1点执行


定时任务设置

执行命令,因为我们选用了pytest,可以直接pytest(注意:根据slave机器的类型添加构建步骤,笔者选用的是Windows机器,故选择Windows批处理)
执行命令

至此,jenkins定时触发代码拉取并执行脚本流程完成。
二、脚本编写并上传gitee
1.项目结构

待补充

2.封装通用方法

待补充

功能 方法
测试数据存储 读取数据 PYaml
接口请求 get/post requests
3.运行入口

选用pytest,pytest.ini配置参数

4.git hook

特定场景下触发hook脚本(如:每次commit 、push之后,远程服务器同步最新代码)

from http.server import HTTPServer, BaseHTTPRequestHandler
import json
import subprocess
import os

class Resquest(BaseHTTPRequestHandler):
    def handler(self):
        print("data:", self.rfile.readline().decode())
        self.wfile.write(self.rfile.readline())

    def do_POST(self):
        print("hello webhook..")
        os.system('cd ./project/pear-admin-flask && git add . && git status  && git stash ;git stash clear;git pull')
        print("git pull finished")

if __name__ == '__main__':
    host = ('', 9002)
    server = HTTPServer(host, Resquest)
    print("Starting server, listen at: %s:%s" % host)
    server.serve_forever()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容